STM32F407_串口通信的实现

上篇文章(串口通信简介-优快云博客)重点叙述了串口通信的通信协议,本文将重点叙述利用STM32F407单片机实现串口通信。(#注意:本文是基于HAL库的实现方式)

一、STM32F407串口简介

STM32F4 的串口分为两种:

①USART(即通用同步异步收发器);

②UART(即通用异步收发 器);

UART 是在 USART 基础上裁剪掉了同步通信功能,只剩下异步通信功能。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用串口通信基本都是异步通信。

STM32F4 有 4 个 USART 和 2 个 UART,其中 USART1 和 USART6 的时钟源来于 APB2 时钟,其最大频率为84MHz,其他4个串口的时钟源可以来于APB1时钟,其最大频率为42MHz。

二、USART结构图

① USART 信号引脚

TX:发送数据输出引脚;

RX:接收数据输入引脚;

SCLK:发送器时钟输出,适用于同步传输;

SW_RX:数据接收引脚,属于内部引脚,用于智能卡模式;

IrDA_RDI:IrDA 模式下的数据输入;

IrDA_TDO:IrDA 模式下的数据输出;

nRTS:发送请求,若是低电平,表示 USART 准备好接收数据;

nCTS:清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送;

② 数据寄存器

USART_DR 包含了已发送或已接收的数据。由于它本身就是两个寄存器组成的,一个专门给发送用的(TDR),一个专门给接收用的(RDR),因此该寄存器具备读和写的功能。TDR 寄存器提供了内部总线和输出移位寄存器之间的并行接口。RDR 寄存器提供了内部总线和输入移位寄存器之间的并行接口。

当进行数据发送时,向 USART_DR 中写入的数据会自动存储在 TDR 内;当进行数据读取时,从 USART_DR 读数据会自动提取 RDR 的数据。

USART 数据寄存器(USART_DR)低 9 位数据有效,其他数据位保留。USART_DR 的第 9 位数据是否有效跟 USART_CR1 的 M 位设置有关,当 M 位为 0 时,表示 8 位数据字长;当 M 位 为 1 时,表示 9 位数据字长,一般使用 8 位数据字长。

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

③ 控制器

USART 有专门控制发送的发送器,控制接收的接收器,还有唤醒单元、中断控制等等

④ 时钟与波特率

这部分的主要功能就是为 USART 提供时钟以及配置波特率。

波特率,即每秒钟传输的码元个数,在二进制系统中(串口的数据帧就是二进制的形式), 波特率与波特率的数值相等,所以我们今后在把串口波特率理解为每秒钟传输的二进制位数。

波特率通过以下公式得出:

“fck ”是串口的时钟,(USART2\3 和 UART4\5 的时钟源为 PCLK1,USART1\6 的时钟源为 PCLK2);

“USARTDIV”是一个无符号的定点数,存放在波特率寄存器(USART_BRR)的低 16 位,DIV_Mantissa[11:0]存放的是 USARTDIV 的整数部分,DIV_Fractionp[3:0]存放的是 USARTDIV 的小数部分;

例如:当串口 1 需要设置 115200 的波特率,且此时fck = 84MHz时,那么根据上式可得:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值