STM32笔记 (九)串口通讯USART(串口发送接收编程)

简介

串口USART(Universal Synchronous Asynchronous Receiver and Transmitter)也叫通用同步异步收发器,是单片机与外部进行信息交互的重要通信接口,属于单片机的一种外设,几乎所有单片机都支持使用串口通讯,同时也是单片机程序调试的一种重要手段,对于STM32,串口资源非常丰富,功能也比较齐全,以STM32F103ZET6为例,就提供了5路的串口,我们一般用把串口用来在电脑的串口调试工具上打印调试信息,从而了解程序运行是否正确、如果出错的话也能知道是哪里出了错误。

通讯的有关概念

并行通讯

并行就是采用多条数据线进行通讯
优点是传输速度快,缺点是占用的引脚资源多
在这里插入图片描述

串行通讯

数据按位顺序传输,需要的信号线相比于并行通信来说少了很多,最简单的只需要三根线:RXD,TXD,GND,显然这种通讯方式的优点是占用的引脚资源少,缺点是传输速率不高
在这里插入图片描述

单工

数据传输只支持数据在【一个方向上】传输
在这里插入图片描述

半双工

允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是【一种切换方向】的【单工通信
在这里插入图片描述

全双工

允许数据【同时在两个方向上传输】,因此,全双工通信是【两个单工通信方式的结合】,它要求发送设备和接收设备都有独立的接收和发送能力
在这里插入图片描述

同步通讯

带【时钟同步信号】传输
如IIC通讯需要两根线,一根是SDA数据线,一根是SCL时钟线

异步通讯

不带】【时钟同步】信号
也就是发出的信号可以不受时钟线的约束

USART的寄存器

  • 状态寄存器(USART_SR)
  • 数据寄存器(USART_DR)
  • 波特比率寄存器(USART_BRR)
  • 控制寄存器 1(USART_CR1)
  • 控制寄存器 2(USART_CR2)
  • 控制寄存器 3(USART_CR3)
  • 保护时间和预分频寄存器(USART_GTPR)

USART的功能框图

在这里插入图片描述

初始化结构体中的各种参数

typedef struct {
   
	uint32_t USART_BaudRate; // 波特率
	
	uint16_t USART_WordLength; //数据字长
	
	uint16_t USART_StopBits; // 停止位
	
	uint16_t USART_Parity; // 奇偶校验位选择
	
	uint16_t USART_Mode; // USART 模式
	
	uint16_t USART_HardwareFlowControl; // 硬件流控制
	
} USART_InitTypeDef;
  • 波特率
    波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,
    单位为波特,指的是一个设备在一秒钟内发送(或接收)了多少码元的数据(码元:又叫码率,单位为波特,一个脉冲信号就是一个码元),这里简单理解为传输数据的速率,波特率的计算有一个固定的公式
    在这里插入图片描述
    这里的fck是USART的时钟频率,一般是72MHz,USARTDIV是一个与波特率寄存器(USART_BRR)有关的数,波特率寄存器有16个位,前4个位用于配置USARTDIV的小数部分,后12个位用于配置整数部分,我们可以根据所需要配置的波特率从而算出USARTDIV的值,进而配置波特率寄存器的值
  • 数据字长
    可以选择8 位或 9 位,具体选择多少位要看后面检验位,如果开启了奇偶校验,那么就选9位,如果没有的话就选8位,也就是一个bit
  • 停止位
    串口在传输完数据的时候会有停止信号,这里设置的就是停止信号的长度,可选 0.5 个、 1 个、 1.5 个和 2 个停止位,一般选择1位
  • 奇偶校验位选择
    假设传输的数据位:1 1 1 0
    那么偶校验位会根据数据位中的 1 的个数是否为偶数来补位(补成偶数个1),如果前面1是三个 那么此时偶校验位为 1 加起来一共有四个 1 是偶数,这时候偶校验位的值就为1
    奇校验位的原理则与之相反
  • USART 模式
    模式分
  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32CubeIDE中配置USART串口需要进行以下步骤: 1. 打开STM32CubeIDE,并创建一个新的工程。 2. 在工程导航器中,右键单击"Core"文件夹,选择"Add Component",然后选择"USART"组件。这将在工程中添加USART相关的文件和代码。 3. 在"Pinout & Configuration"选项卡中,选择你要使用的USART引脚。 4. 在"Configuration"选项卡中,配置USART的参数,包括波特率、数据位数、停止位等等。可以根据具体需求进行配置。 5. 在代码中,使用HAL库函数来初始化和配置USART,例如使用`HAL_UART_Init()`函数来初始化USART,使用`HAL_UART_MspInit()`函数来配置USART引脚等等。 6. 在代码中,根据需求来实现USART发送接收功能。可以使用轮询方式或中断方式来发送接收数据。如果使用中断方式,需要编写相应的中断回调函数,例如使用`HAL_UART_RxCpltCallback()`函数来处理接收完成中断。 在以上步骤中,引用提供了一些关键词,如"STM32F407VE"、"FreeRTOS"、"DMA"等,可以参考这些关键词在STM32CubeIDE中进行配置。同时,引用和引用提供了一些代码示例,可以参考这些示例来实现USART的配置和功能。 请注意,具体的配置和代码实现可能会因具体的硬件平台和需求而有所不同。建议查阅官方的文档和资料来获取更详细和准确的配置步骤。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32F407VE+FreeRTOS+STM32CubeIDE+串口DMA+Freemodbus移植代码](https://download.csdn.net/download/qq_31272725/83163651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [STM32CubeIDE学习笔记——USART(三种收发方式,printf重定向,工程配置)](https://blog.csdn.net/Reasally/article/details/126751127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值