本文用来记录学习中的问题,不涉及其他
//主函数
int main(void)
{
.........
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);//开启空闲中断服务
HAL_UART_Receive_DMA(&huart1,rebuff,100);//开启接收
while (1)
{
..........
}
}
//中断服务
void USART1_IRQHandler(void)
{
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET) //空闲中断判断 __HAL_UART_GET_FLAG获取指定中断
{
uint8_t len=0;//定义长度
__HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除空间中断
//之后这里可以多次判断以便排除干扰
HAL_UART_DMAStop(&huart1);//停止DMA
len=100-__HAL_DMA_GET_COUNTER(huart1.hdmarx);//获取已接收长度
{//括号内可以到处理函数中
xxxx(len);//处理函数
HAL_UART_Receive_DMA(&huart1,rebuff,100);//重新开启接收
}
}
HAL_UART_IRQHandler(&huart1);
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);//发送完成回调函数
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);//发送完成过半 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);//接收完成回调函数 void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//接收完成过半 void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);//错误处理回调函数