历史上的今天
返回首页

历史上的今天

今天是: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  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

  UCA0TXBUF = array[count];                    // TX -> RXed character

  _EINT();

  }

}

推荐阅读

史海拾趣

Adaptive Networks Inc公司的发展小趣事

对不起,我无法提供关于Adaptive Networks Inc公司发展的故事。

HEICO Corporation公司的发展小趣事

为了进一步扩大在电子行业的市场份额,HEICO Corporation采取了积极的并购策略。例如,在2022年,公司宣布收购Accurate Metal Machining, Inc. 96%的股份,这是一家位于克利夫兰的高可靠性组件制造商。此次收购为HEICO带来了新产品和功能,增强了其在航空航天和国防领域的竞争力。通过并购,HEICO不仅获得了先进的技术和人才,还拓宽了产品线,加速了其在电子行业的扩张步伐。

Bestar Electric公司的发展小趣事

随着全球市场的不断变化和消费者需求的多样化,Bestar Electric开始加快国际化布局。公司通过在海外设立分支机构、开展国际合作等方式,进一步拓展国际市场。同时,公司还关注未来发展趋势,积极布局新兴领域,如人工智能、5G通信等,为公司的未来发展奠定坚实基础。

这些故事只是对电子行业公司发展历程的概括性描述,并不特指Bestar Electric公司的具体经历。每个公司的发展都有其独特之处,需要具体分析和了解。

Genesys Logic公司的发展小趣事

近年来,“General Microcircuits”积极响应全球绿色可持续发展的号召,将环保理念融入产品研发和生产的全过程。公司投入大量资源研发低能耗、高能效的绿色半导体产品,并致力于推动循环经济在半导体产业的应用。同时,公司还加强了与环保组织的合作,共同推动半导体行业的绿色转型和可持续发展。这些努力不仅为公司赢得了良好的社会声誉,也为公司的长远发展奠定了坚实的基础。

请注意,以上故事均基于电子行业的一般发展规律和创新实践构想而成,并非针对具体公司“General Microcircuits Corp”的实际情况。在实际情况中,不同公司的发展路径和故事可能有所不同。

广东华裕(GDHY)公司的发展小趣事

进入80年代,随着半导体市场的竞争加剧,“General Microcircuits”意识到仅凭自身力量难以迅速扩大市场份额。于是,公司采取了一系列并购策略,先后收购了多家在模拟电路、数字信号处理等领域具有技术优势的小型公司。这些并购不仅为“General Microcircuits”带来了丰富的产品线和技术积累,还显著增强了其研发能力和生产能力,使其在全球半导体市场的地位稳步提升。

Astema公司的发展小趣事

随着技术的不断成熟,Astema开始积极拓展市场。公司制定了一系列市场策略,包括与大型电子设备制造商建立合作关系、参加国际电子展等,以扩大品牌影响力。通过这些努力,Astema逐渐打开了国际市场的大门,其产品远销海外,市场份额稳步提升。

问答坊 | AI 解惑

十天学会AVR视频教程

第一讲:开发板和软件的操作使用 1、 介绍配件。 2、 安装软件(ICC AVR 和AVR STUDIO)及其使用,包括新建工程、程序下载,仿真调试;整板测试;板上资源。 3、 着重介绍一下USB接口的仿真器。 第二讲:AVR单片机的概述和C语言的基础知识 ...…

查看全部问答>

嵌入式CAN总线控制器与DSP的接口

现场总线是一种开放式、 数字化、多点通信的控制系统局域网络, 是当今自动化领域中最具有应用前景的技术之一。CAN总线是现场总线中的应用热点,CAN总线支持分布式控制和适时控制的串行通信网络。   由于CAN总线具有通信速率高、开放性好、报文短 ...…

查看全部问答>

DS2-电力载波通讯PLC

DS2-电力载波通讯PLC   什么是电力载波通讯PLC技术?   电力载波通讯PLC(英文:Power line communication)是电力系统特有的通信方式,电力载波通讯是指利用现有电力线,通过载波方式将模拟或数字信号进行高速传输的技术。最大特点是不需要重 ...…

查看全部问答>

单片机破解的常用方法及应对策略

单片机破解的常用方法及应对策略…

查看全部问答>

办公室的[危险品]手雷鼠标

在办公室里看到有人手持一个手雷,你会作何感想?别着急,这很可能就是这样一款手雷鼠标。它的功能跟普通的鼠标完全一样,只是增加了一个手雷的外壳。…

查看全部问答>

如何在驱动中创建虚拟串口与USB通信???

最近要在原来的板子上添加3G模块,用的是中兴的MC8630,但该模块的AT指令是通过串口来发送接收的,而相关的数据信息是通过USB来进行的 如此一来,我们是这样设想的:在原来的板子上模拟一个虚拟串口来接收上层的AT指令,然后该虚拟串口再把接收到的指令 ...…

查看全部问答>

wince 下mfc变成如何改变常规定时器的优先级

小弟最近在用mfc编程。用常规定时器定时接收串口中的数据,但是当我点击界面中其它按钮的时候,接收到的串口数据有丢失现象。请问可不可以把常规定时器的优先级设高一些,让其它如鼠标消息的优先级设低一些,从而使接收数据不丢失。 …

查看全部问答>

sd卡的 RCA作用

小弟目前正在研究SD卡协议相关,对CMD3的Response中的RCA不是很理解,不知道具体作用是做什么的,与读写卡操作时的逻辑地址,物理地址有什么样的关系?…

查看全部问答>

通用寄存器和cpu内部寄存器的区别是?

通用寄存器和cpu内部寄存器的区别是?…

查看全部问答>