为什么STM32F4中的此MX_RTC_INIT()函数使程序卡住了?

发布于 2025-01-27 09:14:17 字数 1941 浏览 5 评论 0原文

将此函数放入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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文