看门狗移植问题,调用GetLSIFrequency()函数进入死循环

2019-07-20 09:39发布

最近遇到了一个看门狗移植问题。在运算    IwdgHandle.Init.Reload    = uwLsiFreq / 128  这个式子时,uwLsiFreq是通过GetLSIFrequency()函数(获取低速内部时钟频率)获取的,而GetLSIFrequency()中会判断uwMeasurementDone这个变量是否为0,为0的话就会进入死循环。将uwMeasurementDone变量置1是在HAL_TIM_IC_CaptureCallback()函数中。调用这个函数需要等到TIM5捕获到两个LSI边沿才会触发中断的时候。现在是一直都在这行代码里等待。原先移植看门狗的时候是成功的,没有出现这个问题。其实可以不用调用这个函数,直接给uwLsiFreq赋值,例如我的LSI频率是35720,我可以直接让uwLsiFreq等于35720,这样就可以正常运行了。原子哥的程序也是直接跳过这个函数。考虑到这个是动态的获取LSI的频率,在不同的平台中,硬件是不一样的,所以发了这个帖子。希望有高人指点,谢谢。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。