STM32 FreeRTOS USART DMA空闲中断和消息队列的使用

(后文有修改)

一、思路

USART+DMA空闲中断发生后,将接收到的DMA消息用消息队列发出去xQueueSendToFrontFromISR,FreeRTOS创建一个独立的任务一直等待接受消息队列。

DMA中断可以被FreeRTOS管理。

二、CubeMx配置驱动

2.1 USART+DMA

FreeRTOS设置的中断管理范围为5~15,USART中断应该在该范围内,此处设计为7。

2.2 FreeRTOS创建UsartRx 任务,创建消息队列Queue,生成代码。

三、修改代码

3.1 usart.c

(1)增加引用和定义

(2)编写中断处理函数

3.2 XXXit.c

3.3 FreeRTOS.c

修改CubeMx创建的usartRxMsgQueueHandle,指定为队列深度为3,单个Item大小为sizeof(USART_RECEIVETYPE)。

MX_FREERTOS_Init(void)执行结束后将isFreeRTOSSysOn设置为1,通知串口中断处理程序启用xQueueSendToFrontFromISR。

最后在usartRxFunc任务函数入口编写串口数据业务处理逻辑,调用xQueueReceive一直阻塞等待。

四、消息队列的使用方式

1、使用队列添加引用:#include "queue.h"2、初始化:osMessageQueueId_t usartRxMsgQueueHandle;
const osMessageQueueAttr_t usartRxMsgQueue_attributes = {.name = "usartRxMsgQueue"
};usartRxMsgQueueHandle = osMessageQueueNew (3, sizeof(USART_RECEIVETYPE), &usartRxMsgQueue_attributes);3、发送队列消息
(1)中断函数中发送队列消息
xQueueSendToFrontFromISR、xQueueSendToBackFromISR、xQueueOverwriteFromISR、xQueueSendFromISR、xQueueGenericSendFromISR等
e.g.
xxxISR(void)
{BaseType_t xHigherPriorityTaskWoken = pdFALSE;...xQueueSendToFrontFromISR(usartRxMsgQueueHandle,&Uart1Rx,&xHigherPriorityTaskWoken);...portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
(2)普通函数中发送队列消息
xQueueSendToFront、xQueueSendToBack、xQueueOverwrite、xQueueSend、xQueueGenericSend等4、等待、查询接受队列消息
(1)中断函数中查询队列消息
xQueuePeekFromISR等(2)普通函数中等待查询队列消息
xQueueReceive、uxQueueMessagesWaiting、xQueuePeek、uxQueueSpacesAvailable等

2021 09 22 补充:

以上实现队列使用方法是基于cmsis_os,对于cmsis_os2,已经不需要考虑接口是否是FromISR,直接使用osMessageQueuePut接口即可。如下:

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Samba服务全攻略

From: http://redking.blog.51cto.com/27212/120934 1 Samba原理 1.1 Samba概述 接触Linux我们听的最多的就是Samba服务,为什么Samba应用这么广泛哈~,原因是Samba最先在Linux和Windows两个平台之间架起了一座桥梁哈,正是由于Samba的出现&am…

VS2008 JS调试和Silverlight 后台代码调试 相互影响的问题。---自己做实例证明

但是有几点要注意。首先,不能在同一调试过程中调试托管代码和脚本。(即XAML。cs 和JAVASCRIPT) 这就是说,如果在XAML的隐藏代码中设置一个断点,并且已经打开了Silverlight调试,那么断点将发挥相应的作用然而…

[react] 如何提高组件的渲染效率呢?

[react] 如何提高组件的渲染效率呢? 类组件: 1、继承PureComponent 2、使用shouldComponentUpdate优化 函数组件: 1、memo模拟PureComponent 2、使用useMemo缓存变量 3、使用useCallback缓存函数 循环添加key,key最好用数组项的唯一值&…

FreeRTOS 任务间同步和通信方法

以下在CMSIS V2代码下实现,不区分是否中断安全。 1、信号量 semaphores /* Definitions for adcFinishedBinSem */ osSemaphoreId_t adcFinishedBinSemHandle; const osSemaphoreAttr_t adcFinishedBinSem_attributes {.name "adcFinishedBinSem" };/…

Codeforces Round #277 (Div. 2) A. Calculating Function 水题

A. Calculating Function Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/problem/A Description For a positive integer n lets define a function f:f(n)   - 1  2 - 3  ..  ( - 1)nnYour task is to calculate f(n) f…

链表笔记之1

#include <stdlib.h>/*标准库函数*/#include <stdio.h>/*I/O函数*/#include <string.h>/*字符串函数*/#include <ctype.h>/*字符操作函数*/#include "linkedlist.h"#include "hashtable.h"#include "queue.h" typedef s…

FPGA+NIOS2 Verilog+C 实现一个计算器

用FPGA生成一个32位的MCU软核&#xff0c;生产相应的管脚和资源&#xff0c;在MCU里边用C完成计算器的逻辑和LCD1602、矩阵键盘的编写。2016年的古老存货。 一、硬件和开发环境 FPGA&#xff1a;EP4CE6E22C8 LCD1206液晶&#xff0c;4X4矩阵键盘。quartus 13project_FPGA_NO1…

[react] ES6的语法‘...‘在React中有哪些应用?

[react] ES6的语法...在React中有哪些应用&#xff1f; 向子组件传递props <Demo {...this.props}> redux中参数合并 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

用Java Servlets代替CGI

从网络的早期阶段开始&#xff0c;人们就希望他们的网络服务器不仅能够显示静态文档&#xff0c;通用网关接口(CGI) 扩展了服务器的能力&#xff0c;但其代价是增加了额外的处理进程。FastCGI则把外部CGI 处理进程同网络服务器更紧密地集成在一起&#xff0c;另外&#xff0c;对…

C语言中的位域的使用

From: http://dev.yesky.com/374/2645874.shtml 计算机C语言初学者入门讲座   一、位域   有些信息在存储时&#xff0c;并不需要占用一个完整的字节&#xff0c; 而只需占几个或一个二进制位。例如在存放一个开关量时&#xff0c;只有0和1 两种状态&#xff0c; 用一…

Windows 7下实现×××连接自动创建

在完成了Windows XP下自动创建并配置连接后&#xff0c;其实我们还需要对Windows 7下自动配置做一个介绍&#xff0c;因为目前实际上很多企业也已经开始进行了大批量的Windows 7的使用&#xff0c;而且很多用户目前也在逐渐向Windows 7系统迈进&#xff0c;那么如何让Windows 7…

FPGA Verilog实现一个脉冲波形变换

一、波形变换需求 二、思路 &#xff08;1&#xff09;脉冲边沿提取&#xff0c;得到波形的上升沿r_rise和下降沿r_fall &#xff08;2&#xff09;将上升沿r_rise延迟一节拍r_r_rise&#xff0c;r_rise更新上一周期的周期和脉宽并清空上一次的脉冲周期计数和脉宽周期计数&am…

[react] 状态管理器它精髓是什么?

[react] 状态管理器它精髓是什么&#xff1f; 统一的数据管理 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

夺命雷公狗jquery---22-bind为jquery对象绑定多个相关事件

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"js/jquery.js"></script><script>//页面载入ready方法$(function(){$(img).bind({mouseover:function(){$(#result…

STM32 DSP库的使用方法

一、工程中如何添加DSP库 在keil5软件中点击 Pack&#xff0c;CMISIS组件选择DSP资源&#xff0c;可以选择Source源码或者Library库导入到项目中&#xff0c;点击OK&#xff0c;可以在项目树中看到该资源已经导入了工程。 二、 如何使用DSP库 DSP库对浮点计算做了优化和增强&…

SharePoint 2010-随机出现的页面性能问题

有个客户, 服务器的配置巨牛, 24核CPU, 64GB内存, 这样的三台机器组成了一个SharePoint 2010的服务器场. 就是这样牛的配置, 出现了性能问题. 看performance log, 发现CPU, 内存都资源非常充裕, 问题发生的时候request/sec的值也非常的低. 问题发生的频率很低, 一天十次以内. …

[react] 在使用react过程中什么时候用HOC?

[react] 在使用react过程中什么时候用HOC&#xff1f; 给组件增加额外的功能 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

C++使用Json作为数据包装格式的通信

From: http://blog.sina.com.cn/s/blog_4ae178ba01014eve.html http://blog.csdn.net/chenziwen/article/details/5785932 Json大家都耳熟能详了吧&#xff1f;现在Json广泛用于各类通信&#xff0c;特别是基于Http协议的通信&#xff0c;一般的服务端动态脚本语言都有库支持…

iOS开发多线程篇—线程的状态

iOS开发多线程篇—线程的状态 一、简单介绍 线程的创建&#xff1a; self.thread[[NSThread alloc]initWithTarget:self selector:selector(test) object:nil]; 说明&#xff1a;创建线程有多种方式&#xff0c;这里不做过多的介绍。 线程的开启&#xff1a; [self.thread star…

Qt 编写应用程序升级的配置文件json 生成工具

通过此工具将需要更新的应用程序和相关目录下的依赖文件配置成json格式的升级文件&#xff0c;客户端版本监控软件通过读取此json文件&#xff0c;对比相应字段&#xff0c;实现自动拉取文件&#xff0c;从而保证客户端应用程序自动更新。 此json文件放在待升级的exe同级目录下…