手把手教你stm32使用中断的方式来实现串口数据的接收

引言

我们曾经成为过电灯大师http://【使用stm32成为一名点灯大师(超级细)hal库(附代码) – CSDN App】https://blog.csdn.net/2401_88862650/article/details/145531155?sharetype=blog&shareId=145531155&sharerefer=APP&sharesource=2401_88862650&sharefrom=link

也曾经学习过如何通过串口从电脑接收数据【手把手教你stm32最小系统板如何使用串口发送数据(附c语言知识) – CSDN App】https://blog.csdn.net/2401_88862650/article/details/145541442?sharetype=blog&shareId=145541442&sharerefer=APP&sharesource=2401_88862650&sharefrom=link

现在我们把这两个实验结合起来:通过串口来控制led的闪灯速度

实验用具

1.stm32最小系统板

2.USB转TTL模块

电路的搭建

LED连接的是单面机的PC13引脚,并且采用的是开漏接法

使用单片机的串口1来连接USB转TTL模块。单片机的PA9引脚连接USB转TTL模块的RXD。单片机的PA10引脚连接USB转TTL模块的TSD

然后我们把这个电路图转换成接线图

问题分析

如何实现led灯的快慢闪?

先点亮led,在熄灭led

在两个函数之前加上延迟函数

由于我们声明了变量,所以

static uint32_t blinkInterval =1000;

找到位置

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
		
		HAL_Delay(blinkInterval);
		
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
		
		HAL_Delay(blinkInterval);

由于我们之后要调试代码,所以我们把代码优化关掉

接着点击view

下面会弹出一个窗口

可以通过改变Value的值来改变led灯的闪烁速度

通过串口接受命令

如何使用这个中断呢

我们学习一个新的编程接口为huart_receive_it

编写代码

先声明变量

static uint8_t dateRcvd;

 

void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart ==&huart1)
	{
		if(dateRcvd =='1')
{
	blinkInterval =1000;
}
else if(dateRcvd =='2')
{
	blinkInterval =300;
}
else if(dateRcvd =='3')
{
	blinkInterval =50;
}
	HAL_UART_Receive_IT(&huart1,&dateRcvd,1);
	}
}

 然后打开串口调试助手进行操作


本文参照铁头山羊视频所做 

作者:Multiple-ji

物联沃分享整理
物联沃-IOTWORD物联网 » 手把手教你stm32使用中断的方式来实现串口数据的接收

发表回复