当前位置: 首页 > news >正文

串口通讯基础

第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 软件实现

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

相关文章:

  • 【四.RAG技术与应用】【11.阿里云百炼应用(上):RAG在云端的实践】
  • 认识时钟树
  • Non-Homophilic Graph Pre-Training and Prompt Learning
  • ==和===在不同场景下的具体区别是什么?
  • 数据仓库的特点
  • 计算机毕业设计SpringBoot+Vue.js纺织品企业财务管理系统(源码+文档+PPT+讲解)
  • 运维SaltStack面试题及参考答案
  • STM32F103C8T6 基于 TB6612 驱动 12V 编码电机的教程
  • huggingface NLP主要知识点以及超级详解使用
  • c语言(循环(for,while,do while))
  • 基于RAG的法律条文智能助手
  • AI-前端开发webcrumbs.ai/frontend-ai,Fitten Code提高开发效率
  • 搭建一个简单的node服务,模拟后端接口
  • Netty笔记4:Epoll
  • 如何用脚本启动一个cmd命令行控制台窗口,并且执行命令 ; cmd /k /c /s 笔记250303
  • Spring Boot集成Minio笔记
  • Vue3 Teleport原理与实战指南:突破组件层级限制的传送门
  • 《OpenCV》——dlib(人脸应用实例)
  • Franka机器人FR3快速安装指南
  • shell逐行读取文件 远程操作服务器
  • 企业网站建设问题/广州百度快速排名优化
  • 杂志网站建设方案/网络营销推广总结
  • 阿里云的网站建设方案/郑州网络推广专业公司
  • 网站建设的重要/网站seo外链建设
  • 优化网站设计有哪些方法/xp优化大师
  • 做网站需要哪些人员/杭州百度seo