串口通讯基础

第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);

相关推荐
风行男孩1 分钟前
stm32基础学习——串口(USART)的基本使用
stm32·嵌入式硬件·学习
点灯小铭4 分钟前
基于单片机的多模式档位调节与过热保护风扇设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
星源~26 分钟前
Zephyr - MCU 开发快速入门指南
单片机·嵌入式硬件·物联网·嵌入式开发·zephyr
星源~26 分钟前
zephyr-开发环境配置疑难问题解决
单片机·嵌入式硬件·物联网·项目开发
BMS小旭34 分钟前
CubeMx-DMA
单片机·学习·cubemx·dma
电子小白12310 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
清风66666610 小时前
基于单片机的多传感器智能云梯逃生控制器设计
单片机·嵌入式硬件·毕业设计·智能家居·课程设计
小何code10 小时前
STM32入门教程,第10课(上),OLED显示屏
stm32·单片机·嵌入式硬件
来自晴朗的明天10 小时前
高速画板-USB模块的PCB设计5-USB2.0/3.0布局布线要求
单片机·嵌入式硬件·硬件工程
早日退休!!!13 小时前
ARM Cortex-M核 【保存上下文&恢复上下文】
arm开发·单片机·嵌入式硬件