为什么STM32F4中的此MX_RTC_INIT()函数使程序卡住了?
将此函数放入main.c时,程序会被卡住,无法转到下一个语句。我尝试在每个printf(“ error!”)
之前添加 error_handler(); ,但在USART端口中没有任何内容。
如果将其删除,则整个程序可以工作。
MDK-ARM编辑的程序适用于STM32F401RCT6。
这是函数,由STM32Cubemx生成。
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};
/** Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN Check_RTC_BKUP */
if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR0)!=0X5050)
{
/* USER CODE END Check_RTC_BKUP */
/** Initialize RTC and set the Time and Date
*/
sTime.Hours = 9;
sTime.Minutes = 40;
sTime.Seconds = 0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
{
Error_Handler();
}
sDate.WeekDay = RTC_WEEKDAY_THURSDAY ;
sDate.Month = RTC_MONTH_MARCH ;
sDate.Date = 24;
sDate.Year = 22;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN RTC_Init 2 */
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0X5050);
}
/* USER CODE END RTC_Init 2 */
}
这是main.c中的内容
。C_RTC_INIT(),程序可以正常运行
#include "main.h"
#include "usart.h"
#include "gpio.h"
#include "rtc.h"
void SystemClock_Config(void);
int main(void)
{
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
SystemClock_Config();
delay_init();
MX_GPIO_Init();
// MX_RTC_Init();//when add this function,the program get stuck
MX_USART1_UART_Init();
while (1)
{...}
When place this function in main.c,the program get stuck,can't go to the next statement.I tried to add printf("error!")
before eachError_Handler();
,But nothing appearred in USART ports.
If it is removed,the whole program could work.
The program edited in MDK-ARM is for STM32F401RCT6 .
Here is the function,It's generated by STM32CubeMX.
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};
/** Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN Check_RTC_BKUP */
if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR0)!=0X5050)
{
/* USER CODE END Check_RTC_BKUP */
/** Initialize RTC and set the Time and Date
*/
sTime.Hours = 9;
sTime.Minutes = 40;
sTime.Seconds = 0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
{
Error_Handler();
}
sDate.WeekDay = RTC_WEEKDAY_THURSDAY ;
sDate.Month = RTC_MONTH_MARCH ;
sDate.Date = 24;
sDate.Year = 22;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN RTC_Init 2 */
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0X5050);
}
/* USER CODE END RTC_Init 2 */
}
here are the contents in main.c
without MX_RTC_Init(),the program could run normally
#include "main.h"
#include "usart.h"
#include "gpio.h"
#include "rtc.h"
void SystemClock_Config(void);
int main(void)
{
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
SystemClock_Config();
delay_init();
MX_GPIO_Init();
// MX_RTC_Init();//when add this function,the program get stuck
MX_USART1_UART_Init();
while (1)
{...}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论