自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 串口DMA发送&接收不定长数据--易移植和修改的C语言代码

实际项目应用中,对于串口通信速率很快的接收,在不知道多少字节为一帧数据时,处理不好会存在数据的丢失。对于一次性要发送很长的数据,一直让CPU去处理,会造成其他功能处理进入瘫痪。针对这类场景,编写了一份便于移植的应用层代码,对串口数据的收发,提供一个处理框架。这套源码属于应用层,驱动层需根据不同平台来实现,后面以stm32 + cubemx来实现驱动层。整个应用层有4个文件,分别是dev_uart.c、dev_uart.h、dataqueue.c和dataqueue.h。

2022-09-21 18:09:22 2068

原创 EasyFlash源码分析记录

记录分析EasyFlash源码V4.1.0的过程所想。实际嵌入式项目中,flash的使用是必不可少的,好的flash存储框架有利于进行数据的存储和读取,虽然现在的flash擦写寿命已经很长了,但是带有擦写平衡的应用方式,有利于增加存储数据的可靠性,为了应用这个源码无bug,尽量熟悉源码的实现。...

2022-08-17 18:30:20 878 1

原创 rt-link源码笔记,适用于自定义点对点的通信协议

适用于自定义通信协议的开源库

2022-08-11 20:05:41 1679 1

原创 嵌入式用HTTP请求下载bin文件

1、使用场景单片机OTA的bin文件,一般是通过无线下载,电脑端用http将bin文件上传到服务器,单片机再将bin文件从服务器下载,一般能通过网页下载的文件都可以用http请求文件。2、从套接字开始建立http请求lz在亚马逊的s3服务器实现了bin文件的下载处理,下面通过rt-thread的txt文件举例,bin文件也是一样请求方式,数据处理相对可能不同。浏览器输入以下2个网址,都可以访问到文本。http://www.rt-thread.com/service/rt-thread.txtht

2022-04-28 20:00:28 3990 2

原创 IIC从机有响应,但是从机的寄存器内容读写有问题的可能原因

模拟IIC

2021-12-02 18:15:08 2841 1

原创 单片机接收不定长的数据,最优解是DMA+串口空闲中断

如果单片机不支持串口空闲中断和DMA,可以参考之前写的,串口只用接收中断,完成不定长的分包。这里以stm32L4的单片机举例,思路可拓展到GD32等支持DMA和串口空闲中断的单片机。串口DMA接收,就是当串口有数据接收的时候,不会促发串口中断,等串口空闲后,(一帧数据包接收完成,硬件会自己保证)会促发一次串口中断,此时可以对一个完整的数据包进行处理。只开串口接收中断是每个字节都会促发一次串口中断服务函数,这样会让CPU多次执行,入栈出栈等多余操作,也不能保证,每次都正确分包接收到的数据,毕竟是软件时间

2021-11-09 17:29:41 1224 1

原创 关于只开串口接收中断,完成数据分包,缓存到FIFO

博主用stm32的串口空闲中断分包,有概率出现了难以描述的bug,卡在串口中断服务函数中,出不来了,所以后续用了别的办法分包。分包有两种,一种是时间间隔,一种是数据帧格式(如Modbus)。时间间隔,要根据实际一包数据的通信速度和数据长度去调整。直接上,stm32串口初始化代码#include "bsp_uart.h"#define UART1_PORT GPIOB#define UART1_TX_PIN GPIO_PIN_6#define UART1_RX_PIN GPIO_PIN_

2021-07-27 18:36:38 942 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 572

原创 stm32用C语言数组来缓存接收不定长的数据包

前言:经常看博客,受到很多大佬的启发,看到希望。本菜鸟看在前辈分享的基础上,编写了一个实用的代码编程,希望能为博客增添一丝光芒。应用场景一些有线数据传输或是无线传输,发过来的数据包,可在中断里,利于数组缓存起来,等单片机空闲了,再依次顺序识别数据包里的内容,如果内容是数据,可以直接显示出来,如果内容是要执行的动作,动作执行时间比较长,也可以让动作以队列的方式,依次执行。代码关键思想是队列FIFO,以及包长相互通信的数据包,需要在协议里,定义个包长识别,如果某些芯片有统计包长的功能就可以不需要。例如,

2021-05-11 12:47:11 1629 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除