![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单片机
文章平均质量分 86
mcdx
这个作者很懒,什么都没留下…
展开
-
stm32使用半满中断实现的高可靠串口数据收发
文章目录写在前面软硬件环境初始实现方式第一次优化写在前面串口在各种项目中可谓是太常用了,它也是搞嵌入式必须弄懂的一个通信协议,最近维护了很久的一个项目,设备内另一模块程序更新后出现了不稳定的情况,现象就是某个功能有时候正常有时候不正常,经排查是通信接口上出现了丢包导致的,通信的接口正是用的串口,然后经过多次优化,解决了问题,以此记录一下优化过程。软硬件环境软件:MDK5、stm32 HAL库硬件:主控芯片为stm32f407zet6,整板外设用了5个串口,2个硬件定时器。初始实现方式由于是自定原创 2021-09-30 10:27:10 · 8314 阅读 · 10 评论 -
按键扫描,你还在用老掉牙的方法?
文章目录写在前面特点及实现使用写在前面网上各种方法就不评论了,直接讲重点吧,本次介绍的方法不管是什么单片机,也不管是裸机编程还是带RTOS的都是通用的,就算是linux也能轻松移植,这篇文章相当于是前面写的一篇文章的补充(链接在此),有兴趣想了解原理的可以先阅读前面的文章再阅读本篇文章。特点及实现软件采用分层及模块化的思想,所有扩展功能都是可按需裁剪的,按键数量无限制,键盘无限制,完全无阻塞,最强功能支持已定义的任意状态之间的任意组合,只要你按得出来。目前已支持和未支持的功能: 按下触发 弹原创 2021-05-15 10:25:52 · 543 阅读 · 1 评论 -
stm32程序跑起来后,擦除指定的函数?
文章目录写在前面我的想法第一步写在前面前两天在一个讨论群里面,一位同行提了一个问题,就是能不能程序跑起来后擦除某个指定的函数。诶,这问题可以啊,虽然我没有使用这个功能的需求,但是有人问那肯定就有人用,正好公司也没啥事,就花了两个小时鼓捣了一下,成功的实现了,下面记录一下操作的方法。我的想法看到这个问题,我的第一反应就是通过分散加载脚本来实现(具体是什么,自行网上搜索),因为之前搞过’uboot’('uboot’里面一般称作链接脚本),根据之前的经验,觉得’smt32’应该也是可行的,只需要知道函数存原创 2021-02-06 14:35:39 · 1148 阅读 · 0 评论 -
STM32 IAP程序详解
本文源码可在此网站( https://www.stmcu.org.cn/document/detail/index/id-216445 )进行下载,这是ST官方提供的模板例程,采用的是HAL库,其实现了通过串口下载APP进行程序升级、读出芯片内的APP程序、及读写保护功能,用的Ymodem协议进行文件传输,关于Ymodem协议可以自行网上查阅资料,比较简单。原创 2020-03-04 21:11:54 · 910 阅读 · 0 评论 -
STM32 HAL库串口空闲中断结合DMA接收帧数据
在某些场景,需要对接外部的协议,如果协议帧没有明显的边界,那么我们处理这种帧结构就有一定的困难,不能按照前面文章(一种串口完整帧数据接收的实现方式)提到的方法来接收并解析协议,否则就会存在数据丢失,或者帧数据错乱等现象,目前我所接触的有两种可行的方案,一种就是将数据存储到FIFO后,根据数据帧的特征来遍历FIFO,查找匹配内容,另一种方案是使用串口空闲中断来接收完整的帧数据,两种方案比较好的肯定是使用空闲中断来接收一帧完整的帧数据,本文介绍的也是后面这种方案。原创 2020-02-13 15:54:55 · 1443 阅读 · 0 评论 -
STM32使用HAL库移植系统时的一个特别注意点
相信使用过HAL库的同学都应该接触过HAL_Delay();及HAL_GetTick();等等函数,其定义在stm32f0xx_hal.c文件中(见图1,这里以STM32F0系列为例,其它只是名字不一样,例如:F1、F4),从注释得知,其时基为1ms,可在用户文件中重新实现此函数,HAL_IncTick();函数在stm32f0xx_it.c文件的SysTick_Handler();函数中被调用,正是这里让uwTick全局变量以固定的周期执行加1操作,相当于赋予了心跳,我们使用前面提到的那些接口函数也才有了原创 2020-02-09 16:34:45 · 1911 阅读 · 0 评论 -
单片机扩展多个软件定时器的方法
在程序功能不太复杂的情况下,可能我们并不会考虑在程序中加入一个操作系统,而是直接编写裸机程序,裸机程序一般分为前台程序和后台程序,前台是中断级,后台是任务级,这样构建的编程模型就是中断加任务,需要实时处理的事情就放在中断函数中执行,而不那么重要的事情就放在一个死循环中,虽然这样做在大多数情况都是没有问题的,只是程序的实时性差了点儿,模块化不是那么明显,但为了程序的可读性,可扩展性,实时性等,我们可以对其进行改进,例如把各个功能模块细分,因为不是所有的功能模块都需要一直频繁工作,大多数后台功能都是可以周期性执原创 2020-01-13 23:31:39 · 1638 阅读 · 0 评论 -
STM32 hex合并及一键烧写
有时候我们程序需要远程升级,这时候就需要一段 IAP 程序和一段 APP 程序,IAP 负责引导检测升级,APP 负责实现业务逻辑,如果每次都手动打开程序下载,则很麻烦,特别时需要大量出货的时候,每个都需要下载两次,而使用 JFlash 再配合批处理脚本的话就可以直接双击一个脚本搞定所有事情。附件的话可以直接加我 QQ 无偿分享,CSDN 需要积分,我也会上传。参考文档为 jlink 驱动安装...原创 2019-10-07 17:37:18 · 2972 阅读 · 3 评论 -
超级终端测试通过的 ymodem 协议
最近需要做一个给 STM32F407 做一个 IAP,来进行远程升级,通讯接口是串口,在网上查了一下,看到多是用 ymodem 协议来接收数据包的,其实也可以用自定义协议,不过为了调试方便,还是选择用 ymodem 协议来实现,但是国内网上关于 ymodem 协议的描述文章都是大同小异,而且几乎没有一篇文章完整的描述了 ymodem 协议。所以到现在我也还是有一些没理解的问题(不知道谷歌能找到我没...原创 2018-12-01 15:21:09 · 6068 阅读 · 5 评论 -
STM32两种输出调试信息的方法
方式一:基于SEGGER的RTT方式,可直接使用jlink连接到目标板即可看到调试信息。优点:速度很快,即使是在中断中调用也没有问题,在带系统的程序中也不需要开启临界保护;缺点:需要加入两个SEGGER提供的.c文件及头文件,不能输出中文和浮点(原因可能是会降低速度);硬件连接:jlink的SWDIO引脚必须和目标板连接,其它按照标准使用即可。需要的两个.c文件可在jlink驱动安...原创 2018-08-24 14:55:08 · 15257 阅读 · 0 评论 -
用数电真值表看嵌入式按键扫描
在嵌入式系统中,一定要遵循能不用阻塞延时就不用阻塞延时的规则,通常在裸机系统中,很多人处理按键还是用非常老的延时消抖方法,这样的程序不仅可移植性非常差,而且程序效率也非常的低,在多任务系统中,按键状态机是用得比较多的方法,不过状态机的逻辑和程序复杂度都挺高的,今天就给大家介绍一种类似于数电里面学的真值表方法来处理按键,按键只有两种电平状态0/1(模拟的除外),这两种状态的组合逻辑就有四种,分别为...原创 2018-08-21 11:09:31 · 796 阅读 · 2 评论 -
一种串口完整帧数据接收的实现方式
本人采用的STM32HAL库,部分函数为库函数提供,其中硬件初始化反初始化函数部分需要自己实现,这里不给出实现代码,数据帧接收实现方式基本通用于所有串口通信,以下是实现的代码。附:如果你想使用字符串形式的协议,可参考我微信公众号中的这篇文章(https://mp.weixin.qq.com/s/qP4wxFnwK5aUR1YgX4F9bA),协议解析更加简单更加严密,协议格式是"AT+CMD=...原创 2018-08-23 10:21:28 · 15008 阅读 · 5 评论