430出现了大量问题(msp430fr5968)。 初始化 micro 和 UART (请参阅下面的初始化代码)。 然后向 TX 缓冲区发送一个字符(UCA1TXBUF = 0x55;)。 初始化后、发送数据线为高电平、但当字符加载到 TX buf 中时、txdata 变为低电平并保持该状态。
我被骗了! 就像 UART 的时钟不存在一样。 这可能是两个问题。
使用一个计时器中断检查了4、000个时钟的时钟频率(正在运行且频率连接到 HFXT 引脚的4MHz 陶瓷谐振器)(一毫秒中断)、并且中断的时间仅为750us (??)。
我不得不做一些非常愚蠢的事情,但我找不到它——因此,任何帮助都将得到极大的感谢!!!
Bob Scott
214.673.1439
下面初始化–
void init_micro (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT 中断
PMMCTL0 = 0XA540;//解锁 PMM 寄存器
PM5CTL0 =~LOCKLPM5;//打开 IO 端口配置功能
UCA1CTLW0 = 0X00E1; //保持复位至设置
UCA1BRW = 0x0004; // 57600基于4MHz 时钟
UCA1MCTLW = 0x5551; // 57600基于4MHz 时钟
// init 主寄存器首先为 hfxtl 选择端口
FRCTL0 = 0xA501;针对 FR 存储器的//设置写保护
//初始化 IO 端口
P1SEL0 = 0x03; // P1.0 & 1是模拟 Vref
P1SEL1 = 0x03;
P1DIR = 0x80; //**++仅用于测试,P1位1是时间测试的输出
P1IES = 0x30; //启用的初始中断脉冲发生器稍后将启用此功能
P1OUT = 0x00; //初始输出状态全部为低电平
P1IFG = 0;//尝试清除 INT 标志
P1IE = 0x30;
//设置端口2
P2SEL0 = 0x00; //对于位7、所有引脚都是 I/O 更改、请使用 COMPAIR
P1SEL1 = 0x60;5和6上的//UART
P2DIR = 0xBF; //除 RXD 外的所有输出
P2IE = 0x00; //中断被禁用
P2OUT = 0x6f; //初始输出状态 LED 关闭(高电平)
//设置端口3
P3SEL0 = 0x00; //使用 UART 0 (P3-4、5)其他半个 I/O
P3SEL1 = 0x0C; //比较器 C14 - C15
P3DIR = 0xF3; //除以外的所有输出
P3OUT = 0x00; //初始输出状态全部为低电平(RS485 RX)
//设置端口4
P4SEL0 = 0x00; //所有引脚都是 I/O
P4SEL1 = 0x00;
P4DIR = 0xF0; //下半部分输入、上半部分输出
P4OUT = 0x00; //初始输出状态全部为低电平
//设置端口 J
PJSEL0 = 0xCF; //位4和位5是 IO
PJSEL1 = 0x00;
PJDIR = 0x00; //所有输出(未使用)
PJOUT = 0x00; //初始输出状态全部为低电平
//时钟
CSCTL0 = 0xA500;//设置密码以更改时钟寄存器
CSCTL4 = 0xC009;//HF 开启、高驱动、oSCS 关闭
CSCTL2 = 0x0055;//HF 用于所有时钟
CSCTL3 = 0x0000;所有时钟上的//DIV 为1
int m = 0;//等待时钟稳定
while (m < 1000)
{
M++;
}
CSCTL5 &=~HFXTOFFG;//复位故障
//初始化 UART RS485
UCA1CTLW0 = 0X00E0; //初始化 USART0状态机(~SWRST)释放复位
UCA1IE = UCRXIE; //启用 USART RX 中断(仅 Rx)
//初始化计时器
TA0CTL = 0x0212; //0x01D6; // SMCLK、向上计数到 TACCR0 (CCR0)、清除计时器、启用中断
TA0CCTL0 = 0x0010;//启用比较 int
TA0CCR0 = 0x0F9E; // 1msec 中断
TA0CCTL1 = 0;
TA0CCTL2 = 0;
TA0R = 0x0001;//开始计时器
//++设置比较器
CECTL0 = 0x008F;//+输入通道15和-输入 VREF
CECTL1 = 0x050c;//++ comp 打开、正常模式、输出滤波、下降沿内部
CECTL2 = 0x20D0;//++ vfref 至- term、1.2v ref、ref 共享
CEINT = 0x0100;// int 打开
}