STM32HAL库中断模式串口收发

#define UART1_IRQ
uint8_t TdataIRQ[]={
          
   "welcome to uart irq!
"};//测试数组
uint8_t Rdata;//存放接收数据

2-同样是在stm32l4xx_hal_uart.c中1611行找到函数

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

3-在main函数中添加如下代码

#ifdef UART1_IRQ
		HAL_UART_Receive_IT(&huart1,&Rdata,1);//触发中断接收
		HAL_UART_Transmit_IT(&huart1,TdataIRQ,sizeof(TdataIRQ));//发送我们使用的IRQ TEST 
	#endif
	while(1)
	{
          
   
		#ifdef UART1_IRQ		
		HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
		printf("welcome to uart1 IRQ test!
");
		HAL_Delay(2000);
		#endif		
	}

4-修改回调函数

//回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
          
   
	#ifdef UART1_IRQ
	//把接收到的数据发送回屏幕,发送函数要在接收函数前面
	HAL_UART_Transmit(&huart1,&Rdata,1,0xff);
	HAL_UART_Receive_IT(&huart1,&Rdata,1);
	#endif
}

三.总结 1.在串口可以发现,使用串口中断实现数据的收发,是不影响while中的循环的,不影响主程序运行。 2.如果是在普通模式下使用串口,添加延时函数HAL_Delay(2000),会导致程序反应不过来。

经验分享 程序员 微信小程序 职场和发展