bigbat 发表于 2022-6-2 11:02

GD32F103的串口中断USART_INT_IDLE开启的条件是什么

<p>我在uart初始化的时候,增加了idle的设置,</p>

<pre>
<code class="language-cpp">usart_enable(USART0);

/* enable USART0 receive interrupt */
usart_interrupt_enable(USART0, USART_INT_RBNE);
usart_interrupt_enable(USART0, USART_INT_IDLE);</code></pre>

<p>但是,在接收到数据后,中断可以进入,但是USART_INT_IDLE从来都没有发生</p>

<pre>
<code class="language-cpp">void USART0_IRQHandler(void)
{
   uint8_t uart_data;
   if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){

       usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);         
       /* read one byte from the receive data register */
          uart_data= (uint8_t)usart_data_receive(USART0);
   rx_buffer = uart_data;
   
    }      

        if(RESET != usart_interrupt_flag_get(USART0, USART_INT_IDLE))
    {
                usart_interrupt_flag_clear(USART0, USART_INT_IDLE);         
          rx_idel = TRUE;
        }
               
    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE)){
         usart_interrupt_flag_clear(USART0, USART_INT_FLAG_TBE);
    }
               
}
</code></pre>

<p>请问各位,GD32F103中断USART_INT_IDLE的开启条件是什么。</p>

lugl4313820 发表于 2022-6-3 12:25

是不是想做不定长接收呀,你是说进入中断的条件吧?

bigbat 发表于 2022-6-3 17:18

lugl4313820 发表于 2022-6-3 12:25
是不是想做不定长接收呀,你是说进入中断的条件吧?

<p>是的,我在stm32中就是使用的这个中断,但是GD32一旦打开,不但不能中断,而且还是各种的不正常。</p>

lugl4313820 发表于 2022-6-3 21:38

bigbat 发表于 2022-6-3 17:18
是的,我在stm32中就是使用的这个中断,但是GD32一旦打开,不但不能中断,而且还是各种的不正常。

<p>空闲中断,不同的产品、芯片,对于空闲中断的定义不同,具体还是以实践为准,其实最好的实现方式是定时器检测方式,通用,STM32的空闲中断相比来讲适用一些,我上次用过CH582就跟STM32的相差较远!</p>

bigbat 发表于 2022-6-4 10:13

lugl4313820 发表于 2022-6-3 21:38
空闲中断,不同的产品、芯片,对于空闲中断的定义不同,具体还是以实践为准,其实最好的实现方式是定时器 ...

<p>这个是我看过GD32的手册:&quot;该中断是在收到数据后,就是USART_INT_FLAG_RBNE被置标志后,如果总线出现一个周期的&lsquo;空闲&rsquo;就会产生该中断,这个好象和stm32的理解是一样的,有说:需要在USART_INT_RBNE中断前检测,说usart_interrupt_flag_get函数会清除该标记,这个也试了没有用。</p>

lugl4313820 发表于 2022-6-4 10:20

bigbat 发表于 2022-6-4 10:13
这个是我看过GD32的手册:&quot;该中断是在收到数据后,就是USART_INT_FLAG_RBNE被置标志后,如果总线出现一 ...

<p>你设置空闲中断的长度是1就可以进中断</p>

<p>&nbsp;</p>

bigbat 发表于 2022-6-4 10:51

lugl4313820 发表于 2022-6-4 10:20
你设置空闲中断的长度是1就可以进中断

&nbsp;

<p>给点提示,怎么设置?说一下代码,stm32中是不需要USART_INT_RBNE的只要USART_INT_IDLE就可以,但是我也没有成功。</p>

lugl4313820 发表于 2022-6-4 15:45

bigbat 发表于 2022-6-4 10:51
给点提示,怎么设置?说一下代码,stm32中是不需要USART_INT_RBNE的只要USART_INT_IDLE就可以,但是我也 ...

<p>等等,我研究一下,到时写个帖子吧。</p>

lugl4313820 发表于 2022-6-4 16:18

lugl4313820 发表于 2022-6-4 15:45
等等,我研究一下,到时写个帖子吧。

<p>我已经发帖子了,你过去参考一下就OK了:</p>

<p><a href="https://bbs.eeworld.com.cn/thread-1205730-1-1.html">【GD32F310G-START】USART 不定长接收 - GD32 MCU - 电子工程世界-论坛 (eeworld.com.cn)</a></p>
页: [1]
查看完整版本: GD32F103的串口中断USART_INT_IDLE开启的条件是什么