wordpress 近期文章,seo排名优化推广,好看到让人久久不忘的电影,织梦网站迁移【蓝桥杯嵌入式】串口通信与RTC时钟 串口通信cubemx配置串口通信程序设计 RTC时钟cubemx配置程序设计 串口通信
cubemx配置
打开串口通信#xff0c;并配置波特率为9600 打开串口中断 重定义串口接收与发送引脚#xff0c;默认是PC4#xff0c;PC5#xff0c;需要改为P… 【蓝桥杯嵌入式】串口通信与RTC时钟 串口通信cubemx配置串口通信程序设计 RTC时钟cubemx配置程序设计 串口通信
cubemx配置
打开串口通信并配置波特率为9600 打开串口中断 重定义串口接收与发送引脚默认是PC4PC5需要改为PA9与PA10
串口通信程序设计
串口变量
uchar dat; //串口接收的一个字符
char rx_buf[20]; //存放串口接收的字符串buf
uchar rx_idx; //串口接收的下标索引
char send_buf[20]; //串口发送数据bufmain.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周期为200msif(uwTick - lcd_tick 200)return;lcd_tick uwTick;if(ui 0) //第三个界面显示的内容{sprintf(text, Title3 );LCD_DisplayStringLine(Line1, (unsigned char *)text); /****************************RTC实时时钟数据**************************/sprintf(text, date:20%02d-%02d-%02d,date.Year,date.Month,date.Date);LCD_DisplayStringLine(Line3, (unsigned char *)text);sprintf(text, time:%02d:%02d:%02d,time.Hours,time.Minutes,time.Seconds);LCD_DisplayStringLine(Line4, (unsigned char *)text); }
}