中级会员
 
- 积分
- 215
- 金钱
- 215
- 注册时间
- 2012-12-17
- 在线时间
- 77 小时
|
10金钱
KEIL仿真,能正常发送,并且串口接受BUFF里有数据收到,但是串口中断因为IDLE被清除无法进入中断置状态位.
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart1,rx1_buffer,UR1_BUFFER_SIZE);
__HAL_UART_ENABLE_IT(&huart1, UART_IT_TC);
1.发送中断代码:
void DMA1_Channel4_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
if(__HAL_DMA_GET_FLAG(&hdma_usart1_tx,DMA_FLAG_TC4))
{
__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx,DMA_FLAG_TC4);
HAL_UART_DMAStop(&huart1);
while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC)!=RESET )
{
__HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_TC);
}
}
/* USER CODE END DMA1_Channel4_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart1_tx);
/* USER CODE BEGIN DMA1_Channel4_IRQn 1 */
/* USER CODE END DMA1_Channel4_IRQn 1 */
}
串口1接收中断:
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint8_t temp;
if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE) != RESET))//idle标志被置位
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除标志位
HAL_UART_DMAStop(&huart1);
temp = __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
rx1_len = UR1_BUFFER_SIZE - temp; //总计数减去未传输的数据个数,得到已经接收的数据个数
rx1_recv_end_flag = 1; // 接受完成标志位置1
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
请大家给点思路,困扰...
|
|