stm32
文章平均质量分 62
茫茫人海中,我欣赏你
白云,轻飘飘的、很放松、很快乐。
展开
-
串口DMA发送&接收不定长数据--易移植和修改的C语言代码
实际项目应用中,对于串口通信速率很快的接收,在不知道多少字节为一帧数据时,处理不好会存在数据的丢失。对于一次性要发送很长的数据,一直让CPU去处理,会造成其他功能处理进入瘫痪。针对这类场景,编写了一份便于移植的应用层代码,对串口数据的收发,提供一个处理框架。这套源码属于应用层,驱动层需根据不同平台来实现,后面以stm32 + cubemx来实现驱动层。整个应用层有4个文件,分别是dev_uart.c、dev_uart.h、dataqueue.c和dataqueue.h。原创 2022-09-21 18:09:22 · 2457 阅读 · 0 评论 -
IIC从机有响应,但是从机的寄存器内容读写有问题的可能原因
模拟IIC原创 2021-12-02 18:15:08 · 3172 阅读 · 1 评论 -
单片机接收不定长的数据,最优解是DMA+串口空闲中断
如果单片机不支持串口空闲中断和DMA,可以参考之前写的,串口只用接收中断,完成不定长的分包。这里以stm32L4的单片机举例,思路可拓展到GD32等支持DMA和串口空闲中断的单片机。串口DMA接收,就是当串口有数据接收的时候,不会促发串口中断,等串口空闲后,(一帧数据包接收完成,硬件会自己保证)会促发一次串口中断,此时可以对一个完整的数据包进行处理。只开串口接收中断是每个字节都会促发一次串口中断服务函数,这样会让CPU多次执行,入栈出栈等多余操作,也不能保证,每次都正确分包接收到的数据,毕竟是软件时间原创 2021-11-09 17:29:41 · 1290 阅读 · 1 评论 -
关于stm32偷懒打印、节约代码空间、输出远程日志的想法
博主近日头疼与代码空间紧张,以及没有好的重定义去输出日志,思考后分享一些想法。适用于代码空间紧张,或者给客户终端的代码并不需要打印输出,节约应用程序的文件大小,使得OTA文件接收更快、提高执行效率等。可以采用宏定义的方式,重定义printf函数。很简单,在公共的头文件中,加入下面宏定义#define __DEBUG__ 1#if( __DEBUG__ )#define p(format,...) printf(format,##__VA_ARGS__)#else #define p(forma原创 2021-07-27 17:59:43 · 609 阅读 · 0 评论 -
stm32用C语言数组来缓存接收不定长的数据包
前言:经常看博客,受到很多大佬的启发,看到希望。本菜鸟看在前辈分享的基础上,编写了一个实用的代码编程,希望能为博客增添一丝光芒。应用场景一些有线数据传输或是无线传输,发过来的数据包,可在中断里,利于数组缓存起来,等单片机空闲了,再依次顺序识别数据包里的内容,如果内容是数据,可以直接显示出来,如果内容是要执行的动作,动作执行时间比较长,也可以让动作以队列的方式,依次执行。代码关键思想是队列FIFO,以及包长相互通信的数据包,需要在协议里,定义个包长识别,如果某些芯片有统计包长的功能就可以不需要。例如,原创 2021-05-11 12:47:11 · 1705 阅读 · 1 评论