ARM Cortex-M4|非常好用的一种串口收发方式
在这里分享项目中我经常使用的一种串口收发方式:阻塞发送 + 接收中断 +空闲中断 + 环形队列
项目代码地址:www.baidu.com
一、简介
串口发送使用最简单的阻塞发送方式,一般来说都是接收的数据量比较大,发送数据用此方式即可。
串口接收使用接收中断+空闲中断+FIFO,数据量一般的使用没有问题,若数据很大,考虑使用加上DMA来传输。
二、STM32CubeMX配置串口
串口参数默认配置

打开串口中断

使用LL库进行开发

三、添加FIFO缓冲区
编写FIFO数据结构,环形队列由数组实现,提供 入队、出队等接口给串口使用

四、重构串口接收中断
编写BSP串口代码,自定义中断函数,提供给库中断调用,中断函数分别实现接收中断与空闲中断的相关操作


在官方库的中断函数下添加自定义的中断处理函数

五、重构printf打印函数
使用可变参数,重构串口收发

串口自发自收测试

六、效果
如图所示,2路串口同时自发自收,每500ms发送1024 byte 数据,无压力,理论可以支持的串口取决于MCU的串口数

ARM Cortex-M4|非常好用的一种串口收发方式的更多相关文章
- STM32F4xx -- Cortex M4
		
STM32F4xx official page: http://www.st.com/internet/mcu/subclass/1521.jspIntroductionFPU - Floating ...
 - 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别
		
ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...
 - 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯
		
灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...
 - swddude -- A SWD programmer for ARM Cortex microcontrollers.
		
Introducing swddude I love the ARM Cortex-M series of microcontrollers. The sheer computational po ...
 - Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors
		
Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...
 - 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据
		
灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...
 - 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置
		
灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...
 - ARM Cortex Design Considerations for Debug
		
JTAG was the traditional mechanism for debug connections for ARM7/9 parts, but with the Cortex-M fam ...
 - ARM Cortex M3系列GPIO口介绍(工作方式探讨)
		
一.Cortex M3的GPIO口特性 在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图 从图中可以看出 ...
 - ARM Cortex M3(V7-M架构)硬件启动程序 二
		
解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...
 
随机推荐
- axios实现无感刷新
			
前言 最近在做需求的时候,涉及到登录token,产品提出一个问题:能不能让token过期时间长一点,我频繁的要去登录. 前端:后端,你能不能把token 过期时间设置的长一点. 后端:可以,但是那样做 ...
 - 什么是DI
			
属性的依赖注入,spring在通过IOC创建对象的时候,如果对象还有属性,就一并给赋值进去DI是在IOC的基础上进行对象的属性注入
 - pkuseg
			
git-url: https://github.com/lancopku/PKUSeg-python pkuseg:一个多领域中文分词工具包 pkuseg简单易用,支持细分领域分词,有效提升了分词准确 ...
 - C# .netCore 上传文件到ftps/ftp
			
白码一号的博客园 最近由于项目安全需要,将之前的ftp上传文件的方式,改用ftps 因为不太了解这个东西便开始了踩坑之旅 首先,最近在ubuntu 上搭建了这个服务 流程可以参考这些博客(部署网上的资 ...
 - 2.面向对象基础-01Java类和对象
			
写在前面: (1)编程语言的发展(人越来越容易理解): 机器语言 汇编语言 高级语言-面向过程 高级语言-面向对象 (2)面向对象的特点: 封装性 继承性 多态性 01Java类和对象 对象:属性(静 ...
 - NDVI批量处理排除值-3000
			
代码如下: import arcpy from arcpy import env from arcpy.sa import * import sys reload(sys) sys.setdefaul ...
 - pytorch CrossEntropyLoss() 默认转换one-hot编码
			
import torchpredict = torch.randn((4,3))predict = torch.nn.functional.softmax(predict,dim = 1)target ...
 - 基于 Istio 的灰度发布架构方案实践之路
			
作者:京东物流 赵勇萍 1. 背景介绍 灰度发布,又名金丝雀发布,是指能够平滑过渡的一种发布方式.基于系统稳定性和快速业务迭代的综合考虑,业务应用开发团队采取了新版本服务灰度上线的方式,即新版本服务并 ...
 - 机器学习算法(二): 基于鸢尾花数据集的朴素贝叶斯(Naive Bayes)预测分类
			
机器学习算法(二): 基于鸢尾花数据集的朴素贝叶斯(Naive Bayes)预测分类 项目链接参考:https://www.heywhale.com/home/column/64141d6b1c8c8 ...
 - urllib.parse的使用
			
urllib简介 urllib是pyhton自带的标准库用于网络请求库,无需安装,直接引用 通常用于爬虫开发,API(应用程序编程接口)数据获取和测试 urllib库的4大模块 urllib.requ ...