- int fputc(int ch, FILE *f) {
- HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
- return ch;
- }
还有一个地方不要忘记,必须把下面这里勾上,
最后就是测试RTC了
HAL初始化时,已经帮我们都初始化了,只要调用就可以了
RTC 时间和日期数据保存在 RTC_TimeTypeDef 和 RTC_DateTypeDef 结构体中。在需要读取的函数或主程序中定义这些结构体:
- RTC_TimeTypeDef sTime;
- RTC_DateTypeDef sDate;
使用 HAL_RTC_GetTime 和 HAL_RTC_GetDate 函数来读取时间和日期。
- HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); // 获取时间
- HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN); // 获取日期
读取的时间和日期数据保存在 sTime 和 sDate 结构体的成员中,
- uint8_t hours = sTime.Hours;
- uint8_t minutes = sTime.Minutes;
- uint8_t seconds = sTime.Seconds;
- uint8_t day = sDate.Date;
- uint8_t month = sDate.Month;
- uint8_t year = sDate.Year;
最后全部代码如下
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- RTC_TimeTypeDef sTime;
- RTC_DateTypeDef sDate;
- uint8_t hours = sTime.Hours;
- uint8_t minutes = sTime.Minutes;
- uint8_t seconds = sTime.Seconds;
- uint8_t day = sDate.Date;
- uint8_t month = sDate.Month;
- uint8_t year = sDate.Year;
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* Configure the peripherals common clocks */
- PeriphCommonClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_USART1_UART_Init();
- MX_RTC_Init();
- /* USER CODE BEGIN 2 */
- OLED_Init();
- OLED_Clear();
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- printf("starting");
- OLED_ShowChinese(18,0,0,16,1);//
- OLED_ShowChinese(38,0,1,16,1);//
- OLED_ShowChinese(54,0,2,16,1);//
- OLED_ShowChinese(72,0,3,16,1);//
- OLED_ShowChinese(88,0,4,16,1);//
- OLED_ShowString(8,16,(uint8_t *)"ZHONGJINGYUAN",16,1);
- // 获取时间和日期
- HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
- HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
-
- sprintf(disbuf,"Time: %02d:%02d:%02d\n", sTime.Hours, sTime.Minutes, sTime.Seconds);
- OLED_ShowString(8,32,(uint8_t *)disbuf,16,1);
-
- sprintf(disbuf,"Date:20%02d-%02d-%02d\n",sDate.Year,sDate.Month, sDate.Date);
- OLED_ShowString(8,48,(uint8_t *)disbuf,16,1);
- OLED_Refresh();
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_4);
- HAL_Delay(100);
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
以上就是对IIC,RTC,还有UART的测试。