大家好,你们好吗?昨天我无法让 RTC 在我的
STM32F103C6 上工作,奇迹般地我注意到程序给出了一个错误条件(直到那一刻我没有使用错误处理函数,现在我正在使用它)然后我发现错误是HAL_RTC_Init()使用的函数
HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk)返回零,因为 RTC 的频率随后产生结果或初始化 RTC 时出错。
返回频率的 HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) 行是 584 ant 代码如下
发生分配的 HAL_RTC_Init() 行是 364,代码如下
- prescaler = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_RTC);
为了解决这个问题,我不得不将 HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) 的第 584 行更改为以下内容
- return (uint32_t) frequency;
现在定义:
stm32f1xx_hal_rcc_ex.c 387行获取频率的函数定义为
- uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk)
同一个文件的第403行中“frequency”变量的定义是
- uint32_t temp_reg = 0U, frequency = 0U;
而stm32f1xx_hal_rtc.c的第277行中“prescaler”变量的定义是
如您所见,所有都定义为 uint32_t 所以我最初假设截断数据一定没有问题,然后发生了什么?最初代码试图通过
返回(频率)或是不是发生了另一件我不明白的事情?请有人可以向我澄清这一点。
我的代码中存在另一个错误,如下所示:
- 每次我初始化 I2C 外设(mi 代码中需要的功能)时,如果在我的程序的任何部分有 HAL_Delay() 调用,那么程序似乎会在代码到达任何外设初始化调用时立即重置(就像疯狂一样听起来它正在发生),我还没有找到原因。
- 每次启用警报中断(我的代码中需要的另一个功能)或 RTC 的第二个中断时,RTC 就不算数,它只是永远保持相同的小时、分钟和秒。
所有这一切都发生在 HAL 库中,因此,ST 人员是否对这些库提供任何形式的支持,我们可以在哪里向 ST 报告错误?
先谢谢您的帮助。