MSP430F5438学习笔记 UART ACLK 9600-8-N-1
扫描二维码
随时随地手机看文章
1.初始化UART0之前需要先初始化ACLK、SMCLK和MCLK。示例代码中使用XT1,ACLK为32768,SMCLK和MCLK约为8MHZ。
2.UART的时钟可以参考ACLK或者SMCLK,本例参考ACLK。由于参考ACLK时钟,所以串口速率不能超过32768。选择9600较为合适。
3.MSP430波特率的产生有两种模式,低频波特率产生和过采样波特率产生。代码中使用低频波特率产生。
4.代码的开头调用了stdio,在函数中宏重写了putchar函数,定向到UART单字节输出。
5.代码初始化之后输出 Hello MSP430,随后直接反射串口接收到的数据,例如发送123456即返回123456。
//时钟默认情况
//FLL时钟FLL选择XT1
//辅助时钟ACLK选择XT132768Hz
//主系统时钟MCLK选择DCOCLKDIV8000000Hz
//子系统时钟SMCLK选择DCOCLKDIV8000000Hz
//UART时钟选择ACLK
//低频波特率产生9600-8-N-1
#include
#include
voidclock_config(void);
voidselect_xt1(void);
voiddco_config(void);
voiduart_config(void);
intmain(void)
{
clock_config();//初始化时钟
uart_config();
_EINT();
P4DIR|=BIT0;//P4.0输出
printf("HelloMSP430!rn");
while(1)
{
P4OUT^=BIT0;
__delay_cycles(1000000);
}
}
voidclock_config(void)
{
WDTCTL=WDTPW+WDTHOLD;//停止看门狗
select_xt1();//选择XT1
dco_config();//ACLK=XT1=32.768K
//MCLK=SMCLK=8000K
}
voidselect_xt1(void)
{
//启动XT1
P7SEL|=0x03;//P7.0P7.1外设功能
UCSCTL6&=~(XT1OFF);//XT1打开
UCSCTL6|=XCAP_3;//内部电容
do
{
UCSCTL7&=~XT1LFOFFG;//清楚XT1错误标记
}while(UCSCTL7&XT1LFOFFG);//检测XT1错误标记
}
voiddco_config(void)
{
__bis_SR_register(SCG0);//禁止FLL功能
UCSCTL0=0x0000;//SetlowestpossibleDCOx,MODx
UCSCTL1=DCORSEL_5;//DCO最大频率为16MHz
UCSCTL2=FLLD_1+243;//设置DCO频率为8MHz
//MCLK=SMCLK=Fdcoclkdiv=(N+1)X(Ffllrefclk/n)
//N为唯一需要计算的值
//FfllrefclkFLL参考时钟,默认为XT1
//n取默认值,此时为1
//(243+1)*32768=8MHz
__bic_SR_register(SCG0);//使能FLL功能
//必要延时
__delay_cycles(250000);
//清楚错误标志位
do
{
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+XT1HFOFFG+DCOFFG);
//清除所有振荡器错误标志位
SFRIFG1&=~OFIFG;//清除振荡器错误
}while(SFRIFG1&OFIFG);//等待清楚完成
}
voiduart_config(void)
{
P3SEL=0x30;//选择P3.4和P3.5的复用功能
UCA0CTL1|=UCSWRST;//软件复位
UCA0CTL1 |= UCSSEL_1;