前言:

stm32是嵌入式MCU开发中最多应用的芯片,很早之前我们开发ST芯一般都是标准库开发,标准库简洁好读,现在要配合CubeMX生成代码,所以官方主推HAL库和LL库,但是HAL代码冗杂很绕,因为出来也不久,有些代码使用之后不是那么好用。

这次我就来分享两个实际使用HAL库过程中遇到的两个问题,一个是使用uart的发送中断进行数据发送产生的数组访问越界的问题。一个是stop模式下,dma相关的外设休眠唤醒需要注意缺省化之后,重新初始化。

这篇是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】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

stm32-HAL使用stop模式后DMA初始化的问题相关推荐

  1. 温湿度传感器驱动SHT85 单片机STM32 HAL库

    功能介绍:读取传感器SHT85数据,转换成温度.湿度 .饱和水蒸气含量. 注意事项: SDA脚设置为开漏输出,外部上拉电阻10k.或者设置成推挽,软件切换SDA输入输出. 调试时可适当加长延时时间. ...

  2. STM32 HAL 硬件IIC+DMA+简单图形库控制OLED

    目录 前言 一.建立工程 二.编写和移植 前期准备 驱动部分修改 三.使用和验证 结论 (2022年1月22日重制)本文主要是移植带简单图形库的程序,如果只是实现DMA控制,建议看[0.96寸 OLE ...

  3. STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA

    关于DMA原理部分讲解,及CubeMx配置部分,请参考该文章 [STM32]HAL库 STM32CubeMX教程十一-DMA (串口DMA发送接收) 本篇文章我们仅针对例程进行详解剖析 历程详解 详解 ...

  4. 【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)

    前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1.芯片: STM32F407ZET6/ STM32F103ZET6 ...

  5. 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)

    [STM32]CubeMX+HAL库之 硬件IIC+DMA控制1.3寸OLED 前言 目前网上大多数驱动OLED屏都采用软件IIC,因为HAL库的升级使得硬件IIC的稳定性得到了保障,所以想采用硬件I ...

  6. 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案)

    [STM32笔记]HAL库低功耗模式配置(ADC唤醒无法使用.低功耗模式无法烧录解决方案) [STM32笔记]低功耗模式配置及避坑汇总 一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需 ...

  7. STM32 HAL库 串口DMA接收不定长数据

    STM32 HAL库 串口DMA接收不定长数据 整体思路:我是用的CUBEMX软件生成的工程,使能了两个串口,串口2用来接收不定长的数据,串口1用来发送串口2接收到的数据:串口2我找了一个UBLOX卫 ...

  8. STM32 HAL库 串口DMA(收发)和STM32串口中断接收(接收时间管理机制)+ESP8266 wifi模组通信问题

    一.HAL库 串口 DMA+ESP8266模组通信问题 用STM32 HAL库串口的DMA发送和空闲中断接收处理数据,单片机发送AT指令给ESP8266 wifi模组问题:单片机连续几次给wifi模组 ...

  9. STM32 进入Stop模式后电流还是很大怎么办?

    STM32 进入Stop模式后电流还是很大怎么办? STM32 进入停止模式后电流还是很大,可能椒几百个uA,怎么办? 通常做法有如下几点: MCU外围管脚配置 检查外围有无闭合回路 SWDIO,SW ...

最新文章

  1. spock_将Spock 1.3测试迁移到Spock 2.0
  2. 学习响应式BootStrap来写融职教育网站,Bootsrtap第二天
  3. Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp + 输出方案
  4. 细菌基因组 | rpoB的插入变异导致高度耐药性
  5. spring学习总结——介绍
  6. Python中的numpy.ones()
  7. Linux sys_call_table变动检测
  8. Springboot+JasperReport报表打印
  9. 飞机上一旅客突然收到生日蛋糕,是个小惊喜
  10. iOS 在CollectionView上做展开收起动画
  11. 笔记本新机全新安装XP时遇到问题的解决方案(针对新的Vista机型装xp的解决方案)...
  12. java 解析xml工具类_轻松解析XML的工具类
  13. PS完成淡水彩效果的步骤
  14. P1125 [NOIP2008 提高组] 笨小猴 java
  15. 图解HTTP笔记记录
  16. 麻辣烫有几种类型?不同种麻辣烫怎么做
  17. Linux 权限管理深剖
  18. Ouroboros Snake POJ - 1392(数位哈密顿回路)
  19. 分水岭算法的理解和应用
  20. 印象笔记、为知笔记、有道云笔记使用比较

热门文章

  1. 1、股票交易及量化投资回测分析系统的数据库设计-4
  2. catia曲面扫掠命令详解_扫掠曲面在CATIA曲面造型中的应用
  3. 利用51单片机制作从左至右再从右制作的的流水灯
  4. Oracle分区表技术 (Partitioned Tables)
  5. 每个 Python 开发者必备的5款 VScode 拓展工具包!
  6. 堪培拉地理位置经纬度_全球各大城市的经纬度?,全球各大著名城市的经纬度...
  7. mysql一个月有几个周几_mysql-查询一天,一周,一月,一年,以及mysql的基本日期函数...
  8. 数据库系统概论(基础篇)中国人民大学 第二次考试
  9. 泸州田家炳中学2021高考成绩查询,2021年四川高中排名,高中高考成绩排名一览表...
  10. 百度超级链与重庆市联合打造的电子处方流转平台,并荣获可信区块链高价值案例