本文将介绍如何使用STM32F4的串口接收中断,通过串口助手模拟上位机发送指令、STM32F4串口中断接收到指令后根据指令选择开关LED小灯。
1.运用到的资源、工具:
1.1开发板芯片STM32F407,USART3串口驱动电路、LED驱动电路
1.2编译工具:MDK-ARM V5(keil5)
1.3辅助工具:STM32CubeMX
2.硬件设计
2.1原理图
3.软件设计
3.1功能架构:串口调试助手向USART3发送1时,使LED1点亮; 发送0时,使LED1熄灭; 串口接收使用接收中断来提高程序运行时的效率、避免程序不断轮询查看串口是否接收到1或0的指令
3.2STM32cubeMX配置工程文件:
将USART3使能选择异步通信、在NVIC中使能USART3的中断功能
将PF10设为GPIO_OUTPUT
4.代码实现
4.1printf输出重定向,使得打印信息通过USART3打印到串口助手
int fputc(int ch, FILE *p)
{
while(!(USART3->SR & (1 << 7)));
USART3->DR = ch;
return ch;
}
4.2重定义串口中断接收完成回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART3)
{
if(RED == 1)
{
LED1_ON;
printf("LED1 ON RED= %d ", RED);
}
else
{
LED1_OFF;
printf("LED1 OFF RED= %d ", RED);
}
}
}
4.3宏定义 LED1的点亮熄灭
#define LED1_ON HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET)
#define LED1_OFF HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET)