最新要闻
- 【寻味中华丨饮食】蔡甸藕带:白若玲珑玉 丝缕皆故乡
- 【天天时快讯】699元!XREAL Beam投屏盒子发布:随身携带的“可悬停AR空间屏”
- AMD今晚发布新CPU Intel急了:至强性能比EPYC快7倍
- 【世界新视野】4-1战胜热火!掘金队夺队史首个NBA总冠军:网友发帖祝贺 约老师太强
- 小区门口连装8条减速带 物业回复让业主无语:为防业主逃费
- 贵1000元值不值?i7-13700H和i5-13500H对比实测 世界观点
- 我在塞尔维亚寻找约基奇-每日速递
- 全球微速讯:“铁榔头”郎平重返中学校园,为学弟学妹成长“支招”
- 启明星辰(002439)6月12日主力资金净卖出1310.11万元
- 长安欧尚Z6新能源半年降价3万多被集体投诉 车主:坑惨我们了
- 每日热讯!2折!115网盘618大促:10年VIP只要1000元 赠100TB空间
- 全脂/低脂可选:特仑苏纯牛奶2.7元/盒抄底(商超6元)
- 腾势N7赛道远超宝马X3 赵长江:意向客户看到展车后几乎全下单了
- Fold5、Flip5换壳!三星W24系列折叠屏手机通过认证:25W快充
- 吴尚垠 吴尚_每日消息
- 奶我一口是什么意思网络用语_奶你一口是什么意思简介介绍
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收
参考帖子:https://blog.csdn.net/freedompoi/article/details/122350866
目前想要实现STM32F4自带的DMA双缓冲区,尝试过一版,结果不能预期,就使用了RxHalfCplt和RxCplt去实现DMA双缓冲区的效果。
现在有时间了,又重新实现STM32F4自带的DMA双缓冲区,作为参考。
(相关资料图)
MCU:STM32F429ZIT6
开发环境:STM32CubeMX+MDK5
此时,双击完后会关闭此界面,然后打开一个新界面。
然后,我们开始基本配置。
现在我们选择一个LED作为系统LED,该步骤可以忽略,只是本人喜欢这样子。以硬件原理图的LD3为例子。
基本配置除了时钟树外,基本上已经配置好了。
现在配置时钟树
基本配置已经配置完,现在开始配置实验使用的内容。
配置USART1,打开USART中断。并打开DMA。
配置FreeRTOS
配置完成,完善工程,生成工程。
到此,STM32CubeMX工具的使用结束!可以发现在桌面已经生成了DMA_DoubleBuf工程。
使用MDK5打开SDCard_rw工程打开。点击魔法棒,勾选微库。选择对应的下载器,勾选下载完复位允许。
在usart.h文件中,加入内容。
1 /* USER CODE BEGIN Header */ 2 /** 3 ****************************************************************************** 4 * @file usart.h 5 * @brief This file contains all the function prototypes for 6 * the usart.c file 7 ****************************************************************************** 8 * @attention 9 *10 * Copyright (c) 2023 STMicroelectronics.11 * All rights reserved.12 *13 * This software is licensed under terms that can be found in the LICENSE file14 * in the root directory of this software component.15 * If no LICENSE file comes with this software, it is provided AS-IS.16 *17 ******************************************************************************18 */19 /* USER CODE END Header */20 /* Define to prevent recursive inclusion -------------------------------------*/21 #ifndef __USART_H__22 #define __USART_H__23 24 #ifdef __cplusplus25 extern "C" {26 #endif27 28 /* Includes ------------------------------------------------------------------*/29 #include "main.h"30 31 /* USER CODE BEGIN Includes */32 #include "cmsis_os.h"33 #include34 /* USER CODE END Includes */35 36 extern UART_HandleTypeDef huart1;37 38 /* USER CODE BEGIN Private defines */39 40 #define UART_BUFF_SIZE 3041 42 #pragma pack(4)43 typedef struct44 {45 uint16_t len;46 uint8_t data[UART_BUFF_SIZE];47 }usart_multibuffer_data;48 #pragma pack()49 50 /* USER CODE END Private defines */51 52 void MX_USART1_UART_Init(void);53 54 /* USER CODE BEGIN Prototypes */55 void UART_DMA_MultiBuffer(void);56 /* USER CODE END Prototypes */57 58 #ifdef __cplusplus59 }60 #endif61 62 #endif /* __USART_H__ */
在usart.c文件中,加入内容。
1 /* USER CODE BEGIN Header */ 2 /** 3 ****************************************************************************** 4 * @file usart.c 5 * @brief This file provides code for the configuration 6 * of the USART instances. 7 ****************************************************************************** 8 * @attention 9 * 10 * Copyright (c) 2023 STMicroelectronics. 11 * All rights reserved. 12 * 13 * This software is licensed under terms that can be found in the LICENSE file 14 * in the root directory of this software component. 15 * If no LICENSE file comes with this software, it is provided AS-IS. 16 * 17 ****************************************************************************** 18 */ 19 /* USER CODE END Header */ 20 /* Includes ------------------------------------------------------------------*/ 21 #include "usart.h" 22 23 /* USER CODE BEGIN 0 */ 24 QueueHandle_t queue_mes; 25 usart_multibuffer_data uart_buf[2]; 26 27 //DMA 缓存0 传输结束回调函数 28 void DMA_M0_RC_Callback(DMA_HandleTypeDef *hdma) 29 { 30 BaseType_t xHigherPriorityTaskWoken; 31 32 uart_buf[0].len = hdma->Instance->NDTR; 33 xQueueSendFromISR(queue_mes,&uart_buf[0],&xHigherPriorityTaskWoken); 34 portYIELD_FROM_ISR(xHigherPriorityTaskWoken); 35 } 36 37 //DMA 缓存1 传输结束回调函数 38 void DMA_M1_RC_Callback(DMA_HandleTypeDef *hdma) 39 { 40 BaseType_t xHigherPriorityTaskWoken; 41 42 uart_buf[1].len = hdma->Instance->NDTR; 43 xQueueSendFromISR(queue_mes,&uart_buf[1],&xHigherPriorityTaskWoken); 44 portYIELD_FROM_ISR(xHigherPriorityTaskWoken); 45 } 46 47 //DMA 传输错误回调函数 48 void DMA_Error_Callback(DMA_HandleTypeDef *hdma) 49 { 50 //里面做一些异常处理 51 } 52 /* USER CODE END 0 */ 53 54 UART_HandleTypeDef huart1; 55 DMA_HandleTypeDef hdma_usart1_rx; 56 57 /* USART1 init function */ 58 59 void MX_USART1_UART_Init(void) 60 { 61 62 /* USER CODE BEGIN USART1_Init 0 */ 63 64 /* USER CODE END USART1_Init 0 */ 65 66 /* USER CODE BEGIN USART1_Init 1 */ 67 68 /* USER CODE END USART1_Init 1 */ 69 huart1.Instance = USART1; 70 huart1.Init.BaudRate = 115200; 71 huart1.Init.WordLength = UART_WORDLENGTH_8B; 72 huart1.Init.StopBits = UART_STOPBITS_1; 73 huart1.Init.Parity = UART_PARITY_NONE; 74 huart1.Init.Mode = UART_MODE_TX_RX; 75 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; 76 huart1.Init.OverSampling = UART_OVERSAMPLING_16; 77 if (HAL_UART_Init(&huart1) != HAL_OK) 78 { 79 Error_Handler(); 80 } 81 /* USER CODE BEGIN USART1_Init 2 */ 82 83 /* USER CODE END USART1_Init 2 */ 84 85 } 86 87 void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) 88 { 89 90 GPIO_InitTypeDef GPIO_InitStruct = {0}; 91 if(uartHandle->Instance==USART1) 92 { 93 /* USER CODE BEGIN USART1_MspInit 0 */ 94 95 /* USER CODE END USART1_MspInit 0 */ 96 /* USART1 clock enable */ 97 __HAL_RCC_USART1_CLK_ENABLE(); 98 99 __HAL_RCC_GPIOA_CLK_ENABLE();100 /**USART1 GPIO Configuration101 PA9 ------> USART1_TX102 PA10 ------> USART1_RX103 */104 GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;105 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;106 GPIO_InitStruct.Pull = GPIO_NOPULL;107 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;108 GPIO_InitStruct.Alternate = GPIO_AF7_USART1;109 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);110 111 /* USART1 DMA Init */112 /* USART1_RX Init */113 hdma_usart1_rx.Instance = DMA2_Stream2;114 hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4;115 hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;116 hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;117 hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;118 hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;119 hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;120 hdma_usart1_rx.Init.Mode = DMA_CIRCULAR;121 hdma_usart1_rx.Init.Priority = DMA_PRIORITY_MEDIUM;122 hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;123 hdma_usart1_rx.XferCpltCallback = DMA_M0_RC_Callback;124 hdma_usart1_rx.XferM1CpltCallback = DMA_M1_RC_Callback;125 hdma_usart1_rx.XferErrorCallback = DMA_Error_Callback;126 if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)127 {128 Error_Handler();129 }130 131 __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx);132 133 /* USART1 interrupt Init */134 HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);135 HAL_NVIC_EnableIRQ(USART1_IRQn);136 /* USER CODE BEGIN USART1_MspInit 1 */137 138 /* USER CODE END USART1_MspInit 1 */139 }140 }141 142 void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)143 {144 145 if(uartHandle->Instance==USART1)146 {147 /* USER CODE BEGIN USART1_MspDeInit 0 */148 149 /* USER CODE END USART1_MspDeInit 0 */150 /* Peripheral clock disable */151 __HAL_RCC_USART1_CLK_DISABLE();152 153 /**USART1 GPIO Configuration154 PA9 ------> USART1_TX155 PA10 ------> USART1_RX156 */157 HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);158 159 /* USART1 DMA DeInit */160 HAL_DMA_DeInit(uartHandle->hdmarx);161 162 /* USART1 interrupt Deinit */163 HAL_NVIC_DisableIRQ(USART1_IRQn);164 /* USER CODE BEGIN USART1_MspDeInit 1 */165 166 /* USER CODE END USART1_MspDeInit 1 */167 }168 }169 170 /* USER CODE BEGIN 1 */171 //使能DMA172 void UART_DMA_MultiBuffer(void)173 {174 uint32_t u32wk0;175 176 SET_BIT(huart1.Instance->CR3,USART_CR3_DMAR);177 HAL_DMAEx_MultiBufferStart_IT(&hdma_usart1_rx,178 (uint32_t)(&huart1.Instance->DR),179 (uint32_t)&uart_buf[0].data[0],180 (uint32_t)&uart_buf[1].data[0],181 UART_BUFF_SIZE);182 183 //这里是解决DMA在启动时,如果接收到大量数据会出现死机的问题184 u32wk0 = huart1.Instance->SR; 185 u32wk0 = huart1.Instance->DR;186 UNUSED(u32wk0);187 }188 189 /* USER CODE END 1 */
在main函数中,加入内容。
1 /** 2 * @brief The application entry point. 3 * @retval int 4 */ 5 int main(void) 6 { 7 /* USER CODE BEGIN 1 */ 8 9 /* USER CODE END 1 */10 11 /* MCU Configuration--------------------------------------------------------*/12 13 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */14 HAL_Init();15 16 /* USER CODE BEGIN Init */17 18 /* USER CODE END Init */19 20 /* Configure the system clock */21 SystemClock_Config();22 23 /* USER CODE BEGIN SysInit */24 25 /* USER CODE END SysInit */26 27 /* Initialize all configured peripherals */28 MX_GPIO_Init();29 MX_DMA_Init();30 MX_USART1_UART_Init();31 /* USER CODE BEGIN 2 */32 queue_mes = xQueueCreate(10, sizeof(usart_multibuffer_data));33 UART_DMA_MultiBuffer(); 34 /* USER CODE END 2 */35 36 /* Init scheduler */37 osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */38 MX_FREERTOS_Init();39 /* Start scheduler */40 osKernelStart();41 42 /* We should never get here as control is now taken by the scheduler */43 /* Infinite loop */44 /* USER CODE BEGIN WHILE */45 while (1)46 {47 /* USER CODE END WHILE */48 49 /* USER CODE BEGIN 3 */50 }51 /* USER CODE END 3 */52 }
在freertos.c文件中
1 extern usart_multibuffer_data uart_buf[2]; 2 extern QueueHandle_t queue_mes; 3 usart_multibuffer_data queue_data; 4 5 /* USER CODE BEGIN Header_StartDefaultTask */ 6 /** 7 * @brief Function implementing the defaultTask thread. 8 * @param argument: Not used 9 * @retval None10 */11 /* USER CODE END Header_StartDefaultTask */12 void StartDefaultTask(void *argument)13 {14 /* USER CODE BEGIN StartDefaultTask */15 BaseType_t ret = pdFALSE;16 /* Infinite loop */17 for(;;)18 {19 ret = xQueueReceive(queue_mes,&queue_data,portMAX_DELAY);20 if(ret == pdTRUE)21 {22 HAL_UART_Transmit(&huart1,queue_data.data,queue_data.len,100);23 }24 }25 /* USER CODE END StartDefaultTask */26 }
实验效果
关键词:
-
STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收
参考帖子:https: blog csdn net freedompoi article details 1223508
来源: STM32F429 Discovery开发板应用:使用FreeRTOS队列+DMA双缓存实现串口数据接收
【寻味中华丨饮食】蔡甸藕带:白若玲珑玉 丝缕皆故乡
【天天时快讯】699元!XREAL Beam投屏盒子发布:随身携带的“可悬停AR空间屏”
AMD今晚发布新CPU Intel急了:至强性能比EPYC快7倍
【世界新视野】4-1战胜热火!掘金队夺队史首个NBA总冠军:网友发帖祝贺 约老师太强
小区门口连装8条减速带 物业回复让业主无语:为防业主逃费
贵1000元值不值?i7-13700H和i5-13500H对比实测 世界观点
我在塞尔维亚寻找约基奇-每日速递
全球微速讯:“铁榔头”郎平重返中学校园,为学弟学妹成长“支招”
世界最新:深度学习应用篇-推荐系统[11]:推荐系统的组成、场景转化指标(pv点击率,uv点击率,曝光点击率)、用户数据指标等评价指标详解
flutter 日志打印三種方法
最新:Linux根文件制作
热推荐:一对一直播源码平台搭建的关键条件,成败在此。
真刑!几行代码端了整个教务系统。。
启明星辰(002439)6月12日主力资金净卖出1310.11万元
长安欧尚Z6新能源半年降价3万多被集体投诉 车主:坑惨我们了
每日热讯!2折!115网盘618大促:10年VIP只要1000元 赠100TB空间
全脂/低脂可选:特仑苏纯牛奶2.7元/盒抄底(商超6元)
腾势N7赛道远超宝马X3 赵长江:意向客户看到展车后几乎全下单了
Fold5、Flip5换壳!三星W24系列折叠屏手机通过认证:25W快充
吴尚垠 吴尚_每日消息
JAVA非递归生成无限级菜单树的较简代码实现。(非泛用型工具包,仅总结逻辑)
每日关注!低代码开发平台为数智赋能,让开发变得更简单
奶我一口是什么意思网络用语_奶你一口是什么意思简介介绍
腾讯祭出的大招《无畏契约》 能不能成为下一个《英雄联盟》?-环球微速讯
环球观点:最大内存+最美拍照手机!小米Civi 3 1TB上市:2999元
当前消息!满级玩家有盼头了 暗黑世界V等你来
28.98万起 智己LS7都市版上市 CEO刘涛:现在买增程过几年就会焦虑 每日热点
男子洗澡被闯入的两匹“狼”吓坏 经辨认是阿拉斯加 焦点精选
C天键(301383)6月12日主力资金净买入2791.69万元 焦点快看
【当前独家】hvv面试常见框架漏洞
天天热头条丨ldquo 以至 rdquo ldquo 以致 rdquo ldquo 以至于 rdquo 与 ldquo 以致于 rdquo 的区别
蔚来降价3万!李斌:买的起2、30万车的人时间成本很高 时薪200元肯定是有的-世界播报
世界即时:仇恨拉满!日本核污水排放在即 韩国人正疯狂买盐:不敢吃海鲜了
三冠王巡游!曼城全队展示三座奖杯 哈兰德赤膊上阵 城迷疯狂庆祝
每日快报!暂停加息预期支撑多头 美债市场周初表现偏强
微资讯!英伟达市占率超83% 显卡降不降价我说了算!4060系列买到偷着乐?
希捷被重罚3亿美元后!消息称华为不缺硬盘、SSD了:西数持续供货中_每日资讯
十多年了 苹果新款Mac Pro依然不是中国制造:美泰联手组装
芬兰加入北约的军事协调工作结束 双方签署声明 速读
每日速读!读发布!设计与部署稳定的分布式系统(第2版)笔记01_生产环境的生存法则
大家超爱看黑美鱼?《小美人鱼》卖座成2023票房TOP10:国内外口碑两极分化
焦点简讯:漫威等大片国人不爱看了 不符合审美!郭帆:中国电影将弯道超车好莱坞
环球微速讯:香干怎么做比较好吃?
靠给肯德基、麦当劳供货的纸袋大王上市:创始人身价近12亿
一个月3家公司退出:日本手机产业无奈 打不过苹果也打不过小米-世界新消息
天天新动态:618降价英雄:大屏电视跌破2000元该如何买?
绝不降价的蔚来全系降3万!李斌被逼得没辙了
夸克App半夜突然上热搜 网友懵了:没广告很好用
全球报道:鲁葱杂5号_关于鲁葱杂5号简述
开远市气象台发布暴雨蓝色预警信号【Ⅳ级/一般】【2023-06-12】|每日速读
微控制器实时操作系统实践4选择正确的MCU 每日报道
全球短讯!.NET 5 以后的 HttpClient 超时问题
Web安全-渗透测试-信息收集02|环球通讯
还买什么杂牌 小米27寸2K 165Hz显示器到手1159元
贵州“美猴王”打坐冥想神情悠闲 网友:猴子竟也懂养生
全球第三大手机系统鸿蒙4.0来了!华为HDC 2023定档:8月4日见 关注
国际原子能机构总干事已出发前往乌克兰 计划与泽连斯基会面|全球快播
如何解决系统报错:nf_conntrack: table full, dropping packets|天天关注
内存马简单了解(新手向)
头条焦点:小米9号员工李明创业:全球首款Android桌面机器人来了
全年无休的数字人 卷走主播
徕卡超大杯首次进军海外!小米13 Ultra登陆欧洲:售价1499欧超iPhone
讯息:中国最强AI研究院的大模型 为何迟到了
海南女网友感冒 福建小伙骑电摩上高速送药:地图显示要骑77小时|今日热闻
广东惠州可提供联创电压力锅维修服务地址在哪
vulhub靶场搭建,以及使用方法
当前关注:148家企业获评守信示范企业 为历年最多
速读:又一时速350高铁开通在即:贵阳至南宁从5个多小时缩短至2小时
当前焦点!德国人拒绝Intel
高性能还有好身材的RTX轻薄本!华硕灵耀Pro14 2023 13499元起
梅西首次快手直播被吐槽“诈骗”:仅出镜1分钟 还是录播
透气不闷热 骆驼速干运动套装79元(门店778元)_当前速读
速递!文心一言 VS 讯飞星火 VS chatgpt (39)-- 算法导论5.4 3题
ArrayList 底层结构和源码分析 世界观天下
全球最大的红宝石拍卖价格高达2.48亿 创下有史以来最高纪录
保时捷发布其纯电概念hypercar 马力或将达到惊人的1500匹
伏罂而听的故事声音主要是借助于什么传入侦察兵的耳朵_伏罂而听的成语故事
福特回应称没有计划终止福特电马赫公司运营 或有意将“回归”中国运营
复兴号开进青藏铁路进入倒计时 有望7月1日运营
日本正式决定启动福岛核废水排海计划 韩国民众担心吃盐问题
员工因“饭量太大”被解雇要求赔偿 法院:驳回
【环球热闻】微信朋友圈转发扫码免费送米家风扇?小米辟谣:假的
比凯美瑞还便宜!特斯拉Model 3美国售价将低于20万 天天快看
报道:中国2023年汽车销量破1000万辆 出口量暴增 老外爱上国产车
前所未见:Win11神秘版本惊现Win10隐藏壁纸
“前端已死”甚嚣尘上,全栈工程师卷到起飞
磁盘分区
尚医通-day02【医院设置前端详细步骤】(内附源码)|环球快播报
全球热点评!记录--详解 XSS(跨站脚本攻击)
ESMap 三维地图在智慧园区三维场景的应用-数字孪生3D可视化服务平台 当前速递
环球信息:弦歌扬雅韵,诗乐绘情深,云外清音——大提琴与诗词音乐会举行
EDG正式发布Uzi夏季赛定妆照!这就是瘦下来的神吗?
【天天时快讯】特斯拉辅助驾驶4年间在美国发生736起车祸 至少17人遇难
【报资讯】46.9℃!新疆又热到全国第一了
是个大工程!大熊猫洗澡两个半人摁半个负责洗:旁边一只在看戏-观天下
环球今热点:马斯克脑机接口获批人体实验 公司估值高达50亿美元
美迪西:美熹企业通过大宗交易向其一致行动人王国林内部转让79.66万股
基于vue+flask+sql的公司销售采购信息服务系统|环球简讯
世界时讯:当GaussDB遇上了毕昇编译器