OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2125|回复: 3

求教STM32F0 串口空闲中断DMA接收问题

[复制链接]

89

主题

172

帖子

0

精华

高级会员

Rank: 4

积分
607
金钱
607
注册时间
2015-9-7
在线时间
141 小时
发表于 2019-9-10 17:35:53 | 显示全部楼层 |阅读模式
求教STM32F0 串口空闲中断DMA接收问题,我发现有时候DMA接收只能接收到第一个BYTE,推测可能是正在发送的时候,有接收,所以只能第一个byte?以下是我中断接收过程代码

        if(huart==WIFI_UART)
        {
        //当触发了串口空闲中断
    if((__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET))
    {
                if(huart->Instance == USART2)
                {
                        /* 1.清除标志 */
                        __HAL_UART_CLEAR_IDLEFLAG(huart); //清除空闲标志
                       
                       
                        /* 2.读取DMA */
                        HAL_UART_DMAStop(huart); //先停止DMA,暂停接收
                        //这里应注意数据接收不要大于 USART_REC_LEN
                        WIFI_rx_len = rx_buff_size - (__HAL_DMA_GET_COUNTER(&hdma_usart2_rx)); //接收个数等于接收缓冲区总大小减已经接收的个数
                       
                        WIFI_rx_start = 1; //标志已经成功接收到一包等待处理
                       
                        rx_proce();
                        /* 4.开启新的一次DMA接收 */
                        HAL_UART_Receive_DMA(WIFI_UART,WIFI_BUFF,rx_buff_size); //启动接收  
                }
    }
        }


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

89

主题

172

帖子

0

精华

高级会员

Rank: 4

积分
607
金钱
607
注册时间
2015-9-7
在线时间
141 小时
 楼主| 发表于 2019-9-11 12:17:59 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
434
金钱
434
注册时间
2013-3-18
在线时间
82 小时
发表于 2019-9-12 10:32:46 | 显示全部楼层
F0的话建议使用TIMEOUT中断,超时时间可设置的。另外中断中尽量快速返回,不要做过多的处理
回复 支持 反对

使用道具 举报

89

主题

172

帖子

0

精华

高级会员

Rank: 4

积分
607
金钱
607
注册时间
2015-9-7
在线时间
141 小时
 楼主| 发表于 2019-9-12 16:53:34 | 显示全部楼层
怎样返回最快啊?我吧RX_PROCE去掉也是一样
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 16:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表