参考
https://blog.csdn.net/xukao5671927/article/details/78605022
http://www.51hei.com/bbs/dpj-39885-1.html
官方参考手册
小发现:
USART1_IRQHandler中的
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint32_t tmp_flag = 0;
uint32_t temp;
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
tmp_flag = __HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE);
if((tmp_flag != RESET)){
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
/* 读取串口状态寄存器(芯片型号不同,寄存器名称可能需要修改) */
temp = huart1.Instance->SR;
/* 读取串口数据寄存器(芯片型号不同,寄存器名称可能需要修改) */
temp = huart1.Instance->DR;
HAL_UART_DMAStop(&huart1);
/* 读取DMA剩余传输数量(芯片型号不同,寄存器名称可能需要修改) */
temp = hdma_usart1_rx.Instance->NDTR;
rx_len = BUFFER_SIZE - temp;
recv_end_flag = 1;
}
/* USER CODE END USART1_IRQn 1 */
}
__HAL_UART_CLEAR_IDLEFLAG(&huart1);是这样一个宏函数
#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
do{
__IO uint32_t tmpreg = 0x00U;
tmpreg = (__HANDLE__)->Instance->SR;
tmpreg = (__HANDLE__)->Instance->DR;
UNUSED(tmpreg);
} while(0U)
与
/* 读取串口状态寄存器(芯片型号不同,寄存器名称可能需要修改) */
temp = huart1.Instance->SR;
/* 读取串口数据寄存器(芯片型号不同,寄存器名称可能需要修改) */
temp = huart1.Instance->DR;
功能相同,故将函数注释掉。重新烧录,程序正常运行
上一篇:几种STM32开发IDE的比较与选择
下一篇:STM32应用-5-LORA模块测试
推荐阅读最新更新时间:2024-11-13 12:22