stm32cubemx配置dma串口通信

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

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完成。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值