手把手教你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