問題描述
看到部分同學已經開始使用RT-Thread 的PM框架了,當然也反映了一些問題。
使用RT-Thread Studio 生成的基于STM32L4 的工程,發現開啟PM框架后,lptimer不能工作。
最明顯的現象是:進入深睡眠后,定時、延時事件不可以用。
這里對這個問題進行分析與提出解決方法
調試步驟:
一、基于Keil MDK pandora的工程,開啟PM后,LPTimer在深睡眠下工作正常。
二、基于RT-Thread Studio生成的工程,LPTimer確實不能工作。排除不是硬件問題。
三、對比工程代碼,LPTimer初始化,完全一致,pm_drv.c pm.c 等完全一致,依舊無法解決問題。
四、工程board.c 對比,發現時鐘配置一致。
以上步驟,未能確認問題的所在。
開始懷疑:
一、BSP 驅動包不一致,對比uart等,發現確實有點不同,但不是根本原因(與LPTimer無關)。
二、開啟調試,發現LPTimer中斷無法觸發。
三、查看時鐘寄存器,發現問題:LPTimer的時鐘,未使能。
四、回顧發現,RT-Thread Studio生成的工程,不提供STM32 底層驅動初始化文件。
stm32l4xx_hal_msp.c,這個是板級的時鐘外設初始化文件,里面有一條開啟LPTimer時鐘的操作,初始LPTimer時,會打開LPTimer時鐘,而工程drv_lptimer.c里,就沒再打開LPTimer時鐘。
/**
@brief LPTIM MSP Initialization
This function configures the hardware resources used in this example
@param hlptim: LPTIM handle pointer
@retval None
*/
void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef* hlptim)
{
if(hlptim->Instance==LPTIM1)
{
/* USER CODE BEGIN LPTIM1_MspInit 0 */
/* USER CODE END LPTIM1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_LPTIM1_CLK_ENABLE();
/* USER CODE BEGIN LPTIM1_MspInit 1 */
/* USER CODE END LPTIM1_MspInit 1 */
}
}
解決方法:初始化LPTimer時,不要忘記打開LPTimer時鐘。
問題得到解決
總結:
基于RT-Thread Studio生成的工程,默認【不包含】板級初始化文件:stm32l4xx_hal_msp.c,這個用戶要根據自己的硬件板,自己實現。
使用時,可以通過:STM32CubeMX 生成,或手動根據自己的外設,處理好外設、時鐘、引腳等初始化工作。
-
UART接口
+關注
關注
0文章
124瀏覽量
15288 -
RT-Thread
+關注
關注
31文章
1285瀏覽量
40085 -
時鐘寄存器
+關注
關注
0文章
2瀏覽量
4954 -
STM32L4
+關注
關注
1文章
42瀏覽量
9408 -
stm32cubemx
+關注
關注
5文章
283瀏覽量
14791
發布評論請先 登錄
相關推薦
評論