首页 » 互联网 » stm32-HAL运用stop模式后DMA初始化的问题_初始化_外设

stm32-HAL运用stop模式后DMA初始化的问题_初始化_外设

落叶飘零 2024-11-15 00:53:55 0

扫一扫用手机浏览

文章目录 [+]

这次我就来分享两个实际利用HAL库过程中碰着的两个问题,一个是利用uart的发送中断进行数据发送产生的数组访问越界的问题。
一个是stop模式下,dma干系的外设休眠唤醒须要把稳缺省化之后,重新初始化。

这篇是DMA唤醒利用的先容:

stm32-HAL运用stop模式后DMA初始化的问题_初始化_外设 stm32-HAL运用stop模式后DMA初始化的问题_初始化_外设 互联网

作者:良知犹存

stm32-HAL运用stop模式后DMA初始化的问题_初始化_外设 stm32-HAL运用stop模式后DMA初始化的问题_初始化_外设 互联网
(图片来自网络侵删)

转载授权以及围不雅观:欢迎关注微信"大众号:羽林君

或者添加作者个人微信:become_me

前情提要:

单片机的休眠唤醒是我们常常利用的一个功能。

进行HAL库休眠唤醒的时候 我们直策应用函数即可

官方供应的库文件 stm32f4xx_hal_pwr.h 里面有相应的stop sleep standby三种模式选择

我们选择stop 模式

HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

实行大致代码如下:

#include "stdio.h"void SystemInit(void){ RCC_Init(); ADC_DMA_Init(); Usart_DMA_Init();}int main(void){ SystemInit(); HAL_SuspendTick();//停息滴答定时器 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); HAL_ResumeTick(); //规复滴答定时器 SystemInit();}

这个流程是标准库利用的一个标准流程:

系统初始化 ------>系统运行 ------> 某种条件下进入休眠 ------> 唤醒系统 ------> 重新初始化外设 ------> 系统运行

但是在利用HAL库时候创造,DMA干系外设用这种办法进入stop模式后,系统唤醒之后重新初始化全体MCU会涌现DMA利用故障。
对应内存获取的数据位置对不上。

经由一点点测试验证,创造在HAL库中如果要把DMA干系外设进入stop模式唤醒正常事情,须要休眠之前把干系初始化好的DMA外设进行DeInit 缺省化,休眠之后再进行初始化就可以正常事情。

修正建议:

系统初始化 ------>系统运行 ------> 某种条件下(休眠期前缺省化DMA外设)进入休眠 ------> 唤醒系统 ------> 重新初始化外设 ------> 系统运行

#include "stdio.h"extern ADC_HandleTypeDef hadc1;extern DMA_HandleTypeDef hdma_adc1;extern UART_HandleTypeDef huart2;extern DMA_HandleTypeDef hdma_usart2_tx;void SystemInit(void){ RCC_Init(); ADC_DMA_Init(); Usart_DMA_Init();}int main(void){ SystemInit(); HAL_DMA_DeInit(huart2.hdmatx); NVIC_DisableIRQ(DMA1_Stream6_IRQn); HAL_DMA_DeInit(hadc1.DMA_Handle); NVIC_DisableIRQ(DMA2_Stream0_IRQn); HAL_SuspendTick();//停息滴答定时器 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); HAL_ResumeTick(); //规复滴答定时器 SystemInit();}

最后代码可以正常的利用。

结语

这便是我分享的项目中碰着一个stm32 HAL库休眠唤醒DMA外设的问题,如果大家有更好的想法和需求,也欢迎大家加我好友互换分享哈。

作者:良知犹存,白天努力事情,晚上原创公号号主。
"大众号内容除了技能还有些人生感悟,一个负责输出内容的职场老司机,也是一个技能之外丰富生活的人,拍照、音乐 and 篮球。
关注我,与我一起同行。

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推举阅读

【1】C++的智能指针你理解吗?

【2】嵌入式底层开拓的软件框架简述

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之大略工厂模式、工厂模式、抽象工厂模式的比拟

本"大众号全部原创干货已整理成一个目录,回答[ 资源 ]即可得到。

标签:

相关文章

C语言编程中的常见错误及其防范措施

在C语言编程领域,错误是不可避免的。无论是初学者还是资深程序员,都可能在编写代码的过程中遇到各种错误。本文将针对C语言编程中常见的...

互联网 2025-01-05 阅读0 评论0

C语言编程中的替换字方法与应用

在C语言编程中,替换字是一种常见的处理字符串的方法。它可以将字符串中的某个字符或字符串替换成另一个字符或字符串。替换字在处理文本数...

互联网 2025-01-05 阅读0 评论0