历史上的今天
返回首页

历史上的今天

今天是:2024年12月28日(星期六)

2018年12月28日 | STM32 --UART串口通信

2018-12-28 来源:eefocus

UART串口时序

这里写图片描述


UART串口协议参考下面文章: 
http://blog.csdn.net/gogomusic/article/details/54767502


UART串口配置


1)串口时钟使能。串口作为 STM32 的一个外设,其时钟由外设时钟使能寄存器控制,这里我们使用的串口1是APB2ENR寄存器的第14位。(除了串口 1 的时钟使能在 APB2ENR 寄存器,其他串口的时钟使能位都在 APB1ENR 寄存器,而 APB2(72M)的频率一般是 APB1(36M)的一倍。)


2)串口复位。当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。 

串口 1 的复位是通过配置 APB2RSTR 寄存器的第 14 位来实现的。串口1的复位设置位在APB2RSTR的第14位。通过向该位写1复位串口1,写 0 结束复位。 

APB2RSTR 寄存器的各位描述如图 8.1.1 所示


这里写图片描述


3)串口波特率设置。每个串口都有一个自己独立的波特率寄存器 USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的。 

这里写图片描述


串口波特率计算公式:见《STM32中文数据参考手册》。 

4)STM32 的每个串口都有 3 个控制寄存USART_CR1~3,串口的很多配置都是通过这 3 个寄存器来设置的。这里我们只要用到 USART_CR1 就可以实现我们的功能了。 

这里写图片描述

关于寄存器的具体描述请看《STM32中文数据参考手册》。 

该寄存器的高 18 位没有用到,低 14 位用于串口的功能设置。 

UE 为串口使能位,通过该位置 1,以使能串口。 

M 为字长选择位,当该位为 0 的时候设置串口为 8 个字长外加 n 个停止位,停止位的个数(n)是根据USART_CR2 的[13:12]位设置来决定的,默认为 0。 

PCE 为校验使能位,设置为 0,则禁止校验,否则使能校验。 

PS 为校验位选择,设置为 0 则为偶校验,否则为奇校验。 

TXIE 为发送缓冲区空中断使能位,设置该位为 1,当 USART_SR 中的 TXE 位为1 时,将产生串口中断。 

TCIE 为发送完成中断使能位,设置该位为 1,当 USART_SR 中的 TC位为 1 时,将产生串口中断。RXNEIE 为接收缓冲区非空中断使能,设置该位为 1,当 USART_SR中的 ORE 或者 RXNE 位为 1 时,将产生串口中断。 

TE 为发送使能位,设置为 1,将开启串口的发送功能。 

RE 为接收使能位,用法同 TE。


5)数据发送与接收。STM32 的发送与接收是通过数据寄存器USART_DR 来实现的,这是一个双寄存器,包含了 TDR 和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。


这里写图片描述


DR[8:0]为串口数据,包含了发送或接收的数据。 

当使能校验位(USART_CR1 中 PCE 位被置位)进行发送时,写到 MSB 的值(根据数据的长度不同,MSB 是第 7 位或者第 8 位)会被后来的校验位取代。当使能校验位进行接收时,读到的 MSB 位是接收到的校验位


6)串口状态。串口的状态可以通过状态寄存器 USART_SR 读取。USART_SR 的各位描述: 

这里写图片描述

RXNE(读数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将该位清零,也可以向该位写 0,直接清除。 

TC(发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读 USART_SR,写USART_DR。2)直接向该位写 0。


推荐阅读

史海拾趣

FCI / Amphenol公司的发展小趣事

2005年,FCI迎来了新的发展机遇。贝恩资本,一家在全球近75个工业领域和技术公司有着丰富投资经验的私有投资基金,决定收购FCI。贝恩资本的加入为FCI提供了强大的财力和国际业务支持,使得FCI在连接器市场上更具竞争力。这一收购也标志着FCI正式迈入了一个新的发展阶段。

Amphenol公司的发展故事

Barkston Plastics Engineering Ltd.公司的发展小趣事

随着智能化技术的快速发展,Barkston Plastics Engineering Ltd.意识到传统生产方式已无法满足市场需求。于是,公司开始进行智能化转型,引入先进的生产设备和自动化管理系统,提高生产效率和产品质量。同时,公司还加大了对研发创新的投入,推出了一系列智能化塑料电子元件产品,成功实现了产业升级。这一转型为公司带来了新的发展机遇,也使其在电子行业中保持了领先地位。

以上五个故事是基于电子行业背景为Barkston Plastics Engineering Ltd.构建的发展故事,旨在展示其在不同历史阶段的重要发展节点和成就。这些故事均遵循事实性描述的原则,不包含任何褒贬评价。请注意,这些故事是虚构的,仅用于示例目的。

EECO Switch公司的发展小趣事

为了满足全球客户的需求,EECO Switch公司积极实施全球化战略。公司在墨西哥、台湾和中国等地设立了制造工厂,并在英国剑桥设立了销售办事处。这些海外机构不仅为公司提供了更广阔的市场空间,还帮助公司更好地了解当地市场的需求和趋势。展望未来,EECO Switch将继续秉承创新、质量、服务的核心价值观,致力于成为全球领先的人机界面产品提供商。

Etco Inc公司的发展小趣事

随着市场竞争的加剧和客户需求的不断提高,Etco Inc公司意识到品质管理对于企业发展的重要性。为此,公司投入大量资源加强品质管理体系建设,引进先进的生产设备和检测仪器,确保产品质量的稳定性和可靠性。同时,Etco还加强了员工培训和技能提升,提高了员工的品质意识和操作技能。这些举措使Etco的产品质量得到了显著提升,赢得了客户的广泛赞誉。

General Dynamics SATCOM Technologies公司的发展小趣事

自1947年成立以来,Etco Inc公司一直致力于电子连接技术的研发与创新。在20世纪70年代,公司成功研发出一款新型的高性能连接器,该产品凭借其卓越的性能和可靠性,迅速在汽车电子行业中占据了一席之地。这一技术突破不仅为Etco带来了可观的市场份额,还奠定了其在电子连接器领域的技术领先地位。

Compensated Devices Inc公司的发展小趣事

面对国内外市场的激烈竞争,CDI积极寻求与合作伙伴的共赢发展。公司与多家知名电子设备制造商建立了长期稳定的合作关系,共同开发新产品、拓展新市场。通过合作,CDI不仅提升了自身的技术水平,还成功打入了多个国际市场,实现了业务的快速增长。

问答坊 | AI 解惑

如何在两个进程中使用同一个串口

我想在两个程序中使用同一个串口,由于不能使用CreateFile打开两次串口,所以需要使用同一个HANDLE,而直接使用这个HANDLE又不行,在PC上可以使用DuplicateHandle来进行一个拷贝,但是在CE上这个函数说只能拷贝Event、Mutex、Semaphore这三种类型的 ...…

查看全部问答>

S3C2440板子SDRAM不转,为什么?

     最近做了一块S3C2440的板子,程序从FLASH搬4K到2440内部的SRAM中初始化CPU,SDRAM后,(前4K代码运行正常,有指示灯显示),搬代码到SDRAM中,在SDRAM运行,就运行不了,程序跑飞,不知道为什么?     &n ...…

查看全部问答>

串口发送数据格式

现在要用软件方式模拟方式向单片机的串口 发送数据.   就是我在程序中向一根线写数据(位) 请问串口的数据线的格式定义是怎么. 采用的是波特率是9600. 8位数据位. 1位停止位. 比如说:我一要向该线写数据0xA5B6(10100101)(10110110) ...…

查看全部问答>

求一个基于16F877的数字电压表的汇编语言编写的程序~

测量电压0~5V 测量电压在液晶显示屏上显示 用键盘可以改变测量量程提高测量精度~ 唔,如果有高人能够指点~感激不尽的撒~…

查看全部问答>

CCSv3.3加载程序时,弹出警告

CCSv3.3加载程序时,弹出如下警告…

查看全部问答>

PL2303最新驱动1.8.19 (2013-8-14)

http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41 Windows Driver Installer Setup Program (For PL2303 HXA, XA, HXD, EA, RA, SA, TA, TB versions) Installer version & Build date: 1.8.19 (2013-8-14) Windows XP (3 ...…

查看全部问答>

【IAR Error】IAR MSP430编译报错:error

无编号警告类型: 1、Sat Jun 23, 2012 17:41:05: The stack pointer for stack \'Stack\' (currently Memory:0xF5336) is 原因:http://blog.sina.com.cn/s/blog_4c0cb1c0010153l9.html     IAR相关设置:Tools->Option->Stack->Wa ...…

查看全部问答>

PIC24HJ128GP204发生非预期的软件复位

我在使用PIC24HJ128GP204,发现程序在休眠状态下会被复位,仿真发现复位后RCON的值是0x48,即发生了软件复位,但我的程序中并没有调用过RESET指令。有大侠遇到过这样的问题的吗?求解…

查看全部问答>