之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题。发现我使用库里的延时程序HAL_Delay()时,会卡死在里面。
根据程序,进入到这个延时程序后 ,发现HAL_GetTick()取来的数字一直没有变化,才发现是因为
__weak uint32_t HAL_GetTick(void) { return uwTick; }
程序中的值没有变化,搜uwTick后发现,其值由另一个程序进行处理,
__weak void HAL_IncTick(void) { uwTick++; }
再搜后,竟然没有人调用此程序,所以其应该是因为中断程序没有调用此程序的原因,我找到了stm32f4xx_it.c,
其程序(我是从别的工程中拷贝过来的文件)
void SysTick_Handler(void) { }
竟然空空如也。
在此中加入HAL_IncTick();,并加入库文件#include "stm32f4xx_hal.h"后进行一切正常了。
#include "stm32f4xx_hal.h" void SysTick_Handler(void) { HAL_IncTick(); }
因为是第一次熟悉HAL库,对一些机制不是很清楚。之前一直认为是因为系统时钟设置的问题,没有想到在这个小小的问题上花费了一天的时间。
原文:https://www.cnblogs.com/huachunwei/p/12031326.html