赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
STM32DMA指的是STMicroelectronics公司生产的基于ARM Cortex-M系列处理器中内置的DMA(Direct Memory Access,直接存储器访问)功能,并集成在STM32微控制器中的DMA控制器。
STM32DMA具有以下特点:
高带宽、低延迟:通过DMA控制器,数据可以在不占用CPU时间的情况下,直接在外设和内存之间传输,实现高带宽、低延迟的数据传输。
灵活配置:STM32DMA支持多通道、多优先级、循环/单次传输等丰富的传输模式,可以根据应用场景和需求进行灵活配置。
低功耗:STM32DMA采用了多种节能技术,如动态时钟门控、待机模式等,可以实现低功耗、高效能的数据传输。
易于编程:STM32DMA的编程接口简单易懂,支持多种编程方式,包括CMSIS-DMA库、HAL库、LL库等,对于初学者和专业开发人员都比较友好。
STM32DMA广泛应用于各种领域的嵌入式系统,如工业自动化、智能家居、医疗设备、汽车电子等,可以大大提高系统性能和可靠性,降低系统成本和功耗。
首先打开cubemx创建工程
搜索我们的stm32芯片,开始工程
根据芯片情况来配置时钟源,我们这里选择的外部时钟源
接下来是对时钟树的配置
接下来开始对串口配置,我们选择串口1,配置波特率115200
开启串口中断
接下来,我们开始dma的开启,开启dma
同理我们开启TX
到这里我们的工程就弄号了,接下来我们保存工程
定义基本的参数
下面是在这个位置添加如下代码
uint8_t SSS[50];
uint8_t ppp[50]={"stop"};
uint8_t ttt[50]={"start"};
uint8_t mmm[20]={"hello windows "};
char ss =1;
接下来是
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart,uint16_t Size)//DMA串口中断回调函数 { if(huart==&huart1) { // HAL_UART_Transmit_DMA(&huart1,SSS,Size); HAL_UARTEx_ReceiveToIdle_DMA(&huart1,SSS,sizeof(SSS)); if(SSS[3]==ppp[3]) { ss=0; } if(SSS[3]==ttt[3]) { ss=1; } } }
HAL_UARTEx_ReceiveToIdle_DMA(&huart1,SSS,sizeof(SSS));
接下来在mian函数中while循环中添加如下函数
if(ss==1){
HAL_UART_Transmit_DMA(&huart1,mmm,sizeof(mmm));
HAL_Delay(1000);
}
}
到这里程序就编写完成了。
我们这里stm32一直向上位机发送hellow windows,然后当电脑发送stop向单片机时,单片机停止发送,当发送stars时,开始发送hellow windows 通过dma完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。