OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6411|回复: 4

FreeRTOS 使用STOP模式低功耗,STM32F103 卡死问题

[复制链接]

13

主题

35

帖子

0

精华

高级会员

Rank: 4

积分
835
金钱
835
注册时间
2020-3-23
在线时间
142 小时
发表于 2020-9-22 11:45:24 | 显示全部楼层 |阅读模式
1金钱
FreeRTOS 使用STOP模式低功耗,STM32F103 卡死问题。请帮忙提示如何在FreeRTOS 下使用STOP低功耗模式。

最佳答案

查看完整内容[请看2#楼]

进入stop模式前要关闭中断 SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; EnterStopMode(); .... 唤醒后再初始化系统时钟和打开中断 RCC_HSEConfig(RCC_HSE_ON); ... SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

82

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3158
金钱
3158
注册时间
2017-7-10
在线时间
361 小时
发表于 2020-9-22 11:45:25 | 显示全部楼层
进入stop模式前要关闭中断
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  
EnterStopMode();       
....
唤醒后再初始化系统时钟和打开中断
RCC_HSEConfig(RCC_HSE_ON);
...
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14286
金钱
14286
注册时间
2018-8-3
在线时间
1147 小时
发表于 2020-9-22 12:09:07 | 显示全部楼层
我在FReertos 试过用待机唤醒模式注意点应该差不多的  就是非任务的函数   不要调用OS的延时 会切换任务导致运行卡死的    用那种阻塞式的 延时  简单的自己写一个递减延时
回复

使用道具 举报

13

主题

35

帖子

0

精华

高级会员

Rank: 4

积分
835
金钱
835
注册时间
2020-3-23
在线时间
142 小时
 楼主| 发表于 2020-9-22 14:10:19 | 显示全部楼层
翼行园子 发表于 2020-9-22 12:09
我在FReertos 试过用待机唤醒模式注意点应该差不多的  就是非任务的函数   不要调用OS的延时 会切换任务导 ...

从中断中唤醒后,切换任务会卡住
回复

使用道具 举报

41

主题

276

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2354
金钱
2354
注册时间
2019-10-29
在线时间
380 小时
发表于 2022-3-22 17:20:40 | 显示全部楼层
本帖最后由 chenyuan 于 2022-3-22 17:23 编辑

你好 关于进入stop时,我按照二楼说的,进入在唤醒,还是不能正常跑起来任务,进入stop模式的相关操作,我放在空闲任务中了;请问大哥你是如何实现的??  联系方式:QQ:1364465583  谢谢啦

  1. void MCU_stop_FUNC(void)
  2. {
  3.   if(stop_cnt>4){//在RTC中断中 5s累加一次
  4.       stop_cnt=0;
  5.       
  6.       HAL_GPIO_TogglePin(CH5_GPIO_Port,CH5_Pin);
  7.       HAL_GPIO_TogglePin(CH5_GPIO_Port,CH5_Pin);
  8.       HAL_ADC_Stop_DMA(&hadc);
  9.       rf_sleep();//rf睡眠
  10.    
  11. //    vTaskSuspend(rfTaskHandle);
  12. //    vTaskSuspend(otherTaskHandle);

  13.        HAL_GPIO_WritePin(LED_RED_GPIO_Port,LED_RED_Pin,GPIO_PIN_SET);
  14.        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_SET);
  15.        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port,LED_BLUE_Pin,GPIO_PIN_SET);
  16.        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  
  17.       HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI ); //进入stop
  18.       
  19.       HAL_GPIO_TogglePin(CH5_GPIO_Port,CH5_Pin);
  20.       HAL_GPIO_TogglePin(CH5_GPIO_Port,CH5_Pin);
  21.       SystemClock_Config();//系统时候重新初始化
  22.       HAL_ADC_Start_DMA(&hadc, (uint32_t*)adcBuf, 2);
  23.       rf_out_of_sleep();//唤醒RF芯片
  24.       HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_RESET);  
  25.       SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
  26. //vTaskResume(rfTaskHandle);
  27. //vTaskResume(otherTaskHandle);
  28. //osKernelStart();//开启任务调度

  29.     }
  30. }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 18:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表