stm32 hal库 DMA操作GPIO使用记录

DMA操作GPIO

1: 创建DMA通道 MemToMem模式
2:由于GPIO控制器是16位 所以选择word(字)传输
3:如果cubeMax可以取消Use FiFO 就取消,取消不了在代码屏蔽
4: 一定要在NVIC找到DMA通道 打开中断

打开中断与不打开中断

uint32_t buf[2] = {0x00000002, 0x00020000};
1:打开中断
    HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream0, (uint32_t)buf,(uint32_t)(&GPIOD->BSRR),1);
	HAL_Delay(500);
	HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream0, (uint32_t)&buf[1],(uint32_t)(&GPIOD->BSRR),1);
	HAL_Delay(500);
    直接就可以操作,不会有不复制的情况,但会造成中断过多
2:不打开中断
    HAL_DMA_Start(&hdma_memtomem_dma2_stream0, (uint32_t)buf,(uint32_t)(&GPIOD->BSRR),1);
	HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream0,HAL_DMA_HALF_TRANSFER, 2);
	HAL_Delay(500);
	HAL_DMA_Start(&hdma_memtomem_dma2_stream0, (uint32_t)&buf[1],(uint32_t)(&GPIOD->BSRR),1);
	HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream0,HAL_DMA_HALF_TRANSFER, 2);
	HAL_Delay(500);
    这样有问题 只能执行第一次,后面的都不在执行
    把PollForTransfer屏蔽掉
    用HAL_DMA_Abort(&hdma_memtomem_dma2_stream0)替换就可以传输;
    主要是清除标志
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周振全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值