news 2026/5/30 10:31:08

Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据(三)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据(三)

前置文章:

Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据(一)-CSDN博客Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据(二)-CSDN博客

在以上章节完成了对框架的初步探索以及对CubeMx的配置

在freertos的task中对buffer进行了一些测试

完成了队列的发送接收测试

下面继续上一章的内容继续完成本次目标

本期目标

理清本工程系统框架

弄懂CubeMx配置相关原理及设置的背后含义

对DMA以及ADC相关的重要API接口使用详解

梳理代码设计流程

3.发送消息对列或任务通知(邮箱)给线程A

/* USER CODE BEGIN Includes */ #include <stdlib.h> #include "queue.h" /* USER CODE END Includes */

第一步先包含头文件

* \defgroup xQueueSend xQueueSend * \ingroup QueueManagement */ #define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK ) /** * queue. h * <pre> BaseType_t xQueueOverwrite( QueueHandle_t xQueue, const void * pvItemToQueue

找到对应函数

xQueueSend( xQueue, pvItemToQueue, xTicksToWait )

第一个形参依旧是句柄

所以要先创建队列 , 再传参进来

第二个形参

P就是指针

v是variables(变量)

传入的是变量的地址

第三个形参是等待时间

xQueueCreate( uxQueueLength, uxItemSize )

在点h文件里找到队列创建函数

第一个形参是队列的长度

第二个形参是队列里每一个元素的大小

假如一个队列被分成了四份,这个份数就是由第一个形参决定

而分成了四份后的大小就是由第二个形参决定

假设第二个形参是4

那么总的队列长度就是4x4 = 16

xQueue1 = xQueueCreate( QUEUE_LENGTH, // The number of items the queue can hold. ITEM_SIZE // The size of each item in the queue &( ucQueueStorage[ 0 ] ), // The buffer that will hold the items in the queue. &xQueueBuffer ); // The buffer that will hold the queue structure.

创建队列使用样板

xQueueReceive()

BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait )

void StartDefaultTask(void *argument) { /* USER CODE BEGIN StartDefaultTask */ buffer1 = (uint32_t *)malloc((sizeof(uint32_t)* BUFFER_SIZE)); buffer2 = (uint32_t *)malloc((sizeof(uint32_t)* BUFFER_SIZE)); if(NULL == buffer1) { printf("buffer1 malloc failed \r\n"); } if(NULL == buffer2) { printf("buffer2 malloc failed \r\n"); return; } printf("buffer1 , buffer2 malloc success\r\n "); memset(buffer1, 0xff , (sizeof(uint32_t)* BUFFER_SIZE)); memset(buffer2, 0xff , (sizeof(uint32_t)* BUFFER_SIZE)); printf("Unit test ADC + DMA\r\n "); HAL_StatusTypeDef ret1 = HAL_OK; HAL_StatusTypeDef ret2 = HAL_OK; ret1 = HAL_ADC_Start_DMA(&hadc1, buffer1, BUFFER_SIZE); ret2 = HAL_ADC_Start_DMA(&hadc1, buffer2, BUFFER_SIZE); if(HAL_OK != ret1) { printf("HAL_ADC1 call failed "); } if(HAL_OK != ret2) { printf("HAL_ADC2 call failed "); } //UnitTest Queue send and receive QueueHandle_t xQueue1 = NULL; xQueue1 = xQueueCreate(10 , 4 ); if(NULL == xQueue1) { printf("Queue create failed \r\n"); return ; } uint32_t queue_data_1 = 123; BaseType_t ret_queue = pdPASS; ret_queue = xQueueSend( xQueue1, &queue_data_1, 0 ); printf("QueueSend ret_queue = [%ld]\r\n" , ret_queue); ret_queue = pdPASS; uint32_t queue_data_2 = 0xff; ret_queue = xQueueReceive( xQueue1, &queue_data_2, 0 ); printf("xQueueSend ret_queue = [%ld]\r\n" , ret_queue); printf("xQueueReceive queue_data_2 = [%d]\r\n" , queue_data_2); /* Infinite loop */ for(;;) { printf("hello world \r\n"); //printf("buffer1 data = [%d] \r\n" , buffer1[0]); //printf("buffer2 data = [%d] \r\n" , buffer2[0]); osDelay(1000); } /* USER CODE END StartDefaultTask */ }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 6:45:30

深蓝词库转换:输入法词库互转的终极解决方案

深蓝词库转换&#xff1a;输入法词库互转的终极解决方案 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为不同输入法之间的词库不兼容而烦恼吗&#xff1f;深蓝…

作者头像 李华
网站建设 2026/5/30 2:10:33

如何快速掌握在线图表编辑器:新手完整入门指南

还在为技术文档的可视化表达而烦恼吗&#xff1f;在线图表制作工具已经成为现代工作必备的效率神器。通过文本驱动图表的方式&#xff0c;您可以轻松创建专业级可视化内容&#xff0c;而实时预览编辑功能让创作过程更加直观高效。 【免费下载链接】mermaid-live-editor Locatio…

作者头像 李华
网站建设 2026/5/29 16:37:56

百度网盘下载提速终极方案:第三方客户端实战指南

还在为百度网盘的龟速下载而抓狂&#xff1f;官方客户端的限速策略让无数用户头疼不已。今天&#xff0c;我将为你详细介绍基于BaiduPCS-Web的百度网盘第三方客户端解决方案&#xff0c;帮助你突破速度限制&#xff0c;享受极速下载体验。 【免费下载链接】baidupcs-web 项目…

作者头像 李华
网站建设 2026/5/26 17:47:06

Python多线程实战:12306抢票系统的并发处理优化

一、引言&#xff1a;为什么12306抢票需要多线程&#xff1f; 在12306抢票系统中&#xff0c;并发处理是提升抢票成功率的关键因素之一。抢票过程涉及多个耗时操作&#xff1a; CDN筛选&#xff1a;需要测试大量CDN节点的响应速度用户状态检查&#xff1a;需要定期验证登录状态…

作者头像 李华
网站建设 2026/5/29 12:34:59

23、结合 XLink、XPath 和 XPointer 访问子资源

结合 XLink、XPath 和 XPointer 访问子资源 在实际的数据访问中,我们常常需要获取文档的部分信息而非整个文档。结合 XLink、XML 路径语言(XPath)和 XML 指针语言(XPointer)可以提供这样一种访问文档特定部分的机制。 1. 结合 XLink、XPath 和 XPointer 访问子资源 之前…

作者头像 李华
网站建设 2026/5/26 20:16:58

27、XML数据绑定与记录集导航全解析

XML数据绑定与记录集导航全解析 1. 数据来源与记录集构建 整个数据源包含在 <inventory> 元素中,其中有两个记录,每个记录由 <catalog> 元素定义。每个记录包含六个字段: <name> 、 <cost> 、 <clarity> 、 <carat> 、 …

作者头像 李华