查看: 253|回复: 0
打印 上一主题 下一主题

【MSP430F149学习】16 异步串行通信

[复制链接] qrcode

41

主题

50

帖子

150

积分

注册会员

Rank: 2

积分
150
楼主
跳转到指定楼层
发表于 2015-12-10 06:38 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


【MSP430F149学习】16 异步串行通信



准备工具:电脑;TS8900--MSP430F149开发板;USB转TTL模块;USB线两根


开发环境:IAR EW for MSP430 V5.30

异步串行通信模块概述


       串口是系统与外界联系的重要手段,在嵌入式系统开发和应用中,经常需要上位机实现


系统调试及现场数据的采集和控制。一般是通过上位机本身配置的串行口,通过串行通信技


术,和嵌入式系统进行连接通信。


异步串行通信模块原理图


USART 模块结构上图所示。该模块包含 4 个部分:


n  波特率部分:控制串行通信数据接收和发送的速度。
n  接收部分:接收串行输入的数据。
n  发送部分:发送串行输出的数据。
n  接口部分:完成并/串、串/并转换


串口控制寄存器



PENA:校验允许位
0  校验禁止;
1  校验允许。
校验允许时,发送端发送校验,接收端接收该校验。地址位多机模式中,地址位包含校验操作。
PEV:奇偶位校验位,该位在校验允许时有效
0  奇校验;
1  偶校验。
SPB:停止位选择。决定发送的停止位数,但接收时接收器只检测 1 位停止位。
01 位停止位
12 位停止位。
CHAR:字符长度
07 位
18 位。
LISTEN:反馈选择。选择是否讲发送数据由内部反馈给接收器
0  无反馈
1  有反馈,发送信号由内部反馈给接收器。
SYNC:USART 模块的模式选择
0  UART 模式(异步)
1  SPI 模式(同步) 。
MM:多机模式选择位
0  线路空闲多机协议;
1  地址多机协议。
SWRST:控制位

       该位的状态影响着其他一些控制位和状态位的状态。在串行口的使用过程中,这一位是比


较重要的控制位。一次正确的 USART 模块初始化应该是这样的顺序:先在 SWRST=1 情况


下设置串行口;然后设置SWRST=0;最后如果需要中断,则设置相应的中断使能。


串口发送控制寄存器




CKPL:时钟极性控制位
0  UCLKI 信号与 UCLK 信号极性相同;
1  UCLKI 信号与 UCLK 信号极性相反;
SSELx:时钟源选择位
这两位确定波特率发生器的时钟源
0  外部时钟 UCLKI。
1  辅助时钟 ACLK。
2  子系统时钟 SMCLK。
3  子系统时钟 SMCLK。
URXSE:接收触发沿控制位
0  没有接收触发沿检测;
1  有接收触发沿检测。
TXWAKE:传输唤醒控制
0  下一个要传输的字符为数据
1  下一个要传输的字符为地址。
TXEPT:发送器空标志
在异步模式与同步模式时不一样
0  正在传输数据或者发送缓冲器(UTXBUF)有数据;
1  表示发送移位寄存器和 UTXBUF 空或者 SWRST=1。

串口接收控制寄存器



FE:帧错误标志
0  没有帧错误;
1  帧错误
PE:校验错误标志位
0  校验正确;
1  校验错误。
OE:溢出标志位
0  无溢出
1  有溢出。
BRK:打断检测位
0  没有被打断;
1  被打断。
URXEIE:接收出错中断允许位
0  不允许中断,不接收出错字符并且不改变 URXIFG 标志位;
1  允许中断,出错字符接收并且能够置位 URXIFG。
URXWIE:接收唤醒中断允许位
当接收到地址字符时,该位能够置位 URXIFG,当 URXEIE=0,如果接收内容有错误,该位不能置位
URXIFG。
0  所有接收的字符能够置位 URXIFG; 
1  只有接收到地址字符才能置位 URXIFG。
RXWAKE:接收唤醒检测位
在地址位多机模式,接收字符地址位置位时,该机被唤醒,在线路空闲多机模式,在接收到字符前检
测到 URXD 线路空闲时,该为被唤醒,RXWAKE 置位。
0  没有被唤醒,接收到的字符是数据;
1  唤醒,接收的字符是地址。
RXERR:接收错误标志位
0  没有接收错误;
1  有接收错误。


串口接受缓冲寄存器 UxRXBUF
串口发送缓冲寄存器 UxTXBUF


简单的练习:串口发送与接收


硬件连接图:



程序代码:


//******************************************************************************
//  MSP-FET430P140 Demo - USART0, UART 115200 Echo ISR, XT2 HF XTAL ACLK
//
//  程序功能概述: 配置好串口波特率115200,8位数据位,停止为一位,奇偶校验位无。
//               使能串口接收中断,并开启总中断进入低功耗模式0
//               串口的接收终端触发发送USART0 
//  MCLK = SMCLK = UCLK0 = XT2 = 8MHz
//  Baud rate divider with 8Mhz XTAL = 8000000/115200 = 0069 (0045h) 
//******************************************************************************

#include  

void main(void)
{
  volatile unsigned int i;
  
 
  WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗
  P3SEL |= 0x30;                            // 将串口对应的IO口配置为串口模式

  BCSCTL1 &= ~XT2OFF;                       // 选通外部晶振2

  do
  {
  IFG1 &= ~OFIFG;                           // 清除晶振标志位
  for (i = 0xFF; i > 0; i--);               // 等待晶振稳定起振  
  while ((IFG1 & OFIFG));                   // 

  BCSCTL2 |= SELM_2 + SELS;                 // MCLK = SMCLK = XT2 (safe)
  ME1 |= UTXE0 + URXE0;                     // 使能串口 USART0 TXD/RXD
  UCTL0 |= CHAR;                            // 8位数据位
  UTCTL0 |= SSEL1;                          // 时钟来源SMCLK
  UBR00 = 0x45;                             // 8MHz 115200
  UBR10 = 0x00;                             // 8MHz 115200
  UMCTL0 = 0x00;                            // 8MHz 115200 模式
  UCTL0 &= ~SWRST;                          // 初始款串口状态机
  IE1 |= URXIE0;                            // 使能串口接收终端

  _BIS_SR(LPM0_bits + GIE);                 // 进入低功耗模式0并开启总中断
}

//串口中断函数

#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
  while (!(IFG1 & UTXIFG0));                // 等待发送准备OK
  TXBUF0 = RXBUF0;                          // 将接收到的数据发送回去
} 



下载到开发板打开串口调试周守测试效果





【MSP430F149学习】汇总贴



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表