串口通讯基础

第1章 串口的发送和接收过程

1.1 串口接收过程

当上位机给串口发送(0x55)数据时,MCU的RX引脚接受到(0x55)数据,数据(0x55)首先进入移位寄存器。数据全部进入移位寄存器后,一次将(0x55)全部搬运到接收数据寄存器(RDR),并且触发串口接收非空中断(RXNE)标志位【前提是使能了RXNE中断】,该标志位置位表示可以向串口输入移位寄存器写数据了。

当串口给上位机发送(0xAA)数据时,MCU的发送数据寄存器(TDR)先存储数据,硬件检测发送移位寄存器是否为空。硬件检测发送移位寄存器为空后,直接将TDR中的数据搬运到发送移位寄存器,并且触发串口发送数据寄存器为空的标志位(TXE)【前提是使能TXE中断】,该标志位置位表示可以向发送数据寄存器再次写如数据了。

第2章 串口框图

第3章 串口中断

  1. 发送完成中断 (Transmission Complete Interrupt):当整个待发送字符的数据帧都已从移位寄存器发送出去时触发。这通常用于确认数据完全发送完毕。

  2. 发送数据寄存器为空中断 (TXE Interrupt):当下一个数据可以被写入USART数据寄存器以便发送时触发。这意味着数据寄存器已经为空,准备接收新的数据进行发送。

  3. 接收数据寄存器非空中断 (RXNE Interrupt):当接收到的数据已经被转移到接收数据寄存器中,可以被读取时触发。这是为了通知系统有新数据到达,可以进行处理了。

第4章 实验

4.1 数据发送实验

4.2 软件实现

cpp 复制代码
void Serial_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	USART_InitTypeDef USART_InitStructure;
	USART_InitStructure.USART_BaudRate = 9600;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Tx;
	USART_InitStructure.USART_Parity = USART_Parity_No;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_Init(USART1, &USART_InitStructure);
	
	USART_Cmd(USART1, ENABLE);
}

void Serial_SendByte(uint8_t Byte)
{
	/* 发送数据函数,默认会将TXE标志位清零 */
	USART_SendData(USART1, Byte);
	
	/* 查询TXE标志位,如果是SET表示发送数据寄存器的数据已经搬运到移位寄存器,可以再次发送数据了
	 * 如果是RESET表示发送数据寄存器的数据未搬运到移位寄存器,不能再发送数据了,需要等待
	*/
	while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}

注意:

发送数据函数有清除USART_FLAG_TXE中断标志位的功能。至此不需要软件中写函数清除。(数据手册可知)

USART_SendData(USART1, Byte);

相关推荐
cykaw25905 小时前
如果STM32板子上晶振不是8MHz而是其他(如12MHz)怎么办?
stm32·单片机·嵌入式·电子
电子科技圈5 小时前
XMOS推出“免开发固件方案”将数字接口音频应用的开发门槛大幅降低
经验分享·科技·嵌入式硬件·音视频·语音识别·实时音视频·视频编解码
三年呀6 小时前
19.4-STM32接收数据-状态显示在屏幕
stm32·单片机·嵌入式硬件·智能小车
程序员JerrySUN7 小时前
Yocto + 树莓派摄像头驱动完整指南
linux·运维·服务器·嵌入式硬件·物联网
晓风伴月9 小时前
单片机应用:定时闪烁的LED小灯的实现
单片机·嵌入式硬件
平凡灵感码头9 小时前
STM32 两个单片机之间的通信
stm32·单片机·mongodb
晓风伴月11 小时前
单片机入门(一)
单片机·嵌入式硬件
yy_xzz11 小时前
【STM32学习】Day1 单片机简介&&Cortex-M系列介绍&&STM32简介
stm32·单片机·学习
promising-w11 小时前
硬件工程师入门教程(三)
单片机·嵌入式硬件
梦可尤曦12 小时前
Freertos卡在while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
stm32·嵌入式硬件·cubemx·freertos