STM32(3)--USART

本文介绍了STM32F10x系列微控制器中USART模块的使用,包括USART的功能、引脚配置、数据发送和接收的寄存器及流程、波特率计算、固件库编程方法以及中断配置。同时,提供了实战练习,指导如何设置USART进行数据的收发,并提到了串口调试技巧和数据包处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

                  一.USART    

二.数据发送/接收的相关寄存器和流程

三.数据传输的速度--波特率

四.USART使用固件库编程

五.实战练习:


   一.USART    

        USART支持大部分电子设备之间的通讯。支持电脑与单片机,单片机与单片机之间的通讯。

        STM32F10x系列USART引脚有5个,分别是USART1-5。其中USART1挂载在APB2总线上,其余四个挂载在APB1上。

       每个USART都包括常用引脚TX,RX,(SCLK,nCTS,nRTS,n表示低电平有效)。SCLK用在同步通信时。查找手册中引脚的描述,找到各个USART的对应引脚。

       复用功能IO和调试配置AFIO用来实现重映射。

二.数据发送/接收的相关寄存器和流程

     数据寄存器USART_DR:9位有效,包括一个发送数据寄存器TDR和一个接收数据寄存器RDR。一个地址对应两个物理内存。

USART的控制寄存器有CR1,CR2,CR3。

  •      CR1的M位决定字长,0->8位,n个停止位;1->9位,n个停止位;
  •      STOP停止位
  •       PCE:使能校验控制
  •       PS:选择校验位
  •      PEIE:校验中断使能
  •      PE:校验错误
  •      UE:串口使能
  •      TE/RE:发送/接收使能

数据发送和接收流程:UE=1,TE=1;数据来自CPU/DMA->TDR->发送移位寄存器->TX

  1. TXE=1,数据被转移到移位寄存器,发送数据寄存器为空;TC:发送完成;
  2. UE=1,RE=1;数据来自RX引脚->接收移位寄存器->RDR->CPU/DMA
  3. RXNE:读数据寄存器非空;
  4. RXNEIE,TXEIE,TCIE都是数据在发送或者接收之后可以触发中断

三.数据传输的速度--波特率

波特率寄存器USART_BRR:USARTDIV的整数部分位4-15;小数部分位0-3;

波特率=时钟频率/(16*USARTDIV);USARTDIV是有小数部分的。小数部分写入值需要计算=实际的小数值*16。

四.USART使用固件库编程

USART初始化结构体成员:BaudRate,wordlength,stopsits,parity,mode,hardwareflowcontrol

同步时钟初始化结构体成员:clock,cpol极性,cpha相位,lastbit最后一个位的时钟脉冲 。同步时钟极性表示串口空闲时是低或高电平,相位=1表示第二个边沿进行数据捕获。极性和相位是配合使用的。

先配置串口初始化结构体成员,调用初始化函数;如果是异步通信,则不需要设置同步时钟;

  • 串口初始化:void USART_Init(USART_TypeDef*USARTx,USART_InitTypeDef* USART_InitStruct)
  • 中断配置:void USART_ITConfig(USART_TypeDef*USARTx,uint16_t USART_IT,FunctionalState NewState)
  • 串口使能:void USART_Cmd(USART_TypeDef*USARTx,FunctionalState NewState)
  • 数据发送:void USART_SendData(USART_TypeDef*USARTx,uint16_t,Data)
  • 数据接收:void USART_ReceiveData(USART_TypeDef*USARTx,uint16_t,Data)
  • 中断状态获取:ITStatus USART_GetITStatus(USART_TypeDef* USARTx,unit16_t USART_IT)

五.实战练习:

1.电脑将数据发送给单片机,单片机再将数据发送给电脑。

单片机完成数据接收和数据发送功能。选取一个串口为USART1,查表USART1的TX和RX是PA9和PA10两个GPIO口。

第一步,打开GPIO和USART外设的时钟。(注意,USART1挂载在APB2,其余挂载在APB1)

第二步,将这两个GPIO口分别设置为输出和输入。TX复用推挽输出,RX浮空输入。推挽输出,电平由内部电平决定;浮空输入,电平由外部电平决定。GPIO初始化。

第三步,配置USART的数据传输格式。使用USART初始化结构体,配置波特率,字长,停止位,校验,串口模式,硬件流控制。USART初始化。

以上是作为接收和发送的GPIO和USART传输数据的格式的初始化设置。

第四步,配置中断优先级NVIC。

第五步,使能接收中断。为什么要使能接收中断?电脑将数据发送给单片机后,触发接收中断,单片机将接收到的数据发送给电脑。

第六步,使能USART。USART_CMD

以上三步是对NVIC配置和使能,接收/发送中断使能,USART使能。

第七步,发送函数(中断触发后的任务,是中断服务函数,书写在it.c里),USART的发送函数在USART.h文件里可查看。

补充:1组USART接口一共有5个,除了最重要的TX,RX外,还有SCLK,RTS,CTS。nRTS是request to send请求发送,表示本设备可以接受电平信号;nCTS是clear to send允许发送,用于判断是否可以向外发送信息。n表示低电平有效。在USART结构体中有一个硬件流控制,可选择的参数中就有RTS和CTS,也就是说,RTS和CTS这两个引脚在需要使用到硬件流控制时,需要连接好。

六.USART串口调试

调试场景:单片机通过USB转串口连接电脑,电脑打开串口助手,波特率设置为和程序里一样的115200。

程序除了串口设置和串口中断函数之外,需要将printf修改一下,改为需要测试的串口输出数据。实际上,不修改printf的串口不会影响单片机与其他外设的数据交流,因为只要中断函数中的串口输出是正确的就行了。修改printf那部分的串口输出是为了在串口助手上看到相应的调试结果。

USART数据包:数据包传输格式有hex,和任意字符格式。如果是hex格式,在usart的中断函数里,需要区分出包头,包尾(开始位、停止位、校验位),来获得我们需要的数据。再判断接收到的数据来调用对应的函数,完成对应的任务。如果是任意字符格式,接收到的都是字符。如果需要作为数字来使用,那么后续的数据处理中,我们需要写字符转化为数字的程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值