STM32(HAL)串口中断接收

本文详细介绍了如何在HAL库中配置SYS和RCC,设置串口外设,以及在KEIL环境中整合串口中断功能,包括在main.c中的变量声明、中断接收处理和回调函数的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、简介

2 基础配置

2.1.1 SYS配置

 2.1.2 RCC配置

2.2 串口外设配置

 2.3 项目生成

 3、KEIL端程序整合


1、简介

本文对HAL串口中断函数进行介绍。

2 基础配置

2.1.1 SYS配置

 2.1.2 RCC配置

2.2 串口外设配置

 2.3 项目生成

 3、KEIL端程序整合

首先在main.c文件中进行接受变量声明。

char buf;

 接着在主函数的while循环中进行接收中断,如下所示:

HAL_UART_Receive_IT(&huart1, (uint8_t *)&buf, sizeof(buf));

 最后在主函数上方进行回调函数的调用,如下所示:

void  HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart)//串口中断回调函数
{
	if(huart1.Instance == USART1){
	
		//中断内容代码书写区域	
	}
 HAL_UART_Receive_IT(&huart1, (uint8_t *)&buf, sizeof(buf));	 
}

上文如有错误,恳请各位大佬指正。

### STM32 HAL UART 中断接收实现方法 #### 使用 `HAL_UART_Receive_IT` 函数初始化中断接收 为了通过中断方式接收数据,在程序中可以调用 `HAL_UART_Receive_IT` 来设置缓冲区地址以及预期接收的数据长度。此函数会自动配置并开启相应的中断请求,使得当有新字符到达时能够触发中断服务例程(ISR)[^1]。 ```c // 定义全局变量用于存储接收到的数据 uint8_t aRxBuffer[RXBUFFERSIZE]; // 调用该函数来启动基于 IT 的异步读取操作 HAL_StatusTypeDef status = HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE); if(status != HAL_OK){ // 错误处理逻辑... } ``` #### 启用特定类型的中断事件 除了上述整体性的接收中断外,还可以利用宏定义如 `__HAL_UART_ENABLE_IT` 更加精细地控制哪些具体的中断源应该被激活。例如只允许接收完成(RXCPLT)或者空闲线路(IDLE)两种情况下的通知: ```c /* Enable the UART Data Register not empty Interrupt */ __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); /* 或者启用IDLE线检测中断 */ __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); ``` #### 处理接收完成后的回调机制 每当发生指定类型的UART事件之后,就会执行对应的ISR内部预设好的一系列动作;其中就包含了对用户自定义的回调函数指针进行判断和调用的过程。对于接收完毕的情形而言,则是通过检查 `HAL_UART_RxCpltCallback()` 是否为空来进行下一步骤的操作[^3]。 ```c void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* 验证当前使用的串口实例是否匹配 */ if(huart->Instance== USART1) { // 用户自己的业务逻辑代码... // 如果还需要继续监听新的消息则再次发起接收命令 HAL_UART_Receive_IT(uart_handle, rx_buffer, size_of_data_to_receive); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值