【蓝桥杯嵌入式】串口通信与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);	
	}
}
相关推荐
zcmodeltech7 小时前
工程车模型多车型动作控制系统设计与实现方案——基于STM32与Modbus RTU的挖掘机、装载机、自卸车、起重机、电力工程车全场景控制方案,服务范围覆盖全国
分布式·stm32·单片机·嵌入式硬件·交互
Zhang.Yi8 小时前
STM32-I2C
stm32·单片机·嵌入式硬件
LCG元8 小时前
STM32L431 低功耗实战:STOP2 模式 + LPUART 唤醒 + 实测电流对比
stm32·单片机·嵌入式硬件
路上有只喵8 小时前
STM32 UI Designer:一个开源的嵌入式 LCD 界面可视化设计工具(自动生成 C 代码)
c语言·驱动开发·stm32
糖糖单片机设计10 小时前
STM32 智能奶茶冲泡系统
stm32·单片机·嵌入式硬件
jianqiang.xue12 小时前
ESP-IDF保姆级入门17|GPIO外部中断全解与工程化设计:分层架构/防抖策略/长按双击/优先级配置,掌握工业级可靠输入处理
stm32·单片机·物联网·架构·esp32
码上上岸17 小时前
基于单片机的老人跌倒监测报警器设计与实现
stm32·嵌入式硬件·物联网·智能硬件·硬件
别催小唐敲代码20 小时前
Pixhawk 6C — Mission Planner 烧录 & 全套校准教程
stm32·单片机·嵌入式硬件
wuyk55521 小时前
从零吃透Modbus通信|第7章:终极工程整合(模块化架构、双模式主机从机、RTOS适配、量产级模板)
c语言·stm32·学习·架构
一条破秋裤1 天前
STM32 学习笔记:PWM 驱动 LED 呼吸灯与舵机代码
笔记·stm32·学习