在这里分享项目中我经常使用的一种串口收发方式:阻塞发送 + 接收中断 +空闲中断 + 环形队列 

  项目代码地址:www.baidu.com

一、简介

  串口发送使用最简单的阻塞发送方式,一般来说都是接收的数据量比较大,发送数据用此方式即可。

  串口接收使用接收中断+空闲中断+FIFO,数据量一般的使用没有问题,若数据很大,考虑使用加上DMA来传输。

二、STM32CubeMX配置串口

  串口参数默认配置

  打开串口中断

  使用LL库进行开发

三、添加FIFO缓冲区

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

四、重构串口接收中断

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

 

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

五、重构printf打印函数

  使用可变参数,重构串口收发

  串口自发自收测试

六、效果

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

ARM Cortex-M4|非常好用的一种串口收发方式的更多相关文章

  1. STM32F4xx -- Cortex M4

    STM32F4xx official page: http://www.st.com/internet/mcu/subclass/1521.jspIntroductionFPU - Floating ...

  2. 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别

    ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...

  3. 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯

    灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...

  4. swddude -- A SWD programmer for ARM Cortex microcontrollers.

    Introducing swddude I love the ARM Cortex-M series of microcontrollers.   The sheer computational po ...

  5. 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 ...

  6. 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据

    灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...

  7. 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置

    灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...

  8. ARM Cortex Design Considerations for Debug

    JTAG was the traditional mechanism for debug connections for ARM7/9 parts, but with the Cortex-M fam ...

  9. ARM Cortex M3系列GPIO口介绍(工作方式探讨)

    一.Cortex M3的GPIO口特性    在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图     从图中可以看出 ...

  10. ARM Cortex M3(V7-M架构)硬件启动程序 二

    解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...

随机推荐

  1. Java代码结构

    Java代码结构 顺序结构 Java的基本结构为顺序结构,除非特别指明,否则从上到下一句一句执行 选择结构 if单选择结构 if(condition){ doSomething(); } if双选择结 ...

  2. Java新手问题 请问各路大佬这是什么问题导致的呢?

  3. MariaDB简介

    一.什么是数据库 DB 与 DBMS :DB(DataBase)即数据库,存储已经组织好的数据的容器.DBMS(DataBase Manage System)是数据库管理系统用来对数据库及数据库中的数 ...

  4. 基于R的Bilibili视频数据建模及分析——预处理篇

    基于R的Bilibili视频数据建模及分析--预处理篇 文章目录 基于R的Bilibili视频数据建模及分析--预处理篇 0.写在前面 1.项目介绍 1.1 项目背景 1.2 数据来源 1.3 数据集 ...

  5. VS Code中使用live Server

    live server可以实时查看代码更改后的变化.测试十分快速. 1.安装live server 在扩展中搜索 live server,然后点击安装.等待安装完毕进行下一步配置. 2.打开设置界面: ...

  6. pycharm conmunity 2022.1没有mange repositories,只能使用命令方式修改镜像源(长期可信)

    https://blog.csdn.net/qq_43625764/article/details/124656990

  7. Springboot中@RequestBody接收的对象传入首字母大写的参数时,无法接收到参数值的问题解决

    在Vo对象中的变量上添加@JsonProperty("")注解 postman测试 转载:https://blog.csdn.net/qq_39069718/article/det ...

  8. 记一次FusionCompute安装springboot应用过程

    客户给了一个地址,登录后发现是FusionCompute 的一个虚拟机,第一次使用,于是过了一下在线帮助文档 ,大概明白了. 因为客户已经创建完了裸机虚拟机,前面的过程我也不会太多关注. 在概要里,可 ...

  9. 微信小程序中如何上传图片来识别身份证银行卡?

    Page({ shibie2(){ //识别银行卡 var that=this wx.chooseImage({ //选择图片 count: 1, //上传数量 sizeType: ['origina ...

  10. 根据已知经纬度导出对应地点的NDVI值

    首先把经纬度和NDVI投影到同一个坐标上,其次把excel的经纬度到出城shp格式 然后执行如下步骤: [工具][spatial analyst 工具][提取分析][多值提取至点]