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

 本篇将利用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上

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在STM32CubeMX使用教程中,配置和使用UART是其中的一个重要部分。首先,你需要进行时钟配置,确保UART使用的时钟源正确设置。接着,你需要在STM32CubeMX中开启UART模块,配置相应的参数,例如波特率、数据位、停止位和校验位等。然后,你需要在你的工程中进行相应的配置,包括引脚映射、中断设置等。最后,你可以在Keil等开发环境中编写代码实现相应的功能。这些步骤可以帮助你完成UART的配置和使用。 如果你想更深入地学习关于STM32CubeMX和HAL库的UART配置和使用,你可以参考一些教程资源。其中有一个教程是基于HAL库实现Printf函数功能重定向和UART中断接收的,它结合了STM32CubeMX和HAL库的使用,可以帮助你更快速地学习和理解UART的配置和使用。 此外,如果你需要了解UART接收回调函数的原型,你可以参考STM32F1系列的HAL库中的stm32f1xx_hal_uart.c文件,该文件中定义了名为HAL_UART_RxCpltCallback的接收回调函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [STM32CubeMX配置使用usart](https://blog.csdn.net/hjskj/article/details/124071733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解](https://blog.csdn.net/as480133937/article/details/99073783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值