先看看串口的接口,
因为接口是复用的,可以作为IO也可以作为外设接口,所以要在P3SEL做一下设置。
接下来看看串口的设置流程,这点这个430的datasheet说的很清楚,我也很推荐这样的datasheet说明方式,不像有的公司,介绍了很多寄存器,但是这个功能怎么用,从开始初始化,设置寄存器,然后启动该应用没有介绍。这点,应该给MSP430单片机掌声,还有就是TI公司提供了一些简单的例程,可以学习一下,也挺方便大家使用430单片机的,这点蛮好的啊。
这个图片里面的5步就是告诉你怎么设置一个串口,很方便的吧,你只要对照这5步来,就行了。很方便的。
我们需要完成的工作就是第二步的那句初始化USART寄存器。接下来看看相关的寄存器吧。我把程序弄上来,对照程序说比较方便。
1: P3SEL |= 0x30; // 选择P3.4和P3.5做UART通信端口
2: ME1 |= UTXE0 + URXE0; // 使能USART0的发送和接受
3: UCTL0 |= CHAR; // 选择8位字符
4: UTCTL0 |= SSEL0; // UCLK = ACLK(32768HZ)
5: UBR00 = 0x03; // 波特率9600
6: UBR10 = 0x00; //
7: UMCTL0 = 0x4A; // Modulation
8: UCTL0 &= ~SWRST; // 初始化UART状态机
9: IE1 |= URXIE0; // 使能USART0的接收中断
第1,2 3 4句程序不解释了,自己看看寄存器就好了,
我主要说一下波特率的设置,在串口调试里面这点,都是比较繁琐的,像51还要和相关的定时器配合使用,
430单片机不需要定时器配合,只要有UCLK时钟就好了,这里时钟是32768HZ。
在datasheet里面有实例计算,如果你想具体了解,你可以看datasheet。
程序第8,9句都是按照上面串口设置流程来的啊,不多了,也简单。我下面复制一段代码,是力天电子的例程里面的,简单说2句。
- /******************************************************
- 程序功能:接收来自PC机的字符,然后重新发送给PC机
- -------------------------------------------------------
- 通信格式:N.8.1, 9600
- 无校验,8个数据位,1个停止位,波特率9600
- ------------------------------------------------------
- 测试说明:打开串口调试助手,正确设置通信格式,向学习板
- 发送一个字符,观察是否收到回发的字符,以及是否
- 正确
- *******************************************************/
- #include <msp430x14x.h>
- #include "BoardConfig.h"
- /********************主函数********************/
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
- BoardConfig(0xb8); // 关闭数码管、流水灯和电平转换
-
- P3SEL |= 0x30; // 选择P3.4和P3.5做UART通信端口
- ME1 |= UTXE0 + URXE0; // 使能USART0的发送和接受
- UCTL0 |= CHAR; // 选择8位字符
- UTCTL0 |= SSEL0; // UCLK = ACLK
- UBR00 = 0x03; // 波特率9600
- UBR10 = 0x00; //
- UMCTL0 = 0x4A; // Modulation
- UCTL0 &= ~SWRST; // 初始化UART状态机
- IE1 |= URXIE0; // 使能USART0的接收中断
- while(1)
- {
- _EINT(); //打开全局中断
- LPM1; //进入LPM1模式
- while (!(IFG1 & UTXIFG0)); //等待以前的字符发送完毕
- TXBUF0 = RXBUF0; //将收到的字符发送出去
- }
- }
- /*******************************************
- 函数名称:UART0_RXISR
- 功 能:UART0的接收中断服务函数,在这里唤醒
- CPU,使它退出低功耗模式
- 参 数:无
- 返回值 :无
- ********************************************/
- #pragma vector = UART0RX_VECTOR
- __interrupt void UART0_RXISR(void)
- {
- LPM1_EXIT; //退出低功耗模式
- }
这里他使用了430单片机的低功耗模式,全局中断打开以后执行了LPM1,这是进入低功耗的一条宏定义,使用起来很方便,其实430单片机低功耗,就是设置一些状态位,然后关闭相应的时钟源,这样以来就降低了功耗,下图说的很明白了啊。我们使用LPM1,那就是说只用SMCLK,ACLK还是激活的,我们串口使用的时钟是ACLK,所以低功耗模式下面还是可以接收数据,然后在中断函数里面将CPU唤醒(就是退出LPM1模式),然后执行LPM1后面的while语句,将接收到的数据发送回PC。上面的例程也正是说明了这点。
下面2张图片是关于LPM系列低功耗宏定义的设置,自己可以看看。
阅读(8212) | 评论(1) | 转发(1) |