主题中讨论的其他部件: MSP430FR2311, MSP-EXP430FR5739
我已按照 《MSP430FR57xx系列用户指南》中的表18-5使用注册表项,在以8MHz的时钟频率运行时配置了MSP430FR5739 UART。 典型晶体和紫色的推荐设置。 这适用于8MHz时钟。 但是,当我使用表中的值尝试另一个频率时,UART会发出垃圾信息。 是否有人建议您是否需要其他设置? 请参阅以下代码:
// UART测试
#include <MSP4S.h>
//定义常量值
//#define MCU_CLK_8MHZ //将此注释为使用16MHz时钟
#define UART_TXD BIT0 //引脚19:2.0 UARTXD
#define UART_RXD BIT1//引脚20:2.1 UARTRXD
8MHz用户指南中的#ifdef MCU_CLK_8MHZ //值
#define UART_BR 52.
#define UART_BRF 1.
#define UART_BRS 0x49
#define UART_OS16 1.
#else //用户指南中16MHz的值
#define UART_BR 104
#define UART_BRF 2.
#define UART_BRS 0xD6
#define UART_OS16 1.
#endif
//函数声明和变量
void UART_TX(Char *TXData);
CHAR* TXString;// UART的传输字符串
//主菜单
void main (void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//配置时钟
CSCTL0_H = 0xA5;//解锁寄存器
#ifdef MCU_CLK_8MHZ
CSCTL1 |= DCOFSEL0 + DCOFSEL1;// 8MHz
#否则
CSCTL1 || DCOFSEL_0 + DCORSEL;// 16MHz
#endif
CSCTL2 =拉美经济体系3 + SELS_3 + SELM_3;//设置ACLK = VLO;SMCLK = DCO,MCLK = DCO
CSCTL3 = DIVA_0 + DIVS_0 + DIVM_0;//设置所有分隔线
CSCTL0_H = 0x01;//锁定寄存器
//配置端口
P2SEL1 |= UART_TXD + UART_RXD;//配置UART引脚,可用于WFP 2.0 和WFP 2.1
P2SEL0 &=~(UART_TXD + UART_RXD);
//配置UART
UCA0CTL1 || UCSWRST + UCSSEL_2;//配置UART 0
UCA0BR0=(UART_BR&0xff);
UCA0BR1=(UART_BR>8);
UCA0MCTLW = UART_BRF|UART_BRS|UART_OS16;
同时(1)
{
TXString ="测试\r\n";
UART_TX (TXString);
__DELAY周期(2万);
}
}
void UART_TX(Char *TXData)//定义一个接受指向数组的字符指针的函数
{
//用于传输字符的函数
无符号int i=0;
UCA0CTL1 &=~UCSWRST;//复位后释放
while (TXData[I])//通过数组递增,查找字符串末尾的空指针(0)
{
同时(!(UCA0IFG和UCTXIFG));// USI_A0 TX缓冲器就绪?
UCA0TXBUF = TXData[I];//在UART总线上发送TX_DATA阵列的元素I
数组地址的I++;//增量变量
}
}