MSP430的不同型号,其串行通讯工作模式是一样的。以MSP430G2553为例进行说明。MSP430G2553是20个引脚的16位单片机。具有内置的16位定时器、16k的FLASH和512B的RAM,以及一个通用型模拟比较器以及采用通用串行通信接口的内置通信能力。此外还具有一个10位的模数(A/D)转换器。这里我们详细说明MSP430G2553串口通信。其引脚排布如图1.1所示。其功能表如表1.1所示。

串行通讯模块主要由三个部分组成:波特率生成部分、发送控制器以及接收控制器。如图1.2所示。

一、UART模式

在异步模式下,接收器自身实现帧的同步,外部的通讯设备并不使用这一时钟。波特率的产生是在本地完成的。异步帧格式由1个起始位、7或8个数据位、校验位(奇/偶/无)、1个地址位、和1或2个停止位。一般最小帧为9个位,最大为13位。

(一)UART的初始化

单片机工作的时钟源来自内部三个时钟或者外部输入时钟,由SSEL1、SSEL0,以决定最终进入模块的时钟信号BRCLK的频率。所以配置串行通讯的第一步就是选择时钟。

通过选择时钟源和波特率寄存器的数据来确定位周期。所以波特率的配置是串行通讯中最重要的一部分。波特率设置用三个寄存器实现:UxBR0(选择控制器0):波特率发生器分频系数低8位。UxBR1(选择控制器1):波特率发生器分频系数高8位。UxMCTL

数据传输的格式,以及数据传输的模式是通过配置控制寄存器UCTL来进行设置。

接收控制部分和发送控制部分。首先需要串行口进行配置、使能以及开启中断。串口接收数据一般采用中断方式,发送数据采用主动发送。当接收到一个完整的数据,产生一个信号:URXIFG0=1(类似于51单片机的接收中断标志位),表示接收完整的数据。当数据正在发送中,UTXIFG0=1,此时不能再发送数据,必须等当前数据发送完毕(UTXIFG0=0)才能进行发送。

二、SPI模式

USTAR下的SPI模式有如下特点:

1、SPI模式支持3线和4线模式;

2、支持主机与从机模式;

3、接受和发送有各自独立的发送移位寄存器和缓冲器;

4、接受和发送都有独立的中断能力;

5、移位时钟的极性和相位可编程;

6、字符长度可以是7位或者8位。

SPI工作在全双工下,即主机发送的同时也接收数据,传输的速率由编程决定。4线SPI模式用附加数据线,允许从机数据的发送和接收。其信号如下: SIMO:从进主出,主机模式下,数据输出;从机模式下,数据输入。SOMI:从出主进,主机模式下,数据输入,从机模式下,数据输出。UCLK:USART SPI模式时钟,信号有主机输出,从机输入。CLK时钟只能由主机提供。STE:从机模式发送接收允许控制脚,用于4线模式。

(一)SPI初始化

SPI当中不需要波特率调整,所以UxMCTL=0x0000,SPI的初始化及其复位和UART公用一套寄存器。

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

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

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

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

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

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

三、寄存器及其功能

(1)控制寄存器UxCTL

控制寄存器内的信息决定了USART的基本操作。如:选择通信协议、通信模式和校验位。在SWRST复位使USART复位操作禁止前,各位应根据选择的模式进行编程。

(2)发送控制寄存器UxTCTL(未作说明的位未用)

寄存器UxTCTL控制与发送操作相关的USART硬件。

(3)接收控制寄存器URCTL

URCTL 控制与接收操作相关的USART硬件并保存由最新写入URXBUF的字符引起的出错状况和唤醒条件。若FE、PE、OE、BRK、RXERR 或 RXWake 中的任何一位置位,通过接收下一个字符不能使其复位。它们的复位要通过访问接收缓存URXBUF、USART的软件复位SWRST、系统复位PUC或用指令修改。

(4)波特率选择寄存器和调制控制寄存器

波特率产生器利用波特率选择寄存器UxBR1和UxBR0,以及调整控制寄存器UxMCTL,来产生串行数据流的位定时。UxBR0、UxBR1这两个寄存器是用于存放波特率分频因子的整数部分,若波特率发生器的输入频率BRCLK不是所需波特率的整数倍,带有小数,则整数部分写入UxBR寄存器,小数部分则由调整寄存器UxMCT的内容反映。波特率由以下公式计算:

波特率=BRCLK/(UBR+(M7+M6+ …M0)/8)

接收缓存存放移位寄存器最后接收的字符,可由用户访问,读接收缓存可以复位接收时产生的各种错误标志、RXWAKE位和URXIFGx位。如果传输7位数据,接收缓存内容右对齐,最高位为0。当收接和控制条件为真时,接收缓存装入当前接收到的字符。

发送缓存含有当前要由发送器发送的数据。UTXIFG 标志表示UTXBUF已准备好接收下一个要发送的字符。将数据写入UTXBUF初始化发送功能。如果发送移位寄存器为空或即将为空,数据的发送立即开始。只有当UTXBUF为空时,数据才能写入缓存,否则可能发送不可预料的字符。

例子:

#include“msp430G2553.h”

#include “in430.h”

void UartPutchar(unsigned char c);

unsigned char UartGetchar();

unsigned char temp=0;

unsigned char number[2]={0};

void main( void )

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

BCSCTL1 = CALBC1_1MHZ; // Set DCO

DCOCTL = CALDCO_1MHZ;

P1DIR|=BIT6;

P1OUT&=~BIT6;

P1SEL = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD

P1SEL2 = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD

UCA0CTL1 |= UCSSEL_2; // 选择时钟BRCLK

UCA0BR0 = 106; // 1MHz 9600

UCA0BR1 = 0; // 1MHz 9600

UCA0MCTL = UCBRS2 + UCBRS0; // 波特率=BRCLK/(UBR+(M7+.。.0)/8)

UCA0CTL1 &= ~UCSWRST;

// 初始化顺序:SWRST=1设置串口,然后设置SWRST=0,最后设置相应中断

IE2 |= UCA0RXIE; // 使能接收中断

while(1)

{

//UartPutchar(9);

// display_int(temp,0);

__delay_cycles(10000);

}

}

/**********************************UART接收中断*************************/

#pragma vector=USCIAB0RX_VECTOR

__interrupt void USCI0RX_ISR(void)

{

//while (!(IFG2&UCA0TXIFG)); // 等待发送完成

//UCA0TXBUF = UCA0RXBUF; // TX -》 RXed character

temp=UCA0RXBUF;

}

/******************************UART发送字节函数*************************/

void UartPutchar(unsigned char c)

{

while(!(IFG2 & UCA0TXIFG)); //待发送为空

UCA0TXBUF=c;

IFG2 &=~UCA0RXIFG;

}

/*********************************UART接收字节数据******************/

unsigned char UartGetchar()

{

unsigned char c;

while(!(IFG2 & UCA0RXIFG)); //等待接收完成

c=UCA0RXBUF;

IFG2 &=~UCA0TXIFG;

return c;

}

/******智能控制工作室*******/

打开APP精彩内容

点击阅读全文

msp430g2553串口接受数据_详细解读:MSP430G2553单片机串口通信相关推荐

  1. windows 串口中断编程_万变不离其宗之单片机串口共性问题

    关注.星标嵌入式客栈,精彩及时送达 [导读] 单片机开发串口是应用最为广泛的通信接口,也是最为简单的通信接口之一,但是其中的一些要点你是否明了呢?来看看本人对串口的一些总结,当然这个总结并不能面面俱到 ...

  2. msp430g2553串口接受数据_使用UART与PC通信实现msp430g2553单片机超声波测距示例

    #include long current_time;//最近一次测得时间 /*MyPro*/ #define LED_1 BIT0 #define SW_2 BIT3 #define TA1_1 B ...

  3. openmv串口发送数据_关于arduino和openmv串口通信的问题

    #openmv的代码 import sensor, image, time import json from pyb import UART # For color tracking to work ...

  4. msp430g2553串口接受数据_MSP430G2553串口通信

    MSP430的不同型号,其串行通讯工作模式是一样的.以MSP430G2553为例进行说明.MSP430G2553是20个引脚的16位单片机.具有内置的16位定时器.16k的FLASH和512B的RAM ...

  5. msp430g2553串口接受数据_msp430g2553串口通信教程

    msp430g2553串口通信教程 MSP430g2553 串口通信MSP430 的不同型号,其串行通讯工作模式是一样的.以MSP430G2553 为例进行说明. MSP430G2553 是 20 个 ...

  6. mysql 阿里_详细解读阿里手册之MySQL

    阿里手册是阿里工程师多年一线经验的结晶,遵循其中的约定与规范,能很大程度的减少某些未知的隐患. 其规约强度由强到弱分为强制.推荐.参考三大类. 本文详细解读了阿里手册的MySQL部分,如果是一些很明确 ...

  7. python方法_详细解读Python中的__init__()方法

    __init__()方法意义重大的原因有两个.第一个原因是在对象生命周期中初始化是最重要的一步:每个对象必须正确初始化后才能正常工作.第二个原因是__init__()参数值可以有多种形式. 因为有很多 ...

  8. GPS(rinex格式)数据解析详细解读

    RINEX格式现如今已成为GPS测量应用中的标准数据格式,目前应用最为广泛.最普遍的是RINEX格式的第2个版本,该版本能够用于包括静态和动态GPS测量在内的不同观测模式数据.在该版本中定义了6种不同 ...

  9. python串口发送数据_第六课python来写串口助手-串口发送数据

    https://m.toutiaocdn.com/group/6716026491689239044/?app=news_article&timestamp=1563807838&re ...

最新文章

  1. oracle删除大表的数据的方法
  2. 【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理
  3. 404页面设计技巧性分享不容错过!
  4. excel 多项式拟合数据
  5. 离线数据同步神器:DataX,支持几乎所有异构数据源的离线同步到MaxCompute
  6. 空间数据挖掘的主要方法总结
  7. 1.15运行命令直至执行成功
  8. 《剑指offer》第九题(用两个栈实现队列)
  9. android win8风格布局,Android仿Win8界面开发
  10. 查看、关闭SELinux
  11. 应用场景之Dynamic End Point(DEP)IPSec的配置
  12. Win10下Eclipse运行环境的安装
  13. 2015/6/9 站立会议以及索引卡更新
  14. 施工员简历英语计算机水平,土建施工员电子版英文简历模板
  15. cisp证书考试费用_cisp考试费多少钱
  16. Unity-Xlua
  17. python中str是什么函数_python里的str是什么函数
  18. JsonObject生成Json字符串有转意字符
  19. 联想笔记本电脑键盘灯怎么开启_联想的键盘灯怎么开_联想笔记本键盘亮灯按哪个键-win7之家...
  20. PAT甲级-1021 Deepest Root(25分)

热门文章

  1. 微凉的风吹着我凌乱的头发,突然决定开个客博,以录下从MATLAB到OMNET的艰难历程
  2. Activity与Fragment,以及Fragment与Fragment之间的数据通讯
  3. python画大耳朵图图_python之禅
  4. 在线加密解密工具地址 https://www.keylala.cn
  5. Python中最全的窗口操作,如窗口最大化、最小化、窗口置顶、获取缩放比例等
  6. 计算机视觉检测 白皓月,基于视线跟踪的操作界面的人机交互方法研究
  7. 如何用 Python 攻克「最强大脑」
  8. 秦皇岛计算机编程大赛,南科大学子在第六届中国大学生程序设计竞赛(秦皇岛)获多个奖项...
  9. Python两大佬互相撕逼 技术何苦为难技术?
  10. 用mac的chrome浏览器调试 Android 手机的网页