【蓝桥杯嵌入式】串口通信与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);	
	}
}
相关推荐
可爱的鸡仔2 小时前
STM32--------DMA
stm32·单片机·嵌入式硬件
D.....l2 小时前
STM32学习(MCU控制)(GPIO)
stm32·嵌入式硬件·学习
GilgameshJSS12 小时前
STM32H743-ARM例程24-USB_MSC
c语言·arm开发·stm32·单片机·嵌入式硬件
showmethetime12 小时前
STM32实现LED舞台灯具控制
stm32·单片机·嵌入式硬件
python百炼成钢13 小时前
3.Linux 网络相关
linux·运维·网络·stm32·单片机
XiangrongZ14 小时前
江协科技STM32课程笔记(五)— ADC模数转换器
笔记·科技·stm32
PegasusYu16 小时前
STM32配置读取激光测距传感器VL6180X距离数据
stm32·vl6180·接近传感器·stm32g030·激光测距·飞行时间·vl6180x
mc235616 小时前
STM32F103C8T6--深入GPIO
stm32·单片机·嵌入式硬件
兆龙电子单片机设计17 小时前
【STM32项目开源】STM32单片机智能家居控制系统
stm32·单片机·物联网·开源·毕业设计·智能家居
A9better17 小时前
嵌入式开发学习日志41——stm32之SPI总线基本结构
stm32·单片机·嵌入式硬件·学习