历史上的今天
今天是:2025年02月19日(星期三)
2020年02月19日 | MSP430学习笔记:UART
2020-02-19 来源:eefocus
串通可以两种方法其现
一、USART硬件直接实现
二、通过定时器软件实现
该模块可现现:
UART异步串行通讯
SPI同步串行通讯
I2C同步串行通讯

UxCTL控制寄存器
7:PENA
6:PEV
5:SPB
4:CHAR
3:LISTEN
2:SYNC
1:MM
0:SWRST
PENA 校验允许位
0 校验禁止
1 校验允许
校验允许时,发送端发送校验,接收端接收该校验,地址位多机模式中,地址位包含校验操作.
PEV 奇偶校验位,该位在校验允许时有效
0 奇校验
1 偶校验
SPB 停止位选择.决定发送的停止位数,但接收时接收器只检测1位停止位.
0 1位停止位
1 2位停止位
CHAR 字符长度
0 7位
1 8位
LISTEN 反馈选择.选择是否发送数据由内部反馈给接收器
0 无反馈
1 有反馈,发送信号由内部反馈给接收器
SYNC USART模块的模式选择
0 UART模式[异步]
1 SPI模式[同步]
MM 多机模式选择位
0 线路空闲多机协议
1 地址位多机协议
SWRST 控制位
上电时该位置位,此时USART状态机和运行标志初始化成复状态(URXIFG=0,URXIE=0,UTXIE=0,UTXIFG=1)。所有受影响的逻辑保持在复位状态,直至SWRST复位。也就是说一次系统复位后,只有对SWRST复位,USART才能重新被允许。而接收和发送允许标志URXE和UTXE不会因SWRST而更改。
SWRST位会使URXIE、UTXIE、URXIFG、RXWAKE、TXWAKE、RXERR、BRK、PE、OE及FE等复位。
在串行口使用设置时,这一位起重要的作用。一次正确的USART模块初始化应该是这样设置过程的:先在SWRST=1时设置,设置完串口后再设置SWRST=0;最后如需要中断,则设置相应的中断使能。
UxTCTL发送控制寄存器
6:CKPL
5:SSEL1
4:SSEL0
3:URXSE
2:TXWAKE
0:TXEPT
CKPL时钟极性控制位
0 UCLKI信号与UCLK信号极性相同
1 UCLKI信号与UCLK信号极性相反
SSEL1、SSEL0时钟源选择,此两位确定波特率发生器的时钟源
0 外部时钟UCLKI;
1 辅助时钟ACLK
2 子系统时钟SMCLK
3 子系统时钟SMCLK
URXSE 接收触发沿控制位
0 没有接收触发沿检测
1 有接收触发沿检测
TXWAKE 传输唤醒控制
0 下一个要传输的字符为数据
1 下一个要传输的字符是地址
TXEPT 发送器空标志,在异步模式与同步模式时是不一样的。
0 正在传输数据或者发送缓冲器(UTXBUF)有数据
1 表示发送移位寄存器和UTXBUF空或者SWRST=1
URCTL接收控制寄存器
7:FE
6:PE
5:OE
4:BRK
3:URXEIE
2:URXWIE
1:RXWAKE
0:RXERR
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 有接收到错误
UxBR0、UxBR1波特率选择寄存器
这两个寄存器是用于存放波特率分频因子的整数部分。
UxBR0波特率选择寄存器0
UxBR1波特率选择寄存器1
UxMCTL波特率调整控制寄存器
M7
M6
M5
M4
M3
M2
M1
M0
若波特率发生器的输入频率BRCLK不是所需波特率的整数倍,带有一小数,则整数部分写UBR寄存器,小数部分由调整寄存器UxMCTL的内容反映。波特率由以下公式计算:
波特率=BRCLK/(UBR+(M7+M6+…M0)/8)
URXBUF接收数据缓存
接收缓存存放移位寄存器最后接收的字符,可由用户访问。读接收缓存可以复位接收时产生的各种错误标志、RXWAKE位和URXIFGx位。如果传输7位数据,接收缓存内容右对齐,最高位为0。
当收接和控制条件为真时,接收缓存装入当前接收到的字符。
当接收和控制条件为真时接收数据缓存结果
UTXBUF发送数据缓存
发送缓存内容可以传至发送移位寄存器,然后由UTXDx传输。对发送缓存进行写操作可以复位UTXIFGx。如果传输出7位数据,发送缓存内容最高为0。
关于波特率:
分频因子N分频计数器时钟BRCLK
N= BRCLK/波特率
UBR为UXBR0 中16位数据
MX为调整数据
波特率 = BRCLK/N=BRCLK/UBR+(M7+M6+…….M0)/8
如:BRCLK = 32.768KHZ 要产生2400HZ波特
32768/2400=13.65
则UXBR0为13
调整是8位的:0.65x8=5,所以有5个1,3个0写时最好差开 01101011
简单例子:
#include volatile char Temp_Size; void DisplayCharacter(char array[], char size); void main(void) { WDTCTL = WDTPW + WDTHOLD; // 停止看门狗 BCSCTL1 |= XTS; // 设置时基寄存器1,使ACLK = LFXT1 = HF XTAL,也就是高频模式. P3DIR |= 0x1F; // 设置P3.4方向寄存器为输出 char array[]= "dddddddddddd"; // Connection Established, display msg to hyperterminal while(1) { Temp_Size = sizeof(array); DisplayCharacter(array, Temp_Size); } } void DisplayCharacter(char array[], char size){ _DINT(); P3SEL |= 0x30; // P3.4,5 = USCI_A0 TXD/RXD UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 0x41; // 8MHz 9600 UCA0BR1 = 0x03; // 8MHz 9600 UCA0MCTL = UCBRS1; // Modulation UCBRSx = 2 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** for(int count=0; count UCA0TXBUF = array[count]; // TX -> RXed character _EINT(); } }
史海拾趣
|
第一讲:开发板和软件的操作使用 1、 介绍配件。 2、 安装软件(ICC AVR 和AVR STUDIO)及其使用,包括新建工程、程序下载,仿真调试;整板测试;板上资源。 3、 着重介绍一下USB接口的仿真器。 第二讲:AVR单片机的概述和C语言的基础知识 ...… 查看全部问答> |
|
现场总线是一种开放式、 数字化、多点通信的控制系统局域网络, 是当今自动化领域中最具有应用前景的技术之一。CAN总线是现场总线中的应用热点,CAN总线支持分布式控制和适时控制的串行通信网络。 由于CAN总线具有通信速率高、开放性好、报文短 ...… 查看全部问答> |
|
DS2-电力载波通讯PLC 什么是电力载波通讯PLC技术? 电力载波通讯PLC(英文:Power line communication)是电力系统特有的通信方式,电力载波通讯是指利用现有电力线,通过载波方式将模拟或数字信号进行高速传输的技术。最大特点是不需要重 ...… 查看全部问答> |
|
最近要在原来的板子上添加3G模块,用的是中兴的MC8630,但该模块的AT指令是通过串口来发送接收的,而相关的数据信息是通过USB来进行的 如此一来,我们是这样设想的:在原来的板子上模拟一个虚拟串口来接收上层的AT指令,然后该虚拟串口再把接收到的指令 ...… 查看全部问答> |
|
小弟最近在用mfc编程。用常规定时器定时接收串口中的数据,但是当我点击界面中其它按钮的时候,接收到的串口数据有丢失现象。请问可不可以把常规定时器的优先级设高一些,让其它如鼠标消息的优先级设低一些,从而使接收数据不丢失。 … 查看全部问答> |




