本章参考资料:《STM32F4xx 中文参考手册》 USART 章节。
学习本章时,配合《STM32F4xx 中文参考手册》 USART 章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。
特别说明, 本书内容是以 STM32F42xxx 系列控制器资源讲解。
17.1 串口通讯协议简介:
物理层: 规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬
件部分。
协议层: 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。
1-RS232标准:
RS232标准串口通讯结构图:
1、 RS232标准串口主要用于工业设备直接通信
2、电平转换芯片一般有MAX3232, SP3232
RS-232 与 TTL 电平区别
2-USB转串口
USB转串口通讯结构图
1、 USB转串口主要用于设备跟电脑通信
2、电平转换芯片一般有CH340、 PL2303、 CP2102、 FT232
3、使用的时候电脑端需要安装电平转换芯片的驱动
3-原生的串口到串口
1、原生的串口通信主要是控制器跟串口的设备戒者传感器通信,不需要经过电平转换芯片来转换电平,直接就用TTL电平通信
2、 GPS模块、 GSM模块、串口转WIFI模块、 HC04蓝牙模块
串口数据包的基本组成
起始位: 由1个逻辑 0 的数据位表示
结束位: 由 0.5、 1、 1.5 戒 2 个逻辑 1 的数据位表示
有效数据:在起始位后紧接着的就是有效数据,有效数据的长度常被约定为 5、 6、 7 戒 8 位长
校验位: 可选,为的是数据的抗干扰性。
校验方法分为:
1-奇校验(odd)、 2-偶校验(even)
3-0 校验(space)、 4-校验(mark)
5-无校验(noparity)
奇校验(odd) : 有效数据和校验位中“ 1”的个数为奇数
比如一个 8 位长的有效数据为: 01101001,此时总共有 4个“ 1” ,为达到奇校验效果,校验位为“ 1” , 最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位
偶校验(even) : 有效数据和校验位中“ 1”的个数为偶数
比如一个 8 位长的有效数据为: 01101001,此时总共有 4个“ 1” ,为达到偶校验效果,校验位为“ 0” , 最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位
0 校验是不管有效数据中的内容是什么,校验位总为“ 0” 。
1 校验是校验位总为“ 1” 。
无校验就是数据包中不包含校验位
17.2 STM32串口功能框图讲解:
1-引脚
2-数据寄存器
3-控制器
4-波特率
STM32F4xx数据手册—Pinouts and pin description。
ST每个系列的芯片都有一个数据手册,里面有引脚的详细功能。
TX: 数据发送
RX: 是数据接收
SCLK: 时钟,仅同步通信时使用
nRTS: 请求发送(Request To Send)
nCTS: 允许发送(Clear To Send)
数据寄存器—USART_DR: 9位有效,包含一个发送数据寄存器TDR和一个接收数据寄存器RDR。一个地址对应了两个物理内存。
USART_CR1: M, 0: 8bit, 1: 9bit
USART_CR2: STOP
USART_CR1: PCE、 PS、 PEIE
USART_SR : PE
USART_SR: TXE, Transmit data register empty
USART_SR: TC, Transmission complete
USART_CR1: TXEIE
USART_CR1: TCIE
USART_SR: RXNE, Read data register not empty
USART_CR1: RXNEIE
USART_CR1: UE、 TE、 RE
波特率—每秒钟要发送多少数据
USART_BRR:波特率寄存器
USART_CR1: OVER8
USARTDIV:无符号的定点数
FPCLK:串口的时钟,注区分APB2和APB1两条总线
OVER8:过采样模式
例如:
USART: USART1,时钟为90M
波特率: 115200
OVER8: 0, 16倍过才样, BRR小数位有效
7.3 STM32串口初始化结构体讲解:
USART初始化结构体
typedef struct
{
uint32_t USART_BaudRate; //波特率 BRR
uint16_t USART_WordLength; //字长 CR1_M
uint16_t USART_StopBits; //停止位 CR2_STOP
uint16_t USART_Parity; //校验控制 CR1_PCE、 CR1_PS
uint16_t USART_Mode; //模式选择CR1_TE、 CR1_RE
// 硬件流选择 CR3_CTSE、 CR3_RTSE
uint16_t USART_HardwareFlowControl;
} USART_InitTypeDef;
同步时钟初始化结构体
typedef struct
{
uint16_t USART_Clock; // 同步时钟 CR2_CLKEN
uint16_t USART_CPOL; // 极性 CR2_CPOL
uint16_t USART_CPHA; // 相位 CR2_CPHA
uint16_t USART_LastBit; //最后一个位的时钟脉冲 CR2_LBC
} USART_ClockInitTypeDef;
7.4 编程时需要用到的固件库函数:
1-配置GPIO为具体的第二功能
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
2-中断配置函数
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,
FunctionalState NewState)
3-串口使能函数
void USART_Cmd(USART_TypeDef* USARTx,FunctionalState NewState)
4-数据发送函数
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
5-数据接收函数
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
6-中断状态位获取函数
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
7.5 代码讲解:
硬件设计-1: TTL电平转USB电平(使用时电脑上记得安装CH340驱动)
硬件设计-2: TTL电平转232电平
编程要点:
1-初始化串口需要用到的GPIO, GPIO_InitTypeDef,
GPIO_PinAFConfig();
2-初始化串口, USART_InitTypeDef
3-中断配置
4-使能串口
5-编写发送和接收函数
6-编写中断服务函数
电脑端发送过来的数据是字符格式的
上一篇:再造STM32---第十八部分:DMA—直接存储区访问
下一篇:再造STM32---第十六部分:SysTick—系统定时器
推荐阅读最新更新时间:2024-11-12 22:08
设计资源 培训 开发板 精华推荐
- DC1562B-N,用于 LTC6995-2 的演示板,1 秒上电复位
- ProMicro_TypeC_All GPIO:自制Atmega32u4核心板
- C-V2X
- AD8618ARUZ高速光电二极管前置放大器典型应用电路
- AM2G-2415DH30Z ±15V 2 瓦 DC/DC 转换器的典型应用
- LTC6360 的典型应用 - 具有真零输出的极低噪声单端 SAR ADC 驱动器
- FEBFL7733A_L50U008A,基于 FL7733A 8.4W LED 驱动器的通用线路评估板
- MIC2130/1,适用于汽车的 50W、0.7V、1.8V、3.3V、5V DC 至 DC 单路输出电源评估板
- MC56F83000-EVK: 面向MC56F83xxx数字信号控制器的开发板
- RP505Kxx1B 1A PWM/VFM 降压 DC/DC 转换器的典型应用,带同步整流器
- 有奖直播|保护嵌入式设备与系统的完整性和可靠性——英飞凌 OPTIGA™ TPM 安全解决方案
- HDMI/ DP2.0 线上实测研讨会|是德科技
- STM32 Nucleo 板卡智勇大闯关
- 有奖直播|基于Source-down技术的全新英飞凌MOSFET,有效提升功率密度,肉眼可见
- 在线直播 意法半导体工业峰会2022
- STM32全国巡回研讨会!(走进11城,9/12-10/27)
- DEYISUPPORT:【全新FAQ来袭】今夏且听风吟,你不能错过的精华!
- MPS有奖活动|绿色AI“芯” 动力,探索节能低碳的AI供电方案!
- 有奖直播 | 与英飞凌一同革新您的电动汽车温控系统:集成热管理系统(低压侧)