news 2026/6/11 12:32:50

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/6/11 1:48:46

国产AI双雄联手:Kimi K2开源与SunwayLink融合开启智能体开发新纪元

国产AI双雄联手&#xff1a;Kimi K2开源与SunwayLink融合开启智能体开发新纪元 【免费下载链接】Kimi-K2-Base Kimi K2 是一款前沿的专家混合&#xff08;MoE&#xff09;语言模型&#xff0c;激活参数达320亿&#xff0c;总参数量达1万亿。采用 Muon 优化器训练&#xff0c;Ki…

作者头像 李华
网站建设 2026/6/10 16:00:06

【STM32】基于TPS61165芯片的LED驱动电路

目录 一、简单介绍 二、cubeMX配置 开调试口 开PWM 时钟 按键 三、代码编写 四、效果 五、备注 六、工程链接 一、简单介绍 TPS61165是一款白色LED灯驱动芯片&#xff0c;输入电压3~18V&#xff0c;开关电流最大1.2A。具有LED开路保护&#xff0c;可以PWM调光或者高低…

作者头像 李华
网站建设 2026/6/10 18:55:33

MuJoCo软体机器人仿真:从参数调优到工业级精度实战

为什么你的软体夹爪仿真总是与实际测试结果相差甚远&#xff1f;当硅胶指尖在虚拟世界中变形时&#xff0c;它们是否真实地反映了材料的内在特性&#xff1f;这些问题困扰着无数机器人开发者。本文将通过MuJoCo弹性插件的深度解析&#xff0c;带你揭开软体仿真准确性的秘密。 【…

作者头像 李华
网站建设 2026/6/10 15:56:08

Sketch MeaXure:重新定义设计标注效率的专业解决方案

Sketch MeaXure&#xff1a;重新定义设计标注效率的专业解决方案 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 在当今快节奏的设计工作环境中&#xff0c;设计师们常常面临一个共同的痛点&#xff1a;如何高效准确地将…

作者头像 李华
网站建设 2026/6/11 5:51:20

D.二分查找-进阶——1170. 比较字符串最小字母出现频次

题目链接&#xff1a;1170. 比较字符串最小字母出现频次&#xff08;中等&#xff09; 算法原理&#xff1a; 解法&#xff1a;二分查找-求最右端点 6ms击败44.49% 时间复杂度O(Nlogn) 问题转化&#xff1a;将次数都抽取出来&#xff0c;那么就是说从words的次数数组中找到比qu…

作者头像 李华
网站建设 2026/6/10 2:56:55

终极指南:如何用OpenCore Legacy Patcher让老Mac焕发新生

终极指南&#xff1a;如何用OpenCore Legacy Patcher让老Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的老Mac无法升级到最新系统而烦恼吗&#xf…

作者头像 李华