打印

STM32DMA实现RS485通信,发送数据第一个数据接收不到

[复制链接]
459|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
过期账户|  楼主 | 2018-7-9 20:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
诸位大佬,我想通过DMA实现RS485接收-发送数据,但是遇到了点问题,问题描述如下。
目标:上位机发送10个数,触发接收DMA中断(我用的是UART_IT_IDLE中断),接收中断里用DMA把定义好的18个数发送出去。
实现:
   中断使能:
               __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);          //使能IDLE中断
        __HAL_UART_ENABLE_IT(&huart1, UART_IT_TC);//使能发送完成中断
    打开接收中断:        
       HAL_UART_Receive_DMA(&huart1,RxData,RX_DMA_LEN);
    接收中断服务函数:
        void DMA2_Channel7_IRQHandler(void)
      {
        HAL_DMA_IRQHandler(&hdma_usart1_rx);
        __HAL_UART_CLEAR_IDLEFLAG(&huart1);
        HAL_UART_GetState(&huart1);
        __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_TXE);
        HAL_UART_Transmit_DMA(&huart1,TxData,TX_DMA_LEN);//发送数据
        HAL_UART_Receive_DMA(&huart1,RxData,RX_DMA_LEN);        
      }
发送中断服务函数:
     void DMA2_Channel6_IRQHandler(void)
     {
       HAL_DMA_IRQHandler(&hdma_usart1_tx);
       huart1.gState = HAL_UART_STATE_READY;
     }
结果:

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

395

主题

395

帖子

0

粉丝