一、串行通信接口介绍
并行通信与串行通信是计算机常用的两种通信方式。
串行通信按照数据传送方向分为:单工、半双工和全双工。
串行通信有同步和异步两种方式。
异步通信时数据一帧一帧地传送,帧的格式和通信速率一起称为通信协议。
一个数据帧的长度称为字长,字长 = 起始位 + 数据位 + 校验位 + 停止位。
USART框图讲解。
二、STM32串口常用的寄存器和库函数
USART_SR状态寄存器
USART_DR数据寄存器
USART_BRR波特率寄存器
USART_CR1 控制寄存器1
常用的库函数:
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();//清除中断状态标志位
三、代码解读
1、串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
2、串口复位:USART_DeInit(); 这一步不是必须的
3、GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP
4、串口参数初始化:USART_Init();
5、开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
6、使能串口:USART_Cmd();
7、编写中断处理函数: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);
四、实践操作
一、操作步骤:
1.将 STM32F103 核心板正确插接到魔法师 M3/M4 底板上,连接好 J-link 与 PC 机。
2.将 串口线 连接到底板串口上,底板拨码 S1 拨向 ON 端。
3.编译整个工程,打开底板电源,烧写程序到核心板,并按一次复位按键。
4.打开 PC机 串口调试助手,设置 串口号、波特率115200、无校验位、数据位8、停止位1。
二、实验现象:
1.MCU 每个 0.5s 发送一次“Hello World!”。
2.PC机 发送的信息会从 MCU 发回来。