Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
PM电源管理
PM组件某些模式不可用??
发布于 2019-11-06 17:42:37 浏览:2843
订阅该版
* 本帖最后由 bevis 于 2019-11-6 18:10 编辑 * 调PM组件已经有一段时间了,发现一些问题。硬件平台:STM32L476 1. drv_pm.c驱动运行模式在低频切换到高频等级时,有很大概率死机(shell无法输入输出) 触发方式80 -> 24 -> 2Mhz, 然后从低到高切,3轮内shell必卡死。 翻看ST官方低功耗例程也没看出什么问题**已排除因为低等级功耗模式占用导致高等级模式无法申请的情况****还有个问题,因为我用SIM7600模块,模块在收到网络下行可以给MCU输出信号唤醒,MCU唤醒是成功了,但是丢失第一包串口数据,必须要点第二次下行请求才可以收到。 **``` ```2. drv_pm.c驱动休眠模式切换中PM_SLEEP_MODE_STANDBY运行不正常。 PM_SLEEP_MODE_DEEP带RTC休眠 这个功能正常,外部中断可唤醒(运行后明显降低15ma) 但是PM_SLEEP_MODE_STANDBY,功耗不降反增10ma, 而且外部中断无法唤醒。 **以下是drv_pm.c代码** ```static void sleep(struct rt_pm *pm, uint8_t mode) { switch (mode) { case PM_SLEEP_MODE_NONE: break; case PM_SLEEP_MODE_IDLE: // __WFI(); break; case PM_SLEEP_MODE_LIGHT: if (pm->run_mode == PM_RUN_MODE_LOW_SPEED) { /* Enter LP SLEEP Mode, Enable low-power regulator */ HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI); } else { /* Enter SLEEP Mode, Main regulator is ON */ HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); } break; case PM_SLEEP_MODE_DEEP: /* Enter STOP 2 mode */ HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); /* Re-configure the system clock */ SystemClock_ReConfig(pm->run_mode); break; case PM_SLEEP_MODE_STANDBY: /* Enter STANDBY mode */ HAL_PWR_EnterSTANDBYMode(); break; case PM_SLEEP_MODE_SHUTDOWN: /* Enter SHUTDOWNN mode */ HAL_PWREx_EnterSHUTDOWNMode(); break; default: RT_ASSERT(0); break; } }``` ```static void run(struct rt_pm *pm, uint8_t mode) { static uint8_t last_mode; static char *run_str[] = PM_RUN_MODE_NAMES; if (mode == last_mode) return; last_mode = mode; /* 1. 设置 MSI 作为 SYSCLK 时钟源,以修改 PLL */ SystemClock_MSI_ON(); /* 2. 根据RUN模式切换时钟频率(HSI) */ switch (mode) { case PM_RUN_MODE_HIGH_SPEED: case PM_RUN_MODE_NORMAL_SPEED: SystemClock_80M(); /* Configure the main internal regulator output voltage (Range1 by default)*/ HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1); break; case PM_RUN_MODE_MEDIUM_SPEED: SystemClock_24M(); /* Configure the main internal regulator output voltage */ HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE2); break; case PM_RUN_MODE_LOW_SPEED: SystemClock_2M(); /* Enter LP RUN mode */ HAL_PWREx_EnableLowPowerRunMode(); break; default: break; } /* 3. 关闭 MSI 时钟 */ // SystemClock_MSI_OFF(); /* 4. 更新外设时钟 */ uart_console_reconfig(); /* Re-Configure the Systick time */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / RT_TICK_PER_SECOND); /* Re-Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); rt_kprintf("switch to %s mode, frequency = %d MHz
", run_str[mode], run_speed[mode][0]); }```
查看更多
8
个回答
默认排序
按发布时间排序
bevis
2019-11-07
这家伙很懒,什么也没写!
PM组件又研究了2天,折腾了好多种配置组合方式。结果发现把SystemClock_ReConfig里面的SystemClock_MSI_ON屏蔽掉后,4G模块的空中唤醒L476就不会影响到AT串口的数据接收了。但是测试了几组后发现又不行了(我系统休眠策略是是前40秒休眠4G模块,再过40秒进入STOP2模式),第1第2组还行,从第三组开始,AT串口又收不到数据了(已排除AT组件问题)。 因为我司上一代产品用的是UCOSF103做的,也是使用停止模式休眠,唤醒后直接重新设置系统时钟就好了,4G模块空中唤醒从未影响过串口数据。参考L4的PWR电源管理例程,里面使用的MSI作为主时钟,drv_pm的驱动看起来也没什么问题,board.c里面SystemClock_Config与cubeMX开启的外设时钟有关,因为先前的经验,停止模式后要恢复时钟,我尝试把SystemClock_80M改成与SystemClock_Config一样(毕竟默认都是80Mhz),或者使用原版的SystemClock_80M(里面只单一的恢复HSI时钟,其他外设时钟并没有开启),以上都失败了。 pm组件的细节总结: 1. SystemClock_ReConfig 里面的 SystemClock_MSI_ON感觉至关重要,奇怪的是,这个时钟只有开,却没有关。若我把它屏蔽,我起码可以成功唤醒并接受AT串口数据2-3次,如果不屏蔽,空中唤醒那就一次都收不到了,不过主动式唤醒却不受影响(使用API释放当前等级,并且申请新的功耗模式)完成一些列动作后再发送上行数据OK。 2. 如果我把 SystemClock_ReConfig 里面的 SystemClock_MSI_ON屏蔽掉,就算我从停止模式唤醒后,把所有系统时钟和外设时钟再开一次,我的系统定时器定时都会乱掉,例如8分钟变成2分钟。如果不屏蔽,空中唤醒就会丢失AT串口,但是不影响定时我本地主动唤醒发送上行数据。 3. 系统初始化的SystemClock_Config 和运行模式切换需要做电压配置,休眠停止模式外部中断唤醒后的重设系统时钟不需要做电压配置(不知道对否)
chzfmx
2019-11-08
这家伙很懒,什么也没写!
RT-Thread版本:v3.1.3 单片机:新唐的M0系列 测试了下频率切换,没出现死机
bevis
2019-11-08
这家伙很懒,什么也没写!
>RT-Thread版本:v3.1.3 单片机:新唐的M0系列 >测试了下频率切换,没出现死机 --- 你试试多开一点外设看看,把全部串口,ADC,定时器等时钟开启。之前我也试过用开发板标准配置下跑标准bsp示例也没有发现问题。尽管如此,我把我开启的外设时钟加上也不行
shao7936626
2019-11-27
这家伙很懒,什么也没写!
我现在遇到了和你一样的情况,也是卡死在SystemClock_MSI_ON()函数,但是很奇怪的是单步的时候,能够单步过去,直接运行的话,会卡住,我还在研究
bevis
2019-11-27
这家伙很懒,什么也没写!
>我现在遇到了和你一样的情况,也是卡死在SystemClock_MSI_ON()函数,但是很奇怪的是单步的时候,能够单步过 ... --- 我项目已经停了,在忙别的事情了,加油。
shao7936626
2019-11-28
这家伙很懒,什么也没写!
>我项目已经停了,在忙别的事情了,加油。 --- 我在github上回复你了,我暂时就那样子,线演示一下给别人看的,现在遇到另外一个奇怪的问题,就是运行在2m的时候,串口1 finsh打印什么都没问题,但是串口2 发送数据的时候 就有问题了,发出来的数据都不对
zhf
2019-11-29
这家伙很懒,什么也没写!
stm32的pm有频率切换功能吗
bevis
2019-11-29
这家伙很懒,什么也没写!
>stm32的pm有频率切换功能吗 --- 这是看STM32系列来说的,像F1就没有,L4有
撰写答案
登录
注册新账号
关注者
1
被浏览
2.8k
关于作者
bevis
这家伙很懒,什么也没写!
提问
79
回答
266
被采纳
0
关注TA
发私信
相关问题
1
STM32F103的低功耗
2
最近用rtthread系统下AD采样并低功耗,中断响应不及时
3
rt-thread低功耗休眠应用问题请教
4
关于RTT对低功耗的支持
5
RT-Thread怎么休眠实现低功耗。
6
RT-Thread V3.0支持的低功耗,OS会自行进入吗?
7
关于RTThread3.0低功耗休眠模式
8
RTT3.0的bsp包中哪些MCU自带低功耗定时器?
9
关于低功耗上次说针对L4出个BSP的,怎么迟迟不见呀
10
低功耗问题。
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
15
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部