【蓝桥杯嵌入式】串口通信与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);	
	}
}
相关推荐
闻缺陷则喜何志丹1 小时前
【计算几何 二分查找】P12261 [蓝桥杯 2024 国 Java B] 激光炮|普及+
c++·数学·蓝桥杯·计算几何·洛谷
平凡灵感码头2 小时前
第一次做蓝牙产品,从零开发 嵌入式开发日志(2)AC63NSDK 完整合并版目录说明
stm32·单片机·嵌入式硬件
_OP_CHEN2 小时前
【算法基础篇】(三十一)动态规划之基础背包问题:从 01背包到完全背包,带你吃透背包问题的核心逻辑
算法·蓝桥杯·动态规划·背包问题·01背包·完全背包·acm/icpc
闻缺陷则喜何志丹3 小时前
【计算几何】P12144 [蓝桥杯 2025 省 A] 地雷阵|普及+
c++·数学·蓝桥杯·计算几何
tang_shou4 小时前
STM32CubeMx使用STM32F4系列芯片实现串口DMA接收
c语言·arm开发·stm32·单片机·嵌入式硬件·mcu·stm32cubemx
m0_553210044 小时前
stm32读取rtc年份错误问题,需要指定星期几
stm32·单片机
云山工作室5 小时前
基于STM32的视力保护台灯设计与实现(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·音视频
yrx0203075 小时前
使用A4950制作的步进电机驱动器&&mcu软件细分
stm32·步进电机
m0_553210045 小时前
stm32f407移植modbus协议
stm32·单片机·嵌入式硬件
LaoZhangGong1236 小时前
uip之TCP服务器
服务器·网络·stm32·tcp/ip·tcp·uip