MSP430--UART模块

2020-05-20来源: eefocus关键字:MSP430  UART  模块

波特率发生器是用波特率选择寄存器和调整控制寄存器来产生串行数据位定时. 波特率
=BRCLK/(UBR+(M7+M6+M5+M4+M3+M2+M1+M0)),其中BRCLK为晶振频率,UBR为分频因子的整数,即晶振频率除以波特率的整数部分,而 M7,M6,M5,M4,M3,M2,M1,M0分别为调整位,是分别写在UMCTL中的,如果置位,则对应的时序时间只能波特率分频器的输入时钟扩展一个时钟周期,每接受或发送一位,在调整控制寄存器的下一位被用来决定当前位的定时时间.协议的第一位的定时由URB加上 M0决定,下一位由 UBR加上 M1决定,以后类推.而调整位取“0”还是“1”,取决于当前的分频因子与需要的分频因子的差距,如果大于 0.5取“1”,如果小于0.5取“0”,具体实例可见参考资料1。 


UART是通用异步串行接口的简称。串行通信接口是用来与单片机外界系统进行通信桥梁,比如可以吧单片机ADC转换的数据通过串口发送给PC机(上位机),经上位机处理之后在发回给单片,达到通信的目的。TI公司的MSP430系列单片机均具有UART功能,其中大部分还和SPI,I2C功能复用,通过相关寄存器的配置,可以很轻松地就实现了UART,SPI,I2C的通信功能。在此以MSP430x149为例介绍UART功能及其实现过程。

1.异步通信的结构:

MSP430--UART模块

2.UART数据格式(数据协议):

  image

异步通信再不发送数据的时候,通信线路上总是呈现高电平状态,称为空闲状态。当有数据发送是,信号线变成低电平,并持续一位的时间用于表示发送字符的开始,该为称为起始位。起始位之后在信号线上依次出现发送的数据。


起始位,数据位由高到低7/8位,地址位 0/1位,奇偶校验位 奇偶或无,停止位1/2位。数据位位数、地址位、奇偶校验位、停止位均可由单片机内部寄存器控制;这款单片机都有两个USART模块,有两套独立的寄存器组;以下寄存器命中出现x代表0或是1,0代表对应0模块的寄存器,1代表对应1模块的寄存器;其中,与串口模式设置相关的控制位都位于UxCTL寄存器,与接收相关的控制位都位于UxRCTL寄存器,与发送相关的控制位都位于UxTCTL寄存器;波特率设置用UxBR0、UxBR1、UxMCTL三个寄存器;接收与发送有独立的缓存UxRXBUF、UxTXBUF,并具有独立的移位寄存器和独立的中断;中断允许控制位位于IE1/2寄存器,中断标志位位于IFG1/2寄存器。


3.波特率设置:430的波特率设置用三个寄存器实现:
UxBR0:波特率发生器分频系数低8位。
UxBR1:波特率发生器分频系数高8位。
UxMCTL:波特率发生器分频系数的小数部分实现。
设置波特率时,首先要选择合适的时钟源:USART模块可以设置的时钟源有UCLK引脚、ACLK、SMCLK;对于较低的波特率(9600以下),可选ACLK作为时钟源,这样,在LPM3(低功耗3)模式下,串口仍能正常发送接收数据;另外,由于串口接收过程有一个三取二判决逻辑,这至少需要三个时钟周期,因此分频系数必须大于3;波特率高于9600时,将不能使用ACLK作为时钟源,要调为频率较高的SMCLK作为时钟源;另外还可以外部输入UCLK时钟。分频系数计算公式如下:

image

小数分频是MSP430单片机的串口特色之一,UxMCTL寄存器的作用就是控制小数的分频,控制方法如下:对应位是1,则分频系数加一,0则分频系数减一;小数分频器会自动依次取出每一位来调整分频系数。其计算方法:可以先计算小数部分一的个数,然后把1均匀的放入UxMCTL的8位中,这样计算比较简单,分频系数的小数部分乘以8即得到1的位数,查表得到对应的UxMCTL值;另外一种通过计算每一位的错误率,交互计算,直到得到最小错误率的UxMCTL值,这种方法比较复杂,但得到的小数分频误差更小。


4.UART的初始化及复位

 在初始化或者重新配置UART时,必须按照以下顺序进行:

(1)UxCTL寄存器的第0位SWRST置位;

(2)在SWRST置位的条件下,初始化所有的UART寄存器,包括UxCTL寄存器;

(3)通过置位模块使能寄存器MEx的URXEx和UTXEx位使能UART的接受和发送使能模块;

(4)通过软件复位UxCTL寄存器的第0位SWRST;

(5)通过中断使能寄存器IEx的URXIEx和UTXIEx来使能发送和接受中断。


5.UART的中断

(1)发送中断:当发送缓冲寄存器UxTXBUF被写入需要发送的数据的时候,UTXIFGx的中断标志位被置位;如果发送中断被允许,并且总中断被使能的话,则会向CPU发出中断请求。当响应中断请求之后,中断标志位被自动置0,在中断函数里边不需要手动清除标志位。

(2)接收中断:当有数据被装载到发送缓冲寄存器UxRXBUF时,UTXIFGx的中断标志位被置位;如果接受中断被允许,并且总中断被使能的话,则会向CPU发出中断请求。当响应中断请求之后,中断标志位被自动置0,在中断函数里边不需要手动清除标志位。

6.UART的相关寄存器:

MSP430--UART模块
MSP430--UART模块
UART的相关寄存器的每位功能参考TI公司提供的数据手册进行查看!!!


7.简单例程:
//将将接收到数据再发送回去;可以通过串口调试助手,观察单片机发送的数据
#include  

void main(void)
{
  volatile unsigned int i;

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD

//使用低功耗模式
  BCSCTL1 |= XTS;                           // ACLK= LFXT1= HF XTAL

  do
  {
  IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  for (i = 0xFF; i > 0; i--);               // Time for flag to set
  }
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?

  BCSCTL2 |= SELM_3;                        // MCLK = LFXT1 (safe)

//配置UART的功能

  UCTL0 |= CHAR;                            // 8-bit character
  UTCTL0 |= SSEL0;                          // UCLK= ACLK
  UBR00 = 0x45;                             // 8MHz 115200
  UBR10 = 0x00;                             // 8MHz 115200
  UMCTL0 = 0x00;                            // 8MHz 115200 modulation
  UCTL0 &= ~SWRST;                          // Initialize USART state machine

//发送和接受使能及其中断使能
  ME1 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
  IE1 |= URXIE0;                            // Enable USART0 RX interrupt

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}

#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
  while (!(IFG1 & UTXIFG0));                // USART0 TX buffer ready?
  TXBUF0 = RXBUF0;                          // RXBUF0 to TXBUF0
}

关键字:MSP430  UART  模块 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic497721.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430G2转换结果数据类型
下一篇:解决MSP-FET430UIF-CDC V3驱动安装不上的问题

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430F149内部Flash操作
一般,在单片机中的Flash存储器用于存放程序代码,属于只读型存储器。而在MSP430些列的单片机中,都可以通过内置的Flash控制器擦除或改写任何一段的内容。另外,msp430的单片机内部还专门留有一段Flash区域(information memory),用于存放掉电后需要永久保存的数据。利用430内部的Flash控制器,可以完成较大容量的数据记录、用户设置参数在掉电后的保存等功能。硬件介绍:要对Flash读写,首先要了解MSP430的存储器组织。430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间中,没有代码空间和数据空间之分。一般430的单片机都统一编址在0-64k地址范围中,只有少数高端
发表于 2020-05-07
MSP430F149内部Flash操作
MSP430 FLASH读写
MSP430 FLASH型单片机的FLASH存储器模块根据不同的容量分为若干段,其中信息存储器SegmengA及SegmentB各有128字节,其他段有512字节。SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。其他段的地址根据容量不同,从0xFFFFh开始,每512字节为一段进行分配。FLASH存储器写入数据时,每一位只能由“1”变成“0”,不能由“0”变成“1“,因此,当我们有数据要保存到FLASH存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH存储器变成全“1”。下面是擦除FLASH段的子程序,配置好必要的寄存器后,向段中任意地址写入
发表于 2020-05-06
关于Msp430 Flash型单片机内部Flash的操作
1 Msp430Flash型单片机内部Flash存储器介绍MSP430的Flash存储器是可位、字节、字寻址和编程的存储器。该模块由一个集成控制器来控制编程和擦除的操作。控制器包括三个寄存器,一个时序发生器及一个提供编程、擦除电压的电压发生器。Msp430的Flash存储器的特点有:1)产生内部编程电压2)可位、字节、字编程,可以单个操作,也可以连续多个操作3)超低功耗操作4)支持段擦除和多段模块擦除2 Flash存储器的分割Msp430 Flash存储器分成多个段。可对其进行单个字节、字的写入,也可以进行连续多个字、字节的写入操作,但是最小的擦除单位是段。Flash 存储器被分割成两部分:主存储器和信息存储器,两
发表于 2020-05-06
MSP430的JTAG接口和BSW接口
1.JTAG口,JTAG引脚如下定义:单片机TCK——测试时钟输入,接仿真器7脚单片机TDI——测试数据输入,接仿真器2脚单片机TDO——测试数据输出,接仿真器1脚单片机TMS——测试模式选择,接仿真器5脚单片机TRST——测试复位,输入引脚,低电平有效(此引脚可选),接仿真器11脚 2. BSW接口单片机SBWTDIO/RST——测试数据输入输出,接仿真器1脚TDO,其中SBWTDIO和单片机复位RST引脚复用单片机SBWTCK/TEST——测试时钟,接仿真器7脚TCK
发表于 2020-05-06
MSP430的JTAG接口和BSW接口
MSP430F169(四)——浅谈F169看门狗
什么是看门狗在工业现场,往往会由于供电电源、空间电磁干扰或其他原因引起强烈的干扰噪声。这些干扰作用于数字器件,极易使其产生误动作,从而失去应有的控制功能,引起MSP430发生“程序跑飞”事故。若不进行有效的处理,程序就不能回到正常的状态,从而失去应有的控制功能。看门狗定时器正是为了解放这类问题而产生的,尤其是在具有循环结构的程序任务中更为有效。看门狗有一个RST管脚,用来复位。看门狗的两种工作模式(一)看门狗模式:看门狗模式是看门狗这个组件的主要功能,(这不是废话嘛,看门狗组件肯定是看门狗啊)提到看门狗,不得不说这个密码保护了(WDTPW watchdog timer password )任何读写操作必须通过他才能正确执行指令
发表于 2020-05-06
MSP430F169(四)——浅谈F169看门狗
MSP430学习的第一个模拟I2C程序
#include <msp430.h>unsigned char I2CBUF;unsigned char checkbit;#define SCL_H   (P10OUT |= BIT2)      // P10.2为SCL#define SCL_L   (P10OUT &= ~BIT2)#define SDA_H   (P10OUT |= BIT1)     //p10.1为SDA#define SDA_L   (P10OUT &= ~BIT1)#define
发表于 2020-05-06
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved