STM32—UART中断收发 Day5

软件:STM32CubeMX,MDK-ARM
硬件:蓝桥杯物联网Lora开发板,板载芯片STM32L071

一、STM32CubeMX配置

1、先在连接(Connectivity)里面将UART2设置为异步通信模式在这里插入图片描述
2、打开UART中断
STM32—UART中断收发 Day5_第1张图片

3、将系统核心(System Core)里GPIO里面的两个USART设置为上拉模式

在这里插入图片描述
4、将PC15设置为GPIO_Output,并且命名为LED
STM32—UART中断收发 Day5_第2张图片

二、代码

1、UART中断接收函数:HAL_UART_Receive_IT,这个和STM32CubeMx玩转STM32—简单UART通信 Day3》里面提到的类似。

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

使用中断接收的好处就是他不会一直问(轮询),大大减少了了CPU的负担,提高CPU的工作效率。

如果程序量很多,while(1)里面有很多个Handler()需要处理很多事情,当CPU正在处理某个Handler()里的事件时,串口有数据需要优先处理,这时,使用轮询,就无法保证数据能及时处理了,所以使用中断接收更好。

2、在usart.c里面编写

#include "usart.h"
#include 

uint8_t uart_rxbuf[1];
char *str1="\nLED已经熄灭!\r\n";
char *str2="\nLED已经点亮!\r\n";

UART_HandleTypeDef huart2;

void MX_USART2_UART_Init(void)
{
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    Error_Handler();
  }
	HAL_UART_Receive_IT(&huart2, uart_rxbuf, 1);
	/*这个MX_USART2_UART_Init函数是已经生成好了的
	只需要添加上面这一句UART中断接收代码就行*/  
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	HAL_UART_Transmit(&huart2, uart_rxbuf,1, 100);    // 把收到的字节原样发送出去
	if(uart_rxbuf[0]=='0'){	//比较字符数组里面的第一个字符,判断是否为0
		HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);//熄灭LED
		HAL_UART_Transmit(&huart2,(uint8_t *)str1,strlen(str1),100);
	}
	else if(uart_rxbuf[0]=='1'){//比较字符数组里面的第一个字符,判断是否为1
		HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);//点亮LED
		HAL_UART_Transmit(&huart2,(uint8_t *)str2,strlen(str2),100);
	}
	HAL_UART_Receive_IT(&huart2, uart_rxbuf, 1);        // 重新注册一次,要不然下次收不到了
}

三、效果

STM32—UART中断收发 Day5_第3张图片

你可能感兴趣的:(STM32,stm32,单片机,uart,物联网,串口通信)