USART实现步骤
处理器与外部通信概述
-
串行通信
-传输原理:数据按位顺序传输。
-优点:占用引脚资源少
-缺点:速度相对较慢 -
并行通信
-传输原理:数据各个位同时传输。
-优点:速度快
-缺点:占用引脚资源多
串口作为 MCU 的重要外部接口,基本上所有的 MCU 都会带有串口。而STM32F407ZET6 最多可提供 6 路串口。
-
通信按传输方向以下几种方式:
a.单工:
数据传输只支持数据在一个方向上传输(收音机、遥控器)
b.半双工:
允许数据在两个方向上传输,但是,在某一时刻,只允许数
据在一个方向上传输,它实际上是一种切换方向的单工通信;(对讲机)
c.全双工:
允许数据同时在两个方向上传输,因此,全双工通信是两个
单工通信方式的结合,它要求发送设备和接收设备都有独立
的接收和发送能力。(电话机) -
串行通信的通信方式
a.同步通信:带时钟同步信号传输。 -SPI,IIC通信接口
b.异步通信:不带时钟同步信号。 -UART(通用异步收发器),单总线
USART原理及特点介绍
-
USART与UART的区别:
USART:全双工通用同步/异步串行收发器
UART:全双工通用异步串行收发器
USART/UART是一种通用的标准接口,根据导线的电压等不同也分为很多的同类,比如: RS485, RS422,RS232 -
UART异步通信方式特点:
- 全双工异步通信。
- 小数波特率发生器系统,提供精确的波特率。
- 可配置的16倍过采样或8倍过采样,因而为速度容差与时钟容差的灵活配置提供了可能。
- 可编程的数据字长度(8位或者9位);
- 可配置的停止位(支持1或者2位停止位);
- 可配置的使用DMA多缓冲器通信。
- 单独的发送器和接收器使能位。
- 检测标志:① 接收缓冲器 ②发送缓冲器空 ③传输结束标志
- 多个带标志的中断源。触发中断。
- 其他:校验控制,四个错误检测标志。
- STM32串口异步通信定义的参数传送格式:
- 起始位:发送器是通过发送起始位而开始一个字符的传送。起始位使数据线处于“space”状态
- 数据位(8位或9位):起始位之后就传送数据位。在数据位中,低位在前(左),高位在后(右)。由于字符编码方式的不同,数据位可以是5、6、7或8位。
- 奇偶校验位(第九位):用于对字符传送作正确性检查,因
此奇偶校验位是可选择的,共有3种可能,即奇校验、偶校验和无校验,由用户根据需要选定。 - 停止位(1,1.5,2位):停止位在最后,用以标志一个字符传送的结束,它对应于mark状态。停止位可能是1、1.5或2位,在实际应用中根据需要确定。
波特率(band rate)= 1波特=1bps(位/秒)1
USART配置的详细步骤(USART1为例)
跳线帽的连接非常重要,不能接错
根据自己的开发板原理图,找到相应的IO口
- 串口时钟使能,GPIO 时钟使能。
- 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。
- GPIO 初始化设置:要设置模式为复用功能。
- 串口参数初始化:设置波特率,字长,奇偶校验等参数。
- 开启中断并且初始化 NVIC,使能中断(如果需要开启串口中断才需要这个步骤)。
- 使能串口。
- 编写中断处理函数:函数名格式为 USARTx_IRQHandler(x 对应串口号)。
void Usart1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
// 串口是挂载在 APB2 下面的外设,(多goto函数查看原理有助于理解)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//使用的是串口 1,串口 1 对应着芯片引脚 PA9,PA10 需要使能PA的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
//设置引脚复用器映射
//引脚复用器映射配置,需要配置PA9,PA10 的引脚,调用函数为:
//PA9 复用为 USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
//PA10 复用为 USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9 与 GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //配置IO口复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度 50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
//初始化 PA9,PA10
GPIO_Init(GPIOA,&GPIO_InitStructure);
USART_InitStruct.USART_BaudRate = 115200; //一般设置为 115200;
USART_InitStruct.USART_WordLength = USART_WordLength_8b; //字长为 8 位数据格式
USART_InitStruct.USART_StopBits