(坑1#)STM32CUBEMX生成含有RTC .c/.h文件对的工程模板,编译出错。
错误提示:
../Src/rtc.c(100): warning: #223-D: function "LL_PWR_EnableBkUpAccess" declared implicitly
LL_PWR_EnableBkUpAccess();
../Src/rtc.c(102): warning: #223-D: function "LL_APB1_GRP1_EnableClock" declared implicitly
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_BKP);
../Src/rtc.c(102): error: #20: identifier "LL_APB1_GRP1_PERIPH_BKP" is undefined
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_BKP);
../Src/rtc.c: 2 warnings, 1 error
错误代码段:
void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
{
if(rtcHandle->Instance==RTC)
{
/* USER CODE BEGIN RTC_MspInit 0 */
/* USER CODE END RTC_MspInit 0 */
LL_PWR_EnableBkUpAccess();
/* Enable BKP CLK enable for backup registers */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_BKP);
/* RTC clock enable */
__HAL_RCC_RTC_ENABLE();
/* USER CODE BEGIN RTC_MspInit 1 */
/* USER CODE END RTC_MspInit 1 */
}
}
错误原因:
这是STM32CUBEMX在生成含有 .c/.h文件对的模板时引用代码错误造成的。如不选择生成.c/.h文件对的话则编译正常。
解决办法:
手动修正代码
void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
{
if(hrtc->Instance==RTC)
{
/* USER CODE BEGIN RTC_MspInit 0 */
/* USER CODE END RTC_MspInit 0 */
HAL_PWR_EnableBkUpAccess();
/* Enable BKP CLK enable for backup registers */
__HAL_RCC_BKP_CLK_ENABLE();
/* Peripheral clock enable */
__HAL_RCC_RTC_ENABLE();
/* USER CODE BEGIN RTC_MspInit 1 */
/* USER CODE END RTC_MspInit 1 */
}
}
注:模板更新后每次都要手动修改。官方已收到BUG报告,正在处理中。