当前位置: 首页 > news >正文

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 */ }
http://www.cnnetsun.cn/news/55309.html

相关文章:

  • ISC3000-S U-Boot内置命令详解
  • 鲁棒控制实战宝典:从零掌握Tube MPC技术的完整指南
  • 10分钟精通League Akari:英雄联盟智能助手的全方位配置手册
  • uv-ui框架:重新定义多端开发的终极解决方案
  • 5分钟极速上手:Mermaid Live Editor文本绘图终极指南
  • 如何在浏览器中轻松创建专业Word文档:DOCX.js实用指南
  • 2025终极指南:LinkSwift网盘直链解析工具,一键获取高速下载链接
  • 24、深入探索XPath与XPointer:精准定位XML资源
  • 33、资源描述框架(RDF):语义网的关键技术
  • 43、MathML:发展、应用与关键技术解析
  • 百度ERNIE 4.5大模型震撼发布:多模态技术突破与开源生态构建
  • Nintendo Switch全能工具箱:NSC_BUILDER深度解析与实战指南
  • 联想拯救者工具箱完整使用指南:从入门到精通的全流程解析
  • 终极指南:用开源贴片机实现专业级电子制造
  • 写小说卡文怎么办?2025全网10款AI写小说工具实测+保姆级创作攻略!(含避坑指南)
  • 推荐10款亲测有效的降ai率工具,含免费降ai率神器(收藏)
  • decimal.js高精度计算终极指南:彻底告别JavaScript精度丢失烦恼
  • 7、零售与电商:搭乘 AR/VR 技术的浪潮
  • 如何快速解决鸣潮卡顿问题:WaveTools终极解锁120帧指南
  • Visio + DeepSeek 联动:文本描述转流程图的标准化指令与格式优化
  • 旺玖PL27A1芯片,USB3.0数据对拷线方案,跨系统数据传输方案,PL27A1代理商
  • FF14智能自动跳过副本动画的高效解决方案
  • 基于SpringBoot + Vue的二手车交易平台
  • 基于SpringBoot + Vue的智能图书馆管理系统
  • 基于SpringBoot + Vue的智能交通信息发布平台的设计与实现
  • 旋转标定的数学公式
  • Linux系统编程1(文件操作、Makefile)
  • Zotero文献管理效率革命:Linter插件让你的文献库焕然一新
  • Free-NTFS-for-Mac终极指南:苹果电脑完美读写NTFS磁盘的完整解决方案
  • 卡牌批量生成终极指南:5分钟掌握桌游设计利器