news 2026/7/19 3:19:13

嵌入式,串行通信代码逻辑及思路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式,串行通信代码逻辑及思路

开时钟

1.首先确定要用usart1去收发数据,那么我们先找到他挂在哪个总线上

确定他在apb2上,然后要看usart1的TX,RX在哪个引脚上相连,这些引脚属于哪个GPIO,因为
USART 内部 TX 移位寄存器 → 片内复用选择器 → GPIO 引脚 → 外部硬件
外部电平 → GPIO 引脚 → 复用选择器 → USART 内部 RX 接收移位寄存器

我们由图已知,tx与p9相连,rx与p10相连,

2.所以我们接下来要把p9与p10进行初始化
例:创建一个名叫 S1 的结构体变量,专门存 USART1 要用的 GPIO 配置信息。GPIO_InitTypeDef S1
然后引用这个创建的S1,对引脚的功能模式,输出类型,,配置引脚进行完善

S1.GPIO_Mode=GPIO_Mode_AF;S1.GPIO_OType=GPIO_OType_PP;S1.GPIO_Pin=GPIO_Pin_9;GPIO_Init(GPIOA,&S1);

然后同理对p10进行初始化
3.现在只是对引脚进行初始化,我们要让对应的引脚与对应的tx,rx相接,我们用函数

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);

第一个参数 GPIOA:操作 A 端口
第二个 GPIO_PinSource9:针对第 9 号引脚
第三个 GPIO_AF_USART1:把这个引脚的复用通道,绑定给 USART1 外设
p10同理
4.配置串口

USART_InitTypeDef S3;S3.USART_BaudRate=115200;//波特率S3.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控S3.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收发模式S3.USART_Parity=USART_Parity_No;//校验S3.USART_StopBits=USART_StopBits_1;S3.USART_WordLength=USART_WordLength_8b;USART_Init(USART1,&S3);

5.串口向pc发数据
分为两种方式:printf重定向,senddata函数
printf重定向:`int fputc(int ch,FILE *f)
{

while(USART_GetFlagStatus(USART1 ,USART_FLAG_TXE )==0); USART_SendData(USART1,ch);

}`
``
printf 底层会循环调用 fputc 输出单个字符,改写这个函数就能把打印内容转到串口。USART_GetFlagStatus(USART1 ,USART_FLAG_TXE )==0)用来判断状态寄存器中的TXE的值从而判断发送寄存器是否为空,USART_SendData(USART1,ch);标准库中有,不用自己写

sendstring函数
`
void SendString(char * string)
{

while(*string != '\0'){ while(USART_GetFlagStatus(USART1 ,USART_FLAG_TXE )==0); USART_SendData(USART1,*string ++); }

}

6.主函数中写接收数据 用while循环(别的也可以,此文章以本人代码为例) 其中你首先要判断接收寄存器中是否为空,如果不为空那你就一个一个读出来,这里可增加如果内容为open就打出open(涉及字符串相比) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2f6a671c85af4cd4b5ab8fc7e3c5cad8.png)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 3:18:39

JavaScript从入门到精通:核心概念与实战技巧

1. JavaScript基础概览:从历史到现代应用JavaScript诞生于1995年,由网景公司的Brendan Eich在短短10天内设计完成。这门语言最初被命名为LiveScript,后来为了蹭当时Java的热度才改名为JavaScript——尽管两者在语法特性上相似,但本…

作者头像 李华
网站建设 2026/7/19 3:17:24

高质量数据集建设为什么不能照搬传统数据治理逻辑

导语一家企业完成了持续多年的数据治理建设。核心业务系统已经接入数据平台,数据标准、元数据、主数据和质量规则陆续建立,主题库和指标体系也开始稳定运行。过去分散在不同部门和系统中的数据,已经可以被统一查询、关联和共享。按照传统数据…

作者头像 李华
网站建设 2026/7/19 3:17:13

fastdds笔记

1WriteParam3个参数:(1)source_timestamp:写时的时间戳,与时间有关的qos,比如deadline等,会使用这个时间戳,用户可以设置source_timestamp,write的时候通过FASTDDS_EXPORTED_API Ret…

作者头像 李华
网站建设 2026/7/19 3:15:56

嵌入式C语言

C语言数据类型在STM32中数据类型的关键字名字被换为:stdint关键字里对应的名称。使用新名称需要包含stdint.h头文件。C语言宏定义关键字:#define用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序…

作者头像 李华
网站建设 2026/7/19 3:13:44

AI 时代的软件过程管理实践1:AI 到底让开发快了多少

在讲每一个具体领域之前,我想先说一说请 AI 做的一个估算。对于这个估算,我也是后知后觉的。在 AI 兴起的这段时间,我一直有个潜意识——“AI 去掉了开发难度,加速了开发进程,一个人配上 AI,顶得上过去一个…

作者头像 李华
网站建设 2026/7/19 3:12:29

Python基础语句详解:从赋值到控制流

1. Python语句基础概述Python作为一门简洁优雅的编程语言,其语句结构与其他主流语言有着显著区别。刚接触Python的开发者最需要适应的就是它独特的语法风格——用缩进来表示代码块,而不是像C/Java那样使用大括号。这种设计让Python代码看起来更加整洁&am…

作者头像 李华