Chinaunix首页 | 论坛 | 博客
  • 博客访问: 52409
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-15 14:18
文章分类

全部博文(14)

文章存档

2014年(14)

我的朋友

分类: LINUX

2014-08-26 15:14:15

先看看串口的接口,
因为接口是复用的,可以作为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句。

点击(此处)折叠或打开

  1. /******************************************************
  2. 程序功能:接收来自PC机的字符,然后重新发送给PC机
  3. -------------------------------------------------------
  4. 通信格式:N.8.1, 9600
  5.          无校验,8个数据位,1个停止位,波特率9600
  6. ------------------------------------------------------
  7. 测试说明:打开串口调试助手,正确设置通信格式,向学习板
  8.           发送一个字符,观察是否收到回发的字符,以及是否
  9.           正确
  10. *******************************************************/
  11. #include <msp430x14x.h>
  12. #include "BoardConfig.h"

  13. /********************主函数********************/
  14. void main(void)
  15. {
  16.     WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
  17.     BoardConfig(0xb8);        // 关闭数码管、流水灯和电平转换
  18.     
  19.     P3SEL |= 0x30;            // 选择P3.4和P3.5做UART通信端口
  20.     ME1 |= UTXE0 + URXE0;     // 使能USART0的发送和接受
  21.     UCTL0 |= CHAR;            // 选择8位字符
  22.     UTCTL0 |= SSEL0;          // UCLK = ACLK
  23.     UBR00 = 0x03;             // 波特率9600
  24.     UBR10 = 0x00;             //
  25.     UMCTL0 = 0x4A;            // Modulation
  26.     UCTL0 &= ~SWRST;          // 初始化UART状态机
  27.     IE1 |= URXIE0;            // 使能USART0的接收中断

  28.     while(1)
  29.     {
  30.         _EINT();                   //打开全局中断
  31.         LPM1;                      //进入LPM1模式
  32.         while (!(IFG1 & UTXIFG0)); //等待以前的字符发送完毕
  33.         TXBUF0 = RXBUF0;           //将收到的字符发送出去
  34.     }
  35. }
  36. /*******************************************
  37. 函数名称:UART0_RXISR
  38. 功 能:UART0的接收中断服务函数,在这里唤醒
  39.           CPU,使它退出低功耗模式
  40. 参 数:无
  41. 返回值 :无
  42. ********************************************/
  43. #pragma vector = UART0RX_VECTOR
  44. __interrupt void UART0_RXISR(void)
  45. {
  46.   LPM1_EXIT;                      //退出低功耗模式
  47. }
这里他使用了430单片机的低功耗模式,全局中断打开以后执行了LPM1,这是进入低功耗的一条宏定义,使用起来很方便,其实430单片机低功耗,就是设置一些状态位,然后关闭相应的时钟源,这样以来就降低了功耗,下图说的很明白了啊。我们使用LPM1,那就是说只用SMCLK,ACLK还是激活的,我们串口使用的时钟是ACLK,所以低功耗模式下面还是可以接收数据,然后在中断函数里面将CPU唤醒(就是退出LPM1模式),然后执行LPM1后面的while语句,将接收到的数据发送回PC。上面的例程也正是说明了这点。
下面2张图片是关于LPM系列低功耗宏定义的设置,自己可以看看。
 
这里使用了中断,中断函数的写法,上面程序可以看出来,不多说了,还有一种中断程序的写法,在我转载的一个网友有关430单片机开发文章里面(http://blog.chinaunix.net/uid-24343357-id-3272526.html),提到了,可以去看看一下,这里我不多说了。
 
阅读(911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~