CubeMX使用教程(7)——UART串口通信

本文详细介绍了如何使用CubeMX工具配置STM32G431RBT6的USART1进行串口通信,包括发送电压值和接收并解析用户输入的日期。教程涵盖了从配置硬件、编写发送和接收代码到LCD显示结果的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本篇将利用CubeMX开发工具学习uart(串口通信),实现单片机和上位机之间的数据收发。

1、CubeMX配置

根据产品手册,调试器的USB转串口功能默认与STM32G431RBT6微控制器USART1连接的

我们还是使用之前的工程进行配置

首先打开CubeMX对PA9、PA10进行引脚配置,TX: 发送数据输出引脚;RX: 接收数据输入引脚

 因此根据原理图,我们应当将PA9配置成TX,因为PA9连接的是DAP_Link的RX;同理将PA10配置成RX,因为PA10连接的是DAP_Link的TX

 

确认配置无误后,点击GENERATE CODE

2、数据发送

我们就把上一章ADC实验中获取到的电压值通过串口发送出来

数据发送相对比较简单,在while(1)中添加如下代码即可实现

		char date[30];//定义一个数组存放数据
		sprintf(date,"V1:%.2f\r\n",getADC(&hadc2));
		HAL_UART_Transmit(&huart1,(uint8_t *)date,strlen(date),100);
		HAL_Delay(500);//控制发送频率,每个500ms发送一次电压值

打开串口助手,选择好对应的串口,将波特率设置为115200(注意要与前面在CubeMX中设置的波特率一致,否则会导致信息错乱)

3、数据接收

数据接收相对数据发送稍微复杂一些,当然重点还是程序编写

我们就给单片机输入一个人的出生年月日的一串数据,让单片机分析出年、月、日,同时分别显示在LCD上。比如我发给单片机20001120,单片机就可以通过串口反馈这个人生日是2000年11月20日。

首先我们在interrupt.c中编写串口回调函数

char Data[30];

uint8_t data;

unsigned char i;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *hurat)
{
	Data[i++]=data;
	HAL_UART_Receive_IT(&huart1,&data,1);
}

接着在main.c中编写串口接收函数

char year[10];//年份
char month[10];//月份
char day[10];//日
//**********************  串口接收函数  *************************
	void UART_Receive()
{
	if(i>0)
	{
		if(i==8)//接收2001:11:21,分析出生年/月/日
		{
			sscanf(Data,"%4s%2s%2s",year,month,day);
		}
		else 
		{
				char temp[20];
				sprintf(temp,"Error");
				HAL_UART_Transmit(&huart1,(uint8_t *)temp,strlen(temp),50);
		}
			i=0;memset(Data,0,30);
	}
}

最后,在主函数while(1)中运行串口接收函数,并且通过LCD讲年/月/日分别显示出来

char text[30]; 
		sprintf(text,"      Birthday      ");
		LCD_DisplayStringLine(Line1, (uint8_t *)text);
		sprintf(text,"Year:%s      ",year);
		LCD_DisplayStringLine(Line3, (uint8_t *)text);
		sprintf(text,"Month:%s      ",month);
		LCD_DisplayStringLine(Line5, (uint8_t *)text);
		sprintf(text,"Day:%s      ",day);
		LCD_DisplayStringLine(Line7, (uint8_t *)text);		
		
		if(i!=0)
		{
			int temp=i;
			HAL_Delay(1);
			if (temp==i) UART_Receive();//完成接收
		}

最终效果如下

首先给单片机输入一串8位数据:20001120

单片机接收到数据后,通过分析处理,将年月日显示在LCD上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值