串口通讯基础

embedded/2025/3/14 6:59:39/

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


http://www.ppmy.cn/embedded/172143.html

相关文章

C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析

一、模式基本概念 1.1 定义与核心思想 抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的集大成者,它通过提供统一的接口来创建多个相互关联或依赖的对象族,而无需指定具体类。其核心思想体现在两个维度: …

[MYSQL]关于join的慢sql优化

结论: ● 多表关联查询时,保证被关联的字段需要有索引**(最关键)** ● 尽量避免三个表的 join。 ● 需要 join 的字段,数据类型必须绝对一致; ● 注意排序字段,可能会导致索引失效,进…

【前端基础】:HTML

认识 HTML 标签 HTML 代码是由 “标签” 构成的. 形如: <body>hello</body>标签名 (body) 放到 <> 中 大部分标签成对出现. 为开始标签, 为结束标签 少数标签只有开始标签, 称为 “单标签”. 开始标签和结束标签之间, 写的是标签的内容. (hello) 开始标签中…

2025最新Postman、Apipost和Apifox API 协议与工具选择方案解析

作为一个一个每天和 API“打交道”的全栈开发者&#xff0c;我的日常就是在一堆请求回应之间探寻系统间的“沟通艺术”。熟悉 API 的各种协议和工具&#xff0c;几乎成了我的谋生技能。今天&#xff0c;我就把自己积累多年的“血泪教训”和经验打包成一篇文章&#xff0c;献给和…

测试大语言模型在嵌入式设备部署的可能性-ollama本地部署测试

前言 当今各种大语言模型百花齐放&#xff0c;为了方便使用者更加自由的使用大模型&#xff0c;将大模型变成如同棒球棍一样每个人都能用&#xff0c;并且顺手方便的工具&#xff0c;本地私有化具有重要意义。 本次测试使用ollama完成模型下载&#xff0c;过程简单快捷。 1、进…

【每日八股】Redis篇(四):持久化(下)

目录 Redis 过期机制&#xff1f;过期键删除策略持久化与过期键主从复制与过期键 Redis 的内存淘汰策略&#xff1f;不淘汰策略&#xff08;默认策略&#xff09;淘汰有过期时间的数据淘汰所有数据 Redis 持久化时对过期键会如何处理&#xff1f;RDBAOF主从模式特殊处理 Redis …

JVM RuntimeDataArea 成分

根据 JVM 规范&#xff0c;运行时数据区&#xff08;Runtime Data Area&#xff09; 是 JVM 内存管理的核心模块&#xff0c;分为以下 5 个主要部分&#xff08;按线程共享性分类&#xff09;&#xff1a; 一、线程私有区域 1. 程序计数器&#xff08;Program Counter Registe…

ragflow-组件可视化工具 es默认用户名elastic

以下是针对各个后台组件的可视化工具及配置指南&#xff0c;基于您提供的环境变量和端口设置&#xff1a; 1. Elasticsearch 可视化工具: Kibana&#xff08;官方推荐&#xff09;、Cerebro、ElasticHQ访问方式: Kibana&#xff08;集成管理&#xff09;: URL: http://<主机…