下载此文档

STM32例程串口实验.pdf


文档分类:IT计算机 | 页数:约48页 举报非法文档有奖
1/48
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/48 下载此文档
文档列表 文档介绍
该【STM32例程串口实验 】是由【秋江孤影】上传分享,文档一共【48】页,该文档可以免费在线阅读,需要了解更多关于【STM32例程串口实验 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
.
实验要求
使用开发板上的串口向PC发送信息
PC通过串口向开发板发送数据,CPU在接收到后,确认信息,并通过串口
返回数据
例如:开发板先发送一个字符‘c’,然后PC发送一个字符‘a’,开发
板接收到后,再发送一个字符‘b’
[编辑]实验目的
学****和掌握STM32的USART模块的工作原理和使用方法
学****和掌握USART固件库的使用
掌握串口中断的使用方法
[编辑]实验分析
硬件分析:
USART的工作原理
软件分析:
USART固件库
USART实例
[编辑]开发板原理图设计
MAX3232
Word资料:.
.
与主芯片的连接
[编辑]硬件知识点
详见STM32F10XXX英文版参考手册RM0008-ReferenceManual
[编辑]USART
通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串
行数据格式的外部设备之间进行全双工数据交换。USART利用小数波特率发生器
提供宽范围的波特率选择。
它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议
和IrDA(红外数据组织)SIRENDEC规范,以及调制解调器(CTS/RTS)操作。它还
允许多处理器通信。
使用多缓冲器配置的DMA方式,可以实现高速数据通信。
(表)USART模式支持
Word资料:.
.
[编辑]USART内部结构
Word资料:.
.
[编辑]引脚定义
任何USART双向通信至少需要两个引脚:接收数据输入(RX)和发送数据输出
(TX)。
RX:接收数据输入。通过过采样技术来区别数据和噪音,从而恢复数据。
TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配
置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线
和智能卡模式里,此I/O口被同时用于数据的发送和接收。
在同步模式中需要下列引脚:
CK:发送器时钟输出。此引脚输出用于同步传输的时钟,(在起始位和停
止位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟
Word资料:.
.
脉冲)。数据可以在RX上同步被接收。这可以用来控制带有移位寄存器的
外部设备(例如LCD驱动器)。时钟相位和极性都是软件可编程的。在智能
卡模式里,CK可以为智能卡提供时钟。
在IrDA模式里需要下列引脚:
IrDA_RDI:IrDA模式下的数据输入。
IrDA_TDO:IrDA模式下的数据输出。
在硬件流控模式中需要下列引脚:
nCTS:清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据
发送。
nRTS:发送请求,若是低电平,表明USART准备好接收数据
(表)USART引脚配置
[编辑]寄存器
一个状态寄存器(USART_SR)
一个数据寄存器(USART_DR)
三个控制寄存器(USART_CR1,USART_CR2,USART_CR3)
一个波特率寄存器(USART_BRR)
一个智能卡模式下的保护时间寄存器(USART_GTPR)
关于以上寄存器中每个位的具体定义,请参考USART寄存器描述。
[编辑]控制逻辑
发送控制
接收控制
时钟控制
硬件流控制
Word资料:.
.
波特率控制(发送器和接收器)
中断控制
唤醒单元
[编辑]USART寄存器描述
下表列出了USART寄存器的地址映射和复位值。可以以半字(16位)或字(32
位)的方式访问这些外设寄存器。
[编辑]USART_SR(Statusregister)状态寄存器
rc_w0:软件可以读此位,也可以通过写’0’清除此位,写’1’对此位无影响。
位31:10保留位,由硬件强制为0
位9CTS:CTS标志
如果设置了CTSE位,当nCTS输入状态变化时,该位由硬件置’1’。由
软件清’0’(向该位写’0’)。如果USART_CR3寄存器中的CTSIE=1,
则产生中断。
0:nCTS状态线上没有变化;
1:nCTS状态线上发生变化。
Word资料:.
.
在UART4和UART5上,该位不可用。
位8LBD:LIN断开检测标志
当检测到LIN断开时,该位由硬件置’1’。由软件清’0’(向该位写’0’)。
如果USART_CR2寄存器中的LBDIE=1,则产生中断。
0:没有检测到LIN断开;
1:检测到LIN断开。
注意:若LBDIE=1,当LBD=1时产生中断。
位7TXE:发送数据寄存器(TDR)空
当TDR寄存器中的数据被转移到移位寄存器时,该位由硬件置’1’。如
果USART_CR1寄存器中的TXEIE=1,则产生中断。写USART_DR寄存器,
将该位清’0’。
0:数据还没有被转移到移位寄存器;
1:数据已经被转移到移位寄存器。
注意:该位被用在单缓冲发送中。
位6TC:发送完成
当包含有数据的一帧发送完成后,并且TXE=1时,该位由硬件置’1’。
如果USART_CR1寄存器中的TCIE=1,则产生中断。该位由软件序列清’
0’(先读一次USART_SR寄存器,后写一次USART_DR寄存器)。TC位也
可以通过向该位写’0’来清除,此清零方式只在多缓冲通信中推荐使用。
0:发送还未完成;
1:发送完成。
位5RXNE:读数据寄存器(RDR)非空(Readdataregisternotempty)
当RDR移位寄存器中的数据被转移到USART_DR寄存器时,该位由硬件置
位。如果USART_CR1寄存器中的RXNEIE=1,则产生中断。读USART_DR
寄存器,将该位清零。RXNE位也可以通过向该位写’0’来清除,此清零
方式只在多缓冲通信中推荐使用。
0:没收到数据;
1:收到数据,可以读出。
位4IDLE:监测到总线空闲(IDLElinedetected)
当检测到总线空闲时,该位被硬件置位。如果USART_CR1寄存器中的
IDLEIE=1,则产生中断。该位由软件序列清除(先读USART_SR,后读
USART_DR)。
0:没有检测到空闲总线;
1:检测到空闲总线。
Word资料:.
.
注意:IDLE位不会再次被置位,直到RXNE位被置位(即又检测到一次空
闲总线)
位3ORE:溢出错误(Overrunerror)
RXNE=1的同时,移位寄存器中接收到的当前数据,准备转移至RDR寄
存器时,该位被硬件置位。如果USART_CR1中的RXNEIE=1,则产生中
断。该位由软件序列清零(先读USART_SR,后读USART_CR)。
0:没有溢出错误;
1:检测到溢出错误。
注意:该位被置位时,RDR寄存器中的数据不会丢失,但是移位寄存器中
的数据会被覆盖。在多缓冲通信模式下,如果设置了EIE位,则ORE置位
会产生中断。
位2NE:噪声错误标志(Noiseerror)
在接收到的帧中检测到噪声时,该位由硬件置位。该位由软件序列清除
(先读USART_SR,再读USART_DR)。
0:没有检测到噪声;
1:检测到噪声。
注意:该位不会产生中断,因为它和RXNE一起出现,硬件会在设置RXNE
标志时产生中断。在多缓冲通信模式下,如果设置了EIE位,则NE置位
会产生中断。
位1FE:帧错误(Framingerror)
当检测到同步错位,过多的噪声或者断开符,该位被硬件置位。由软件序
列将其清零(先读USART_SR,再读USART_DR)。
0:没有检测到帧错误;
1:检测到帧错误或者break符。
注意:该位不会产生中断,因为它和RXNE一起出现,硬件会在设置RXNE
标志时产生中断。如果当前传输的数据既产生了帧错误,又产生了溢出错
误,硬件还是会继续该数据的传输,并且只设置ORE位。在多缓冲通信模
式下,如果设置了EIE位,则FE置位会产生中断。
位0PE:校验错误(Parityerror)
在接收模式下,如果出现奇偶校验错误,该位被硬件置位。由软件序列对
其清零(先读USART_SR,再读USART_DR)。在清除PE位前,软件必须等待
RXNE标志位被置’1’。如果USART_CR1中的PEIE=1,则产生中断。
0:没有奇偶校验错误;
1:奇偶校验错误。
[编辑]USART_DR(DataRegister)数据寄存器
Word资料:.
.
位31:9保留位,由硬件强制为0
位8:0DR[8:0]:数据值(Datavalue)
包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用
(TDR),一个给接收用(RDR),该寄存器兼具读和写的功能。TDR寄存器提
供了内部总线和输出移位寄存器之间的并行接口。RDR寄存器提供了输入
移位寄存器和内部总线之间的并行接口。(参见USART内部结构框图)
如果USART_CR1中的校验控制使能位PCE=1,在发送数据时,写到MSB的
值(根据数据的长度不同,MSB是第7位或者第8位)会被后来的校验位取
代。接收数据时,读到的MSB位是接收到的校验位。
[编辑]USART_BRR(BaudRateRegister)波特率寄存器
位31:16保留位,硬件强制为0
位15:4DIV_Mantissa[11:0]:USARTDIV的整数部分
这12位定义了USART分频器除法因子(USARTDIV)的整数部分。
位3:0DIV_Fraction[3:0]:USARTDIV的小数部分
这4位定义了USART分频器除法因子(USARTDIV)的小数部分。
[编辑]USART_CR1(ControlRegister1)控制寄存器1
Word资料:.
.
位31:14保留位,硬件强制为0
位13UE:USART使能(USARTenable)
当该位被清零,在当前字节传输完成后USART的分频器和输出停止工作,
以减少功耗。该位由软件设置和清零。
0:USART分频器和输出被禁止;
1:USART模块使能。
位12M:字长(Wordlength)
该位定义了数据字的长度,由软件对其设置和清零
0:一个起始位,8个数据位,n个停止位;
1:一个起始位,9个数据位,n个停止位。
注意:在数据传输过程中(发送或者接收时),不能修改这个位。
位11WAKE:唤醒的方法(Wakeupmethod)
这位决定了把USART唤醒的方法,由软件对该位设置和清零。
0:被空闲总线唤醒;
1:被地址标记唤醒。
位10PCE:检验控制使能(Paritycontrolenable)
用该位选择是否进行硬件校验控制(对于发送来说就是校验位的产生;对
于接收来说就是校验位的检测)。当使能了该位,在发送数据的最高位(如
果M=1,最高位就是第9位;如果M=0,最高位就是第8位)插入校验位;
对接收到的数据检查其校验位。软件对它置’1’或清’0’。一旦设置了
该位,当前字节传输完成后,校验控制才生效。
0:禁止校验控制;
1:使能校验控制。
位9PS:校验选择(Parityselection)
当校验控制使能后,该位用来选择是采用偶校验还是奇校验。软件对它置’
1’或清’0’。当前字节传输完成后,该选择生效。
0:偶校验;
1:奇校验。
Word资料:.
.
位8PEIE:PE中断使能(PEinterruptenable)
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的PE为’1’时,产生USART中断。
位7TXEIE:发送缓冲区空中断使能(TXEinterruptenable)
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的TXE为’1’时,产生USART中断。
位6TCIE:发送完成中断使能(Transmissioncompleteinterruptenable)
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的TC为’1’时,产生USART中断。
位5RXNEIE:接收缓冲区非空中断使能(RXNEinterruptenable)
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的ORE或者RXNE为’1’时,产生USART中断。
位4IDLEIE:IDLE中断使能(IDLEinterruptenable)
该位由软件设置或清除。
0:禁止产生中断;
1:当USART_SR中的IDLE为’1’时,产生USART中断。
位3TE:发送使能(Transmitterenable)
该位使能发送器。该位由软件设置或清除。
0:禁止发送;
1:使能发送。
注意:
,除了在智能卡模式下,如果TE位上有个0脉
冲(即设置为’0’之后再设置为’1’),会在当前数据字传输完成
后,发送一个“前导符”(空闲总线)。
,在真正发送开始之前,有一个比特时间的延迟。
位2RE:接收使能(Receiverenable)
该位由软件设置或清除。
0:禁止接收;
Word资料:.
.
1:使能接收,并开始搜寻RX引脚上的起始位。
位1RWU:接收唤醒(Receiverwakeup)
该位用来决定是否把USART置于静默模式。该位由软件设置或清除。当唤
醒序列到来时,硬件也会将其清零。
0:接收器处于正常工作模式;
1:接收器处于静默模式。
注意:
(设置RWU位)之前,USART要已经先接收
了一个数据字节。否则在静默模式下,不能被空闲总线检测唤醒。
(WAKE位=1),在RXNE位被置位时,不
能用软件修改RWU位。
位0SBK:发送断开帧(Sendbreak)
使用该位来发送断开字符。该位可以由软件设置或清除。操作过程应该是
软件设置位它,然后在断开帧的停止位时,由硬件将该位复位。
0:没有发送断开字符;
1:将要发送断开字符。
[编辑]USART_CR2(ControlRegister2)控制寄存器2
位31:15保留位,硬件强制为0。
位14LINEN:LIN模式使能(LINmodeenable)
该位由软件设置或清除。
0:禁止LIN模式;
1:使能LIN模式。
在LIN模式下,可以用USART_CR1寄存器中的SBK位发送LIN同步断开符
(低13位),以及检测LIN同步断开符。
位13:12STOP:停止位(STOPbits)
这2位用来设置停止位的位数
00:1个停止位;
Word资料:.
.
01:;
10:2个停止位;
11:;
注:。
位11CLKEN:时钟使能(Clockenable)
该位用来使能CK引脚
0:禁止CK引脚;
1:使能CK引脚。
注:UART4和UART5上不存在这一位。
位10CPOL:时钟极性(Clockpolarity)
在同步模式下,可以用该位选择SLCK引脚上时钟输出的极性。和CPHA
位一起配合来产生需要的时钟/数据的采样关系
0:总线空闲时CK引脚上保持低电平;
1:总线空闲时CK引脚上保持高电平。
注:UART4和UART5上不存在这一位。
位9CPHA:时钟相位(Clockphase)
在同步模式下,可以用该位选择SLCK引脚上时钟输出的相位。和CPOL
位一起配合来产生需要的时钟/数据的采样关系(参见图259和图260)。
544/754
0:在时钟的第一个边沿进行数据捕获;
1:在时钟的第二个边沿进行数据捕获。
注:UART4和UART5上不存在这一位。
位8LBCL:最后一位时钟脉冲(Lastbitclockpulse)
在同步模式下,使用该位来控制是否在CK引脚上输出最后发送的那个数
据字节(MSB)对应的时钟脉冲
0:最后一位数据的时钟脉冲不从CK输出;
1:最后一位数据的时钟脉冲会从CK输出。
注意:
(根据USART_CR1寄
存器中的M位所定义的8或者9位数据帧格式)。

位7保留位,硬件强制为0
位6LBDIE:LIN断开符检测中断使能(LINbreakdetectioninterruptenable)
Word资料:.
.
断开符中断屏蔽(使用断开分隔符来检测断开符)
0:禁止中断;
1:只要USART_SR寄存器中的LBD为’1’就产生中断。
位5LBDL:LIN断开符检测长度(LINbreakdetectionlength)
该位用来选择是11位还是10位的断开符检测
0:10位的断开符检测;
1:11位的断开符检测。
位4保留位,硬件强制为0
位3:0ADD[3:0]:本设备的USART节点地址
该位域给出本设备USART节点的地址。
这是在多处理器通信下的静默模式中使用的,使用地址标记来唤醒某个
USART设备。
注意:在使能发送后不能改写这三个位(CPOL、CPHA、LBCL)。
[编辑]USART_CR3(ControlRegister3)控制寄存器3
位31:11保留位,硬件强制为0
位10CTSIE:CTS中断使能(CTSinterruptenable)
0:禁止中断;
1:USART_SR寄存器中的CTS为’1’时产生中断。
注:UART4和UART5上不存在这一位。
位9CTSE:CTS使能(CTSenable)
0:禁止CTS硬件流控制;
1:CTS模式使能,只有nCTS输入信号有效(拉成低电平)时才能发送数据。
如果在数据传输的过程中,nCTS信号变成无效,那么发完这个数据后,
传输就停止下来。如果当nCTS为无效时,往数据寄存器里写数据,则要
等到nCTS有效时才会发送这个数据。
注:UART4和UART5上不存在这一位。
位8RTSE:RTS使能(RTSenable)
Word资料:.
.
0:禁止RTS硬件流控制;
1:RTS中断使能,只有接收缓冲区内有空余的空间时才请求下一个数据。
当前数据发送完成后,发送操作就需要暂停下来。如果可以接收数据了,
将nRTS输出置为有效(拉至低电平)。
注:UART4和UART5上不存在这一位。
位7DMAT:DMA使能发送(DMAenabletransmitter)
该位由软件设置或清除。
0:禁止发送时的DMA模式。
1:使能发送时的DMA模式;
注:UART4和UART5上不存在这一位。
位6DMAR:DMA使能接收(DMAenablereceiver)
该位由软件设置或清除。
0:禁止接收时的DMA模式。
1:使能接收时的DMA模式;
注:UART4和UART5上不存在这一位。
位5SCEN:智能卡模式使能(Smartcardmodeenable)
该位用来使能智能卡模式
0:禁止智能卡模式;
1:使能智能卡模式。
注:UART4和UART5上不存在这一位。
位4NACK:智能卡NACK使能(SmartcardNACKenable)
0:校验错误出现时,不发送NACK;
1:校验错误出现时,发送NACK。
注:UART4和UART5上不存在这一位。
位3HDSEL:半双工选择(Half-duplexselection)
选择单线半双工模式
0:不选择半双工模式;
1:选择半双工模式。
位2IRLP:红外低功耗(IrDAlow-power)
该位用来选择普通模式还是低功耗红外模式
0:通常模式;
1:低功耗模式。
位1IREN:红外模式使能(IrDAmodeenable)
Word资料:.
.
该位由软件设置或清除。
0:不使能红外模式;
1:使能红外模式。
位0EIE:错误中断使能(Errorinterruptenable)
在多缓冲通信模式下,如果该位为’1’,当有帧错误、过载错误或者噪
声错误时(USART_SR中的FE=1,或者ORE=1,或者NE=1),则产生中断。
0:禁止中断;
1:只要USART_CR3中的DMAR=1,并且USART_SR中的FE=1,或者ORE=1,
或者NE=1,则产生中断
[编辑]USART_GTPR(GuardTimeandPrescalerRegister)保护时间和预分频寄存器
位31:16保留位,由硬件强制为0
位15:8GT[7:0]:保护时间值(Guardtimevalue)
该位域规定了以波特时钟为单位的保护时间。
在智能卡模式下,需要这个功能。当保护时间过去后,才会设置发送完成
标志(TC)。
注:UART4和UART5上不存在这一位。
位7:0PSC[7:0]:预分频器值(Prescalervalue)
在红外(IrDA)低功耗模式下:
PSC[7:0]=红外低功耗波特率
对系统时钟分频以获得低功耗模式下的频率:
源时钟被寄存器中的值(仅有8位有效)分频
00000000:保留–不要写入该值;
00000001:对源时钟1分频;
00000010:对源时钟2分频;
……
在红外(IrDA)的正常模式下:PSC只能设置为00000001
在智能卡模式下:
PSC[4:0]:预分频值
对系统时钟进行分频,给智能卡提供时钟。
寄存器中给出的值(低5位有效)乘以2后,作为对源时钟的分频因子
00000:保留–不要写入该值;
Word资料:.
.
00001:对源时钟进行2分频;
00010:对源时钟进行4分频;
00011:对源时钟进行6分频;
……
位[7:5]在智能卡模式下没有意义。
注:UART4和UART5上不存在这一位。
[编辑]USART帧格式
USART有三种帧格式:数据帧、空闲帧和断开帧。
[编辑]数据帧
由一个低电平的起始位,8位或9位数据位,/2个高电平的停止位
组成。
其中,数据位长度(字长)取决于USART_CR1寄存器中的M位;发送和接收时,
最低有效位在前;当USART_CR1寄存器中的校验控制使能位PCE=1时,最高有效
位被校验位代替;在同步模式下,CK引脚是否为最高有效位提供时钟脉冲取决
于USART_CR2中的LBCL位;停止位数取决于USART_CR2寄存器中的STOP[1:0]。
[编辑]空闲帧
在一个帧周期内,全部为高电平。
Word资料:.
.
[编辑]断开帧
在一个帧周期内,全部为低电平。在断开帧结束后,再发送1或2个高电平的停
止位,以识别下一个低电平的起始位。
[编辑]小数波特率
发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别(TE
和RE)置位时,分别为其产生时钟。接收器和发送器的波特率应设置成相同。
Tx/Rx波特率=PCLKx/(16*USARTDIV)
PCLKx可以是APB1的时钟PCLK1(用于USART1),也可以是APB2的时钟PCLK2(用
于USART2、3、4、5)。
USARTDIV=DIV_Maintissa[11:0]+DIV_Fraction[3:0]/16
USARTDIV是一个无符号的定点数,转换成对应的二进制小数后,整数部分存放
在USART_BRR寄存器中的DIV_Maintissa[11:0],小数部分存放在USART_BRR寄
存器中的DIV_Fraction[3:0]。
注:在写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。因此,
不要在通信进行中改变波特率寄存器的数值。
[编辑]配置流程
:USART_BRR寄存器
:USART_CR1中的M位
:USART_CR2中的STOP[1:0]
:USART_CR1中的PCE位和PS位
:USART_CR1中的TE和RE
:USART_CR3中的CTSE位和RTSE位
:USART_CR1寄存器中的UE=1
如果采用多缓冲器通信,需配置USART_CR3中的DMA使能位(DMAT)。按多缓冲器
通信中的描述配置DMA寄存器。
如果需要产生中断,则还要设置相应中断的使能位。
完成上述配置后,就可以进行数据的发送和接收了。
[编辑]发送过程
如果在收发模式配置中,发送器被使能了,即TE=1,则可以进行数据的发送。
[编辑]空闲帧
置位TE将使得USART在第一个数据帧前发送一空闲帧。
Word资料:.
.
[编辑]数据帧
,发送数据寄存器TDR为空,TXE=1,如果TXEIE=1,则产生中断。
,TXE=0。
,硬件就会将TDR中的数据发送到发送移位寄
存器中。
,TXE=1,如果TXEIE=1,则产生中断。
。不断地重复上述步骤,直到发送完所有数
据。
,要等待TC=1,如果TCIE=1,
则产生中断,它表示最后一个数据帧的传输结束。当需要关闭USART或需
要进入停机模式之前,需要确认传输结束,避免破坏最后一次传输。

从TX脚上串行输出。
[编辑]断开帧
如果设置SBK=1,在完成当前数据发送后,将在TX线上发送一个断开帧。断开
帧发送完成时(在断开帧的停止位时)SBK被硬件复位。USART在最后一个断开帧
的结束处插入一逻辑‘1’

STM32例程串口实验 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数48
  • 收藏数0 收藏
  • 顶次数0
  • 上传人秋江孤影
  • 文件大小1.80 MB
  • 时间2023-03-21