【蓝桥杯嵌入式】串口通信与RTC时钟

慈云数据 1年前 (2024-04-23) 技术支持 106 0

【蓝桥杯嵌入式】串口通信与RTC时钟

  • 串口通信
    • cubemx配置
    • 串口通信程序设计
    • RTC时钟
      • cubemx配置
      • 程序设计

        串口通信

        cubemx配置

        打开串口通信,并配置波特率为9600

        打开串口中断

        重定义串口接收与发送引脚,默认是PC4,PC5,需要改为PA9与PA10

        串口通信程序设计

        串口变量

        uchar dat;			//串口接收的一个字符
        char rx_buf[20];	//存放串口接收的字符串buf
        uchar rx_idx;		//串口接收的下标索引
        char send_buf[20];	//串口发送数据buf
        

        main.c中 初始化串口接收中断

        HAL_UART_Receive_IT(&huart1,&dat,1);
        

        串口中断服务函数的声明

        void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
        

          该函数具体形式也不用记忆,在usart.c下面的stm32g4xx_hal_uart.h最后的倒数第三板块的第五个函数,该函数也是个若定义函数,在user.c中重新定义改写,用于接收串口数据即可

        串口中断服务函数的重定义

        void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
        {
        	rx_buf[rx_idx++] = dat;
        	HAL_UART_Receive_IT(&huart1,&dat,1);
        }
        

        串口进程业务逻辑函数的调用

        if(rx_idx > 0)
        {
        	uchar temp = rx_idx;
        	HAL_Delay(1);
        	if(temp == rx_idx)
        		uart_process();
        }
        

        串口进程业务逻辑函数的定义

        void uart_process(void)
        {
        	if(rx_idx > 0)
        	{
        		//将收到的数据发送给串口 保证发送接收的完整性
        		sprintf(send_buf,"%s\r\n",rx_buf);
        		HAL_UART_Transmit(&huart1,(uchar *)send_buf,strlen(send_buf),50);
        		/*************串口接收业务逻辑程序***********/
        		
        		
        		//清空数据
        		rx_idx = 0;
        		memset(rx_buf,0,20);
        	}
        }
        

        RTC时钟

        cubemx配置

        程序设计

        定义时间和日期结构体全局变量

        //定义时间和日期结构体变量
        RTC_TimeTypeDef time;
        RTC_DateTypeDef date;
        

        获取日期与时间,日期与时间必须同时获取,否则会卡死

        void rtc_process(void)
        {
        	HAL_RTC_GetDate(&hrtc,&date,RTC_FORMAT_BIN);
        	HAL_RTC_GetTime(&hrtc,&time,RTC_FORMAT_BIN);
        }
        

        LCD显示日期与时间

        u32 lcd_tick = 0;
        void lcd_process(void)
        {
        	//lcd周期为200ms
        	if(uwTick - lcd_tick 
                        
                        
                        
微信扫一扫加客服

微信扫一扫加客服