[资料分享] MSP430F149串口收发程序详解

fish001   2019-9-21 22:29 楼主

MSP430单片机的串口收发程序涉及到多个寄存器,可以一步一步按照以下步骤进行配置:
1、首先将用到的IO口设置为第二功能,例如要使用P3.4和P3.5作为USART0的TXD和RXD,则有 P3SEL |= BIT3+BIT4;
2、使能串口收发功能,要配置以下寄存器
如果既要收,又要发,则需要将UTXE0和URXE0置1,因为他们默认都是不打开的。
在IAR的头文件中有关于两位的掩码:
#define UTXE0   (0x80)
#define USPIE0  (0x40)
因此,我们可以直接使用语句:
ME1 |= UTXE0 + URXE0; 
3、选择每帧的数据位的个数,需要配置寄存器:
 默认的是7bit数据位,因此将CHAR位置1就是8位数据位。
  UCTL0 |= CHAR; 
4、选择波特率发生源,MSP430F149的波特率发生源有四种
波特率的分频系数要求大于3,要选择合适的时钟源,可以遵循以下规则:当波特较低时(<9600),可以选择ACLK,辅助时钟一般情况下使用是32768Hz的Watch Oscilliater,
当波特率较高时要使用SMCLK子系统时钟。
在IAR的头文件中有如下定义:
#define SSEL0  (0x10) /* Clock Source Select 0 */
因此要选用ACLK,可以使用:
UTCTL0 |= SSEL0;
5、配置波特率,这个需要结合选用的时钟源进行相应的计算:
首先它需要用到三个寄存器UXBR0,UXBR1和UXMCLK
然后要弄清楚分频比:
其中的BRCLK是指波特率发生器的时钟源的频率,例如本例当中使用的ACLK= 32768Hz, baude rate是指我们最终希望配置成的频率,例如本例需要的是9600
那么N=32768/9600=3.41
UXBRO和UXBR1组合为一个16位的寄存器,它保存整数部分,所以UXBR0=3,UXBR1=0;
UXMCLK用来保存小数部分,小数部分的计算比较复杂
首先让小数部分0.41*8=5.08 取整就是5
则UXBR1这个8位寄存器中就应该有5个1,这五个1要分布相对平均,可以取01001010,就是4A
要注意UXBR1的取值并不唯一。
在User's Guide中已经计算好的有如下:
这些是常用值,建议使用的时候参考参考,免去计算的麻烦。
6、软件清除复位标志位
寄存器如下:
其中第一位用于是否具有软件复位UART功能,一般需要关闭该功能,也就是复位。
UCTL0 &= ~SWRST; 

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复