Mục tiêu

  • Cấu hình RTC với interrupt trong CubeMX
  • Tạo RTC project đơn giản với báo thức theo thời gian định sẵn

Kết quả

  • Sử dụng CubeIDE để sinh code RTC
  • Cấu hình RTC với HAL
  • Kiểm tra lại các chức năng của RTC alarm interrupt

Cấu hình

Tạo project

  • Cách làm tương tự như bài hướng dẫn trước File > New > STM32 Project
  • Set Internal Alarm trên Alarm A hoặc Alarm B
  • Set GPIO chớp LED như là tín hiệu thông báo alarm

Cấu hình clock

  • Set clock với tần số tối đa, giống như bài trước

Cấu hình RTC

  • RTC > Configuration > Parameter Setting, nhập thông số tùy vào ý thích của bạn
  • RTC > Configuration > NVIC Setting > Enable RTC alarm A and B interrupt

Save lại và auto generate code thôi

Workflow

RTC có thể được giữ nguyên trong quá trình RESET (chế độ LP ok)

  • Mặc định RTC không được enable
  • Ta cần thêm HAL_PWR_EnableBkUpAccess()__HAL_RCC_RTC_ENABLE() before we trước khi init MX_RTC_Init()

Cấu hình alarm đầu tiên là 1s trong MX_RTC_Init

Tạo RTC interrupt handler và we cấu hình lại Alarm A time với các hàm sau

  • HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef hrtc)
  • HAL_RTC_GetAlarm(RTC_HandleTypeDef hrtc, RTC_AlarmTypeDefsAlarm, uint32_t Alarm, uint32_t Format)
  • HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef hrtc, RTC_AlarmTypeDef*sAlarm, uint32_t Format)

RTC alarm thông báo thành công bởi LED

  • HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
  /* USER CODE BEGIN SysInit */
  HAL_PWR_EnableBkUpAccess();//enable PWR backup domain access (RTC,BKReg)
  __HAL_RCC_RTC_ENABLE();//Enable RTC. not created by cube because the RTC can run.
  /* USER CODE END SysInit */
  /* USER CODE BEGIN 4 */
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
  RTC_AlarmTypeDef sAlarm;
  HAL_RTC_GetAlarm(hrtc, &sAlarm, RTC_ALARM_A, FORMAT_BIN);
  if (sAlarm.AlarmTime.Seconds > 58)
  {
    sAlarm.AlarmTime.Seconds = 0;
  }
  else
  {
    sAlarm.AlarmTime.Seconds = sAlarm.AlarmTime.Seconds + 1;
  }
  while (HAL_RTC_SetAlarm_IT(hrtc, &sAlarm, FORMAT_BIN) != HAL_OK)
  {
  }
  HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);
}
/* USER CODE END 4 */

Chương trình bạn có thể tham khảo tại

GitHub - hocarm/STM32F4-Discovery-Tutorial at stm32cubeide_f4
Các ví dụ lập trình STM32F4 Discovery dùng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.