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…

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

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

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

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

STM32 DSP库的使用方法

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

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

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

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

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

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

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

以太网供电新标准POE+,IEEE802.3at解析

以太网供电新标准POE,IEEE802.3at解析 以太网供电新标准POE,IEEE802.3at一、IEEE 802.3at标准出现的背景为了遵循IEEE 802.3af规范,受电设备(PD)上的PoE功耗被限制为12.95W,这对于传统的IP电话以及网络摄像头而言足以满足需求&am…

KEIL ARM 6.12 compiler 编译__ASM 错误的解决方法

1、问题 KEIL compiler 设置为 “use default compiler version 5” 可以正确编译以下汇编和C混合代码,更改编译器为V6.12后不识别__ASM关键字,并对汇编语法报错。 替换为 __ASM void MSR_MSP(uint32_t addr) {MSR MSP, r0 BX r14 } 2、解决办法 6.12…

JIURL文档-Linux的虚拟内存与分页机制(x86-64位)(一)

作者:JIURL日期:2015年10月30日分页机制Linux(x64CPU)使用基于分页机制的虚拟内存。每个进程有256TB(48位)的虚拟地址空间。基于分页机制,这256TB地址空间的一些部分 被映射了物理内存&#xff…

STM32 设置片外SRAM分散加载

STM32F407 通过FSMC外挂一片SRAM 容量1MB, 设置应用程序的中的超大数组存放在外部SRAM。 (1)首先通过设置FSMC,保证正确挂接SRAM。 (2)MDK设置 (3)应用程序用__attribute__指定需要…

.NET4.0 之 Dynamic VS Refle“.NET研究”ction 效率

在我先前的文章中,不断的推广.NET4.0新特性。特别是.NET4.0 Dynamic 这个新特性。随之而来的问题也出现了—Dynamic 执行效率如何? 我们做开发的不光需要代码简洁,能够希望自己能够写出好的架构。还有一点非常重要的就是,我们的写…

lwip+freeRTOS 无法ping通的解决方案

0、工程环境 STM32F407ZGT6LAN8720FreeRTOSlwIP 1、硬件 (1)确认PHY芯片RMII管脚是否配置正确; (2)PHY芯片初始化完成后,用HAL_ETH_ReadPHYRegister读一下寄存器0,1,2&#xff0c…

数据流图

数据流图(Data Flow Diagram,简称DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经历的变换,其既提供了功能建模机制也提供了信息建模机制。是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。 它以…

lwip+freeRTOS 实现热插拔功能

1、lwip启用LWIP_NETIF_CALLBACK 宏,cubeMX会自动生成相关函数()。 /* Set the link callback function, this function is called on change of link status*/netif_set_link_callback(&gnetif, ethernetif_update_config); 回调函数在v…

iOS设计模式 - 享元

iOS设计模式 - 享元 原理图 说明 享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结…

带箭头的菜单列表

<title>带箭头的菜单列表</title><style>body{background-color:#999;}#menu{font-size:16px;width:140px;margin:0 auto;border:solid 1px #ccc;}#menu a,#menu a:visited{text-decoration:none;text-align:center;color:#c00;display:block;padding:4px;ba…

gcc编译选项-Os的用法

From: http://hi.baidu.com/caosicong/item/e61fa700581980d11ff0469c **********************gcc/egcs 的主要选项********* gcc 命令的常用选项 选项 解释 -ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色&#xff0c; 例如 asm 或 typeof 关键词。…

ASP.NET和PHP全面对比

谁是速度之王&#xff1f; 刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET。近日&#xff0c;微软的 Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET性能方面的文章&#xff0c;引起了来自双方程序员的大量回…

40个漂亮的单页网站设计案例(上篇)

有很多人喜欢单页网站&#xff0c;这种网站只有一个页面&#xff0c;设计都很精美&#xff0c;通过锚记进行平滑的导航。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站…