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

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

串口通信

cubemx配置

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

打开串口中断

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

串口通信程序设计

串口变量

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

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

cpp 复制代码
HAL_UART_Receive_IT(&huart1,&dat,1);

串口中断服务函数的声明

cpp 复制代码
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

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

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

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

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

cpp 复制代码
if(rx_idx > 0)
{
	uchar temp = rx_idx;
	HAL_Delay(1);
	if(temp == rx_idx)
		uart_process();
}

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

cpp 复制代码
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配置

程序设计

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

cpp 复制代码
//定义时间和日期结构体变量
RTC_TimeTypeDef time;
RTC_DateTypeDef date;

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

cpp 复制代码
void rtc_process(void)
{
	HAL_RTC_GetDate(&hrtc,&date,RTC_FORMAT_BIN);
	HAL_RTC_GetTime(&hrtc,&time,RTC_FORMAT_BIN);
}

LCD显示日期与时间

cpp 复制代码
u32 lcd_tick = 0;
void lcd_process(void)
{
	//lcd周期为200ms
	if(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);	
	}
}
相关推荐
jghhh0111 小时前
基于STM32的桌面Mini时钟设计
stm32·单片机·嵌入式硬件
yong999013 小时前
基于STM32 Nucleo板的彩色LED照明灯设计(纯CubeMX开发)
stm32·单片机·嵌入式硬件
lingzhilab13 小时前
零知派——STM32驱动INA219电流功率监测计实现高精度电源管理
stm32·单片机·嵌入式硬件
ahccqw17 小时前
CAN总线通信入门及实例代码(stm32f4系列)
stm32·单片机·嵌入式硬件
charlie11451419119 小时前
嵌入式现代C++工程实践——第14篇:第二次重构 —— 模板登场,编译时绑定端口和引脚
开发语言·c++·stm32·安全·重构
想放学的刺客1 天前
单片机嵌入式试题(第34期)嵌入式开发的利器:逻辑分析仪与示波器深度解析
arm开发·stm32·单片机·嵌入式硬件·物联网
三品吉他手会点灯1 天前
STM32 DAP 烧录报错-DAP下载器的原理
stm32·单片机·嵌入式硬件
feifeigo1231 天前
基于STM32 Nucleo-L476RG的智能灯设计(纯CubeMX开发)
stm32·单片机·嵌入式硬件
【ql君】qlexcel2 天前
Visual Studio Code开发STM32设置头文件宏定义uint32_t报错
vscode·stm32·vs code·头文件宏定义·uint32_t报错·uint8_t报错·uint16_t报错
CoderYanger2 天前
14届蓝桥杯省赛Java A 组Q1~Q3
java·开发语言·线性代数·算法·职场和发展·蓝桥杯