当前位置: 首页 > 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.jsqmd.com/news/90002/

相关文章:

  • py连接mysql
  • py连接MongoDB
  • 5分钟快速上手uv-ui框架:跨平台Vue开发终极指南
  • 超详细教程:用windows-defender-remover彻底卸载Windows Defender
  • 国产AI双雄联手:Kimi K2开源与SunwayLink融合开启智能体开发新纪元
  • 10分钟精通League Akari:英雄联盟智能助手的全方位配置手册
  • ContextMenuManager:Windows右键菜单终极管理指南,3分钟告别杂乱无章![特殊字符]
  • 深蓝词库转换:输入法词库互转的终极解决方案
  • 还在为视频处理崩溃烦恼?Waifu2x-Extension-GUI分段处理让你轻松应对大文件
  • 如何用高效分块技术实现微信小程序大文件上传:3个关键性能优化技巧
  • BlenderGIS地形生成:从地理数据到三维世界的智能转换
  • uv-ui多端UI框架终极完整使用指南:从零开始快速构建跨平台应用
  • Predis连接管理终极指南:5分钟掌握Redis客户端故障自动恢复机制
  • Vue PDF组件实战:3分钟从零打造专业文档预览器
  • 解锁网盘高速下载:3步告别限速困扰的终极攻略
  • MarkText主题定制7大实战技巧:从新手到高手的视觉升级之路
  • 如何快速掌握NotepadNext十六进制编辑:面向初学者的终极指南
  • Nintendo Switch全能工具箱:NSC_BUILDER深度解析与实战指南
  • 阿里云通义万相2.2震撼开源:MoE架构引领视频生成革命,消费级显卡即可部署
  • DynoDrive Activation KESS3MKWO: Activate Alientech KESS3 Master/Slave Hardware for ECU Tuning
  • WinAsar:让Electron应用打包变得如此简单
  • 如何快速搭建个人音乐中心:三步实现专业级播放体验
  • 2025最新新媒体数据维护公司top5推荐!专业数据维护机构权威榜单发布,多维度助力品牌高效增长 - 全局中转站
  • 告警规则设置:根据监控数据设置合理的告警阈值与通知策略
  • 终极指南:用开源贴片机实现专业级电子制造
  • Zabbix与Prometheus在服务器及网络设备管理中的应用
  • ORM(Object-Relational Mapping,对象关系映射),一种编程技术
  • 2025全景解析:Web图像处理的三大革命性突破
  • 如何快速使用百度网盘解析工具实现终极下载提速
  • Predis健康监控系统:构建高可用Redis连接架构的完整解决方案