串口通讯虽然在现在的电脑上运用的越来越少,由于其在通讯速率,间隔现已不适应pc的要求,取而代之的是USB口。但是在嵌入式范畴,USART依然广泛运用着。
stm32的最多能够供给5路串口,有分数波特率发生器、支撑同步单线通讯和半双工单线通讯、具有DMA等。运用USART时,stm32的I/O口经RS232电平转化电路 和电脑的串口衔接。
串口运用只需求开端串口时钟,设置相应的I/O口形式,装备波特率、数据位长度、奇偶校验位等信息就能够运用了。
我运用了三种办法运用串口通讯,只能够舱位一项:
- USART经过运用printf()函数发送信息;
- USART和上位机通讯,接纳到数据后原数据输出;
- USART主动发送数据。
操作寄存器
串口的复位是经过装备APB2RSTR 寄存器的第14位,当外设呈现毛病时,能够经过复位寄存器复位,在体系初始化时,都会碑文复位操作。
串口的波特率设置是在USART_BRR寄存器上, 实际上这个寄存器装备的是波特比率的分频触发因子的值,波特率是一秒钟经过的字符,而波特比率是一秒钟经过的二进制位数,所以设置了波特率需求经过一段算法处理 ,得出特定时钟下,完结这个波特率的,时钟分频值。
串口操控寄存器有3个 USART_CR1~3,常用到的便是USART_CR1,各位描绘如下:
UE:USART使能 (USART enable)
M:字长 (Word length)该位界说了数据字的长度,0:一个开始位,8个数据位,n个中止位;
1:一个开始位,9个数据位,n个中止位。 n由USART_CR2中设置。
WAKE:唤醒的办法 (Wakeup method) 0:被闲暇总线唤醒; 1:被地址符号唤醒。
PCE:查验操控使能 (Parity control enable)
PS:校验挑选 (Parity selection) 0:偶校验;1:奇校验。
PEIE:PE中止使能 (PE interrupt enable)
TXEIE:发送缓冲区空中止使能 (TXE interrupt enable)
TCIE:发送完结中止使能 (Transmission complete interrupt enable)
RXNEIE:接纳缓冲区非空中止使能 (RXNE interrupt enable)
IDLEIE:IDLE中止使能 (IDLE interrupt enable) 0:制止发生中止;1:当USART_SR中的IDLE为’1’时,发生USART中止。
TE:发送使能 (Transmitter enable)
RE:接纳使能 (Receiver enable)
RWU:接纳唤醒 (Receiver wakeup) 0:接纳器处于正常作业形式;1:接纳器处于静默形式。
留意:1.在把USART置于静默形式(设置RWU位)之前,USART要现已先接纳了一个数据字节。否则在静默形式下,不能被闲暇总线检测唤醒。
2.当装备成地址符号检测唤醒(WAKE位=1),在RXNE位被置位时,不能用软件修正RWU位。
SBK:发送断开帧 (Send break)
数据的发送和接纳是在USART_DR来完结的,这是一个双寄存器,包括了TDR和RDR,当向该寄存器写入数据时,串口就会主动发送数据;当收到数据时,也是存在该寄存器内里,能够直接读出。该寄存器只要低9位有用(8:0),其他位都是保存的。
串口状况是经过状况寄存器USART_SR读取的,各位描绘如下:
TXE:发送数据寄存器空 (Transmit data register empty)
当TDR寄存器中的数据被硬件转移到移位寄存器的时分,该位被硬件置位。假如USART_CR1寄存器中的TXEIE为1,则发生中止。对USART_DR的写操作,将该位清零。
0:数据还没有被转移到移位寄存器;
1:数据现已被转移到移位寄存器。
TC:发送完结 (Transmission complete)
当包括有数据的一帧发送完结后,而且TXE=1时,由硬件将该方位’1’。假如USART_CR1中的TCIE为’1’,则发生中止。由软件序列铲除该位(先读USART_SR,然后写入USART_DR)。TC位也能够经过写入’0’来铲除,只要在多缓存通讯中才引荐这种铲除程序。
RXNE:读数据寄存器非空 (Read data register not empty)
当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位,一共现已接纳到了数据。假如USART_CR1寄存器中的RXNEIE为1,则发生中止。对USART_DR的读操作能够将该位清零。RXNE位也能够经过写入0来铲除,只要在多缓存通讯中才引荐这种铲除程序。
直接操作寄存器代码如下:(system.h 和stm32f10x_it.h等相关代码参照stm32 直接操作寄存器开发环境装备)
User/main.c
view source
#endif