一种解决STM32多串口同时收发的方法

VIP一种解决STM32多串口同时收发的方法
在做项目中,遇到了同时调用串口通信时程序崩溃的问题,在项目中,串口1用作调试串口,串口2用作MQTT通信串口,串口3用作下位机通信串口,串口1重定向以后,用库函数自带的printf函数打印字符串串口2使用自己写的u2_printf函数,即va_list这套变参宏定义后使用vsprintf函数打印字符串串口3刚开始使用串口2一样的打印方式,程序在调试调用到串口3打印函数时直接崩溃,后续将串口3改用dma转存输出,仍然无法正常调用多次研究以后,采用三个串口都使用重定向后的库函数自带的printf
开通可读全文 ·8.7k 人阅读
最低0.47元/天 解锁文章

在做项目中,遇到了同时调用串口通信时程序崩溃的问题,在项目中,串口1用作调试串口,串口2用作MQTT通信串口,串口3用作下位机通信串口,

串口1重定向以后,用库函数自带的printf函数打印字符串

串口2使用自己写的u2_printf函数,即va_list这套变参宏定义后使用vsprintf函数打印字符串

串口3刚开始使用串口2一样的打印方式,程序在调试调用到串口3打印函数时直接崩溃,后续将串口3改用dma转存输出,仍然无法正常调用

多次研究以后,采用三个串口都使用重定向后的库函数自带的printf函数进行输出,问题得以解决,该方法可以灵活运用于多个串口输出的情况下

现将各个模块代码进行分析:

首先介绍一下串口初始化部分

串口初始化需要使能串口,使能所用的gpio引脚,若是收发模式,还需配置中断部分,代码为:

串口1初始化:

该程序为了修改方便,先定义了串口指针

USART_TypeDef * DEBUG_USARTx = USART1;   //定义串口指针,通过指针指到使用串口的各个寄存器,(SR状态寄存器,DR数据寄存器)

void USART_Config(void)

{ 

    uart1_init(9600);

    uart2_init(115200);

    uart3_init(115200);

}//配置波特率函数

void uart1_init(u32 bt)    

{    

    GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO    

    NVIC_InitTypeDef NVIC_InitStructure; //中断结构体定义    

    USART_In
VIP stm32使用多串口不输出无反应的问题(usart1、usart2) 在使用stm32c8t6单片机时,由于需要使用两个串口usart1 、usart2。usart1用作程序烧录、调试作用,串口2用于与其它模块进行通信。查阅了相关资料串口2在PA2\PA3 引脚上。RX\TX正反插无反应。最终找出原因是程序配置出现问题,但。没有开串口2时钟,相当于人没有了心脏,当然无法正常工作。1、usart2在APB1总线上,而不是APB2。所以在复制或借用他人工程时,一定要检查。经过对比发现,问题出现在时钟配置上。2、usart2的时钟开启函数应为。下面是我个人发现的问题。 开通可读全文·6.4k 阅读·20 点赞·26 收藏 阅读全文

相关推荐

STM32F103的USART2和TIM2(PA2)冲突解决方案

最近在做蓝桥杯往届试题,遇到了要求利用串口2接收数据,还需要使用PA1,PA2输出PWM信号,但是USART2的TXD和PWM的PA2脚是同一个引脚,导致按照正常初始化步骤运行,会发现串口可以正常使用,PA1可以正常输出PWM,但是PA2始终是高电平,无法输出PWM。 现解决方案有两种:1.分时复用 1.分时复用 顾名思义,分时复用就是分时间段来使用,自我们这里也就是用一会串口,用一会PWM,来回切换。 #define PWM_ENABLE 1 #define UART_ENABLE 2 void PWM_

Better_WXL的博客 4497

STM32 HAL库多串口中断通讯【任意长度 不丢帧】

基于HAL库的多串口通信入门,多串口中断通信,可以发任意字节数据,用的STM32F302CBTx,STM32F103也一样通用。 本例使用三组串口中断互相通信。 1、背景了解和工具 现在开发stm32一般有几种方式,如下 HAL库开发: STM32CubeMX中可以下载各个stm系列的HAL库,集成stm常见的外设,便于一键生成项目代码。STM32CubeMX是ST公司现在主推的一个配置...

liusuxx的专栏 8448

多串口同时收发不崩溃!STM32重定向printf的3种实现方式对比(含DMA优化方案)

本文深入探讨了STM32多串口通信中printf重定向的三种实现方案,包括库函数重定向、变参宏定义和DMA优化方案。通过对比分析各方案的性能表现和适用场景,重点介绍了DMA驱动的高效多串口通信技术,帮助开发者解决串口资源竞争、数据丢失等核心挑战,实现稳定可靠的多串口同时收发。

weixin_29158047的博客 401

从入门到精通:MediaGo跨平台部署全攻略,Docker+NAS实战案例深度拆解!

本篇将深入解析开源媒体处理工具MediaGo的运作机制,该软件具备跨平台兼容性,支持Windows、MacOS及Linux三大主流操作系统。其核心创新在于采用模块化架构设计,用户无需额外依赖任何插件即可完成快速部署。作为GitHub平台上的开源项目,该工具特别注重用户体验设计,通过Docker容器化方案可无缝接入各类网络存储设备,显著优化系统资源占用并提升数据处理效率。以飞牛云NAS系统为实施案例,本文将详细展示本地化部署全流程。

Yawesh的博客 1943

python cartopy绘制扇形区域图/cartopy绘制北极部分区域

实际上,这个问题原因还是由于投影转换的问题,在set_extend时,绘制的上下边界仍然是方形、未被正确投影的边界,与我们的set_boundary存在冲突,最根本的原因还是在于cartopy对于投影计算的一些缺陷。另外我们需要指出的是:**该方法不适用于极地投影,即NorthPolarStereo,由于NorthPolarStereo本身投影特性只需一个参数,本身并不适合。我们绘制极地投影时,同样也是使用set_boundary绘制圆形边界,那么当我们想要绘制扇形时,可以通过。请根据喜好自行选择,

weixin_43750300的博客 3209

量化爬虫第一步:手把手教你搞定同花顺问财的hexin-v参数(附JS逆向实战)

本文详细介绍了如何通过JS逆向技术破解同花顺问财数据接口的核心加密参数hexin-v,构建稳定可靠的量化数据采集方案。从抓包分析到Cookie Hook技术应用,再到环境补全与参数生成实现,手把手教你完成量化爬虫的第一步。文章还提供了实战注意事项与优化建议,帮助开发者规避常见问题。

weixin_42620202的博客 293

6.10华为OD机试真题 新系统 - 查找温度记录统计信息 (Java/Py/C/C++/Js/Go)

6.10华为OD机试真题 新系统 - 查找温度记录统计信息 (Java/Py/C/C++/Js/Go)

算法大师! 421

软考中级-软件设计师 23种设计模式(最详细解析!!)

软考中级-软件设计师 23种设计模式

片言可决讼,半纸能缚龙 2万+

华为OD机试双机位C卷:补种未成活胡杨 (C/C++/Py/Java/Js/Go)

华为OD机试双机位C卷 补种未成活胡杨,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 补种未成活胡杨。

qq_45776114的博客 3989

2025年数学建模国赛高教社杯A题、B题、C题、D题、E题详细思路和代码 模型||插值与拟合

核心思想:构造一个精确通过所有已知离散数据点(xi, yi)的函数y = f(x),并以此函数来估算或预测未知点的值。基本假设:我们认为已知的数据点是100%精确、无误差的(或者误差可忽略不计),比如理论计算值、高精度仪器测量值等。我们的目标是“还原”或“重建”出点与点之间的真实函数关系。关键特征精确性:曲线或曲面必须穿过每一个样本点。局部性:插值结果严重依赖于局部数据点的分布和数值。用途:用于“补全”数据、填充缺失值、进行函数近似等。常见方法多项式插值:拉格朗日插值、牛顿插值。

2201_76125261的博客 799

【图像超分】论文复现:新手入门必备!Pytorch实现SRGAN!手把手详细教程!代码注释详尽!可用于训练自己的数据集!实时验证模型性能!绘制PSNR曲线图!附训练好的各放大倍数的模型权重文件!

【图像超分】论文精读:SRResNet/SRGAN【图像超分】论文复现:万字长文!Pytorch实现SRResNet代码修改无报错!踩坑全记录!适合各种深度学习新手!帮助你少走弯路!附修改后的代码和PSNR最优的模型权重文件!请配合上述论文精读文章使用,效果更佳!与原论文描述不一样的实现部分,也即可以修改的部分数据集使用:论文中是ImageNet随机选35000张图像,本文是VOC2012数据集16700张图像。数据集预处理:裁剪大小不同,论文是96×96,本文是88×88。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 6850

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

下一篇: 基于STM32的物联网项目经验总结与技术分享(一:串口通信)

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
Super落尘君
博客等级 码龄7年 13粉丝 3原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super落尘君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值