MSP430F5438学习笔记 UART SMCLK 115200

MSP430中 UCBR0、UCBR1和UCBRF的设置值可以通过计算,也通过通过查表获得。我个人倾向于查表法。具体可以参考以下两张图表。默认情况,ACLK为32768MHZ,而SMCLK为1048576。选择ACLK时波特率最大为9600,大于9600的情况只能使用SMCLK,波特率的设置和SMCLK的时钟频率有关,,我个人更倾向于设置SMCLK和MCLK为8MHz。

// 时钟默认情况// FLL时钟FLL选择 XT1// 辅助时钟ACLK选择 XT132768Hz// 主系统时钟 MCLK选择 DCOCLKDIV 8000000Hz// 子系统时钟 SMCLK选择 DCOCLKDIV 8000000Hz// UART时钟选择 SMCLK// 低频波特率产生 115200-8-N-1#include <msp430.h>#include <stdio.h>void clock_config(void);void select_xt1(void);void dco_config(void);void uart_config(void);int main(void){clock_config();// 初始化时钟uart_config();_EINT();P4DIR |= BIT0;// P4.0输出printf("Hello MSP430!\r\n");while(1){P4OUT ^= BIT0;__delay_cycles(1000000);}}void clock_config(void){WDTCTL = WDTPW + WDTHOLD;// 停止看门狗select_xt1();// 选择XT1dco_config();// ACLK = XT1 = 32.768K// MCLK = SMCLK = 8000K}void select_xt1(void){// 启动XT1P7SEL |= 0x03;// P7.0 P7.1 外设功能UCSCTL6 &= ~(XT1OFF);// XT1打开UCSCTL6 |= XCAP_3;// 内部电容do{UCSCTL7 &= ~XT1LFOFFG;// 清楚XT1错误标记}while (UCSCTL7&XT1LFOFFG);// 检测XT1错误标记}void dco_config(void){__bis_SR_register(SCG0);// 禁止FLL功能UCSCTL0 = 0x0000;// Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_5;// DCO最大频率为16MHzUCSCTL2 = FLLD_1 + 243;// 设置DCO频率为8MHz// MCLK = SMCLK= Fdcoclkdiv = (N+1)X(Ffllrefclk/n)// N为唯一需要计算的值// Ffllrefclk FLL参考时钟,默认为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);// 等待清楚完成}void uart_config(void){P3SEL = 0x30;// 选择P3.4和P3.5的复用功能UCA0CTL1 |= UCSWRST;// 软件复位UCA0CTL1 |= UCSSEL_2;// 选择SMCLK时钟UCA0BR0 = 69;// 查表获得UCA0BR1 = 0;// UCA0BRX和UCA0MCTL数值UCA0MCTL |= UCBRS_4 + UCBRF_0;//UCA0CTL1 &= ~UCSWRST;//UCA0IE |= UCRXIE;// 使能接收中断}int putchar(int ch){UCA0TXBUF = ch;while(!(UCA0IFG & UCTXIFG));return ch;}#pragma vector=USCI_A0_VECTOR__interrupt void USCI_A0_ISR(void){ switch(__even_in_range(UCA0IV,4)) { case 0:break; case 2:// 接收中断while (!(UCA0IFG&UCTXIFG));// 等待发送完成UCA0TXBUF = UCA0RXBUF;// 接收缓冲区break; case 4:break;// 发送中断 default: break; }}

这一次是一个告别,或者一个永远的告别,

MSP430F5438学习笔记 UART SMCLK 115200

相关文章:

你感兴趣的文章:

标签云: