你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32L431的睡眠模式经验分享

[复制链接]
攻城狮Melo 发布时间:2023-3-21 18:07
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

提示:以下是本篇文章正文内容,下面案例可供参考

一、参考STM32L431中文手册

f7e2c00394d2429a98e45dd808e01470.png

如上图所示,你要想完成立即睡眠模式,你必须进入模式的两种情况来考虑。在考虑的过程中,尤其要注意没有中断挂起这句话(我是选择WFI,所以没考虑WFE)。
这句话的意思是睡眠前最好关了除唤醒外的中断,不然你会发现还没睡呢,就唤醒。这里一定要注意一个中断–Systick。我被这个东西坑了好久。其它中断,你们自行屏蔽,不要把唤醒的屏蔽了。

二、代码展示
1.主函数

代码如下(示例):
  1. -------------------主函数---------------------------
  2. int main(void)
  3. {
  4.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  5.   HAL_Init();
  6.   SystemClock_Config();
  7.   /* Initialize all configured peripherals */
  8.   MX_GPIO_Init();
  9.   /* USER CODE BEGIN WHILE */
  10. HAL_SuspendTick(); //屏蔽tick中断,即系统时钟中断。
  11.   while (1)
  12.   {
  13.         HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); //先把灯关了
  14.         if(HAL_GPIO_ReadPin(GPIOB,KEY2_Pin)== GPIO_PIN_RESET)        //判断是否进入立即睡眠
  15.         {
  16.                 HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);//睡起来
  17.         }
  18.   }
  19. }

复制代码

2.唤醒中断回执函数

  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//外部中断回调函数
  2. {
  3.        
  4.          if(GPIO_Pin==KEY1_Pin)//检测是否为外部中断2
  5.         {
  6.                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); //睡醒了点个灯
  7.         }
  8. }
复制代码

总结
我用电源测试,不睡眠15mA,睡眠后是9mA。没用达到手册记载,可能是因为我其它东西还没有配完。可以先看看。有问题留言。
核心代码就那几句(睡眠,屏蔽中断),后续,我会把这个CPU的其它睡眠模式全部做出来,喜欢就点个赞吧。
————————————————
版权声明:笨熊笨笨笨
如有侵权请联系删除
如有侵权请联系删除




收藏 评论0 发布时间:2023-3-21 18:07

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版