声明:本篇文章只是个人知识盲区、知识弱点、重点部分的归纳总结,望各位大佬不喜勿喷。梳理顺序是按照正点原子的视频和文档的实际顺序梳理,转载请注明出处。

作者:sumjess

适用:这个视频我已经看过3遍了,总会有忘记的,所以来写这本书的随手笔记,记录重点、易忘点。该博客可以当做字典,也可以当做笔记。

目前内容:串口通信

 

一、常见的串行通信接口:

STM32复习笔记(四)串口通信_数据

二、STM32的串口通信接口:

UART:通用异步收发器

USART:通用同步异步收发器

大容量STM32F10x系列芯片,包含3USART2UART

三、UART异步通信方式引脚连接方法:

-RXD:数据输入引脚。数据接受。

-TXD:数据发送引脚。数据发送。

STM32复习笔记(四)串口通信_数据_02

STM32复习笔记(四)串口通信_USART_03

四、UART异步通信方式引脚:

-RXD:数据输入引脚。数据接受。

-TXD:数据发送引脚。数据发送。

STM32复习笔记(四)串口通信_USART_04

五、UART异步通信方式特点:

全双工异步通信。

分数波特率发生器系统,提供精确的波特率。

     -发送和接受共用的可编程波特率,最高可达4.5Mbits/s

可编程的数据字长度(8位或者9位);

可配置的停止位(支持1或者2位停止位);

可配置的使用DMA多缓冲器通信。

单独的发送器和接收器使能位。

检测标志:① 接受缓冲器  ②发送缓冲器空 ③传输结束标志

多个带标志的中断源。触发中断。

其他:校验控制,四个错误检测标志。

六、串口通信过程:

STM32复习笔记(四)串口通信_串口_05

七、STM32串口异步通信需要定义的参数:

① 起始位

② 数据位(8位或者9位)

③ 奇偶校验位(第9位)

④ 停止位(1,15,2位)

⑤ 波特率设置

STM32复习笔记(四)串口通信_UART_06

STM32复习笔记(四)串口通信_STM312串口通信_07

八、常用的串口相关寄存器:

USART_SR状态寄存器

USART_DR数据寄存器

USART_BRR波特率寄存器

九、串口操作相关库函数(省略入口参数):

void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能

void USART_Cmd();//使能串口

void USART_ITConfig();//使能相关中断

void USART_SendData();//发送数据到串口,DR

uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

FlagStatus USART_GetFlagStatus();//获取状态标志位

void USART_ClearFlag();//清除状态标志位

ITStatus USART_GetITStatus();//获取中断状态标志位

void USART_ClearITPendingBit();//清除中断状态标志位

STM32复习笔记(四)串口通信_STM312串口通信_08

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

STM32复习笔记(四)串口通信_串口_09

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

STM32复习笔记(四)串口通信_STM312串口通信_10

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);

十、波特率计算方法:

STM32复习笔记(四)串口通信_数据_11

STM32复习笔记(四)串口通信_数据_12

十一、串口配置的一般步骤:

①串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();

②串口复位:USART_DeInit(); 这一步不是必须的

③GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP

④串口参数初始化:USART_Init();

⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

NVIC_Init();

USART_ITConfig();

⑥使能串口:USART_Cmd();

⑦编写中断处理函数:USARTx_IRQHandler();

⑧串口数据收发:

void USART_SendData();//发送数据到串口,DR

uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

⑨串口传输状态获取:

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

十二、Printf支持:

//加入以下代码,支持printf函数,而不需要选择use MicroLIB   
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{ int handle;
};

FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{ x = x; }

//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
#endif

#define USART_REC_LEN   200    //定义最大接收字节数 200

 u8  USART_RX_BUF[USART_REC_LEN];

              //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符

u16 USART_RX_STA;           //接收状态标记 

#define USART_REC_LEN   200    //定义最大接收字节数 200

STM32复习笔记(四)串口通信_数据_13

程序要求,发送的字符是以回车换行结束(0x0D,0x0A)