天天看点

再造STM32---第十七部分:USART—串口通讯

本章参考资料:《STM32F4xx 中文参考手册》 USART 章节。

学习本章时,配合《STM32F4xx 中文参考手册》 USART 章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。

特别说明, 本书内容是以 STM32F42xxx 系列控制器资源讲解。

17.1 串口通讯协议简介:

物理层: 规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬

件部分。

协议层: 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。

1-RS232标准:

RS232标准串口通讯结构图:

再造STM32---第十七部分:USART—串口通讯

1、 RS232标准串口主要用于工业设备直接通信

2、电平转换芯片一般有MAX3232, SP3232

再造STM32---第十七部分:USART—串口通讯

RS-232 与 TTL 电平区别

再造STM32---第十七部分:USART—串口通讯

2-USB转串口

USB转串口通讯结构图

再造STM32---第十七部分:USART—串口通讯

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串口功能框图讲解:

再造STM32---第十七部分:USART—串口通讯

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。一个地址对应了两个物理内存。

再造STM32---第十七部分:USART—串口通讯

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

再造STM32---第十七部分:USART—串口通讯

USARTDIV:无符号的定点数

FPCLK:串口的时钟,注区分APB2和APB1两条总线

OVER8:过采样模式

例如:

USART: USART1,时钟为90M

波特率: 115200

OVER8: 0, 16倍过才样, BRR小数位有效

再造STM32---第十七部分:USART—串口通讯

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驱动)

再造STM32---第十七部分:USART—串口通讯

编程要点:

电脑端发送过来的数据是字符格式的

继续阅读