打印

已解决GD32F450VET6的UART7串口问题

[复制链接]
1705|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
洗个菠萝|  楼主 | 2020-12-18 09:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新人求问,我的GD32F450VET6芯片,其他串口都没啥问题,这个UART7串口,光发送数据没问题,一接收,程序就跑死了,各位大佬,帮我看下原因吧

使用特权

评论回复
沙发
lvben5d| | 2020-12-18 13:57 | 只看该作者
你确定是接收问题?  中断优先级够不   避免串口接收溢出(大部分人没有写这个溢出中断相关处理-清标志位)  程序就会一直被这个溢出中断。。。

使用特权

评论回复
板凳
洗个菠萝|  楼主 | 2020-12-18 14:46 | 只看该作者
lvben5d 发表于 2020-12-18 13:57
你确定是接收问题?  中断优先级够不   避免串口接收溢出(大部分人没有写这个溢出中断相关处理-清标志位) ...

您好,方便加个微信吗,我发代码给您看下,GD32F450VET6串口7死机问题,实际上串口6也是同样的问题,刚接触国产芯片,就剩这一个问题没解决了

使用特权

评论回复
地板
洗个菠萝|  楼主 | 2020-12-18 14:47 | 只看该作者
lvben5d 发表于 2020-12-18 13:57
你确定是接收问题?  中断优先级够不   避免串口接收溢出(大部分人没有写这个溢出中断相关处理-清标志位) ...

您好,方便加个微信吗,我发代码给您看下,GD32F450VET6串口7死机问题,实际上串口6也是同样的问题刚接触国产芯片,就剩这一个问题没解决了

使用特权

评论回复
5
lvben5d| | 2020-12-21 10:18 | 只看该作者
本帖最后由 lvben5d 于 2020-12-21 10:19 编辑

我把我中断处理发给你看下  你注意下跟库相关的   我这个是GD32E103芯片的库   中断标志位分  接收  发送结束  和溢出 3大类
void USART0_IRQHandler(void)
{        
        if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE))
    {   
                TIMER_CNT(TIMER1) = 0; //因为我向上计数  所以清0就好.  只能靠超时截包
                 ......
                TIMER_CTL0(TIMER1) |= 0x00000001;        
        }
        if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE))
        {
                if(user_usb_info.usart_txbuf_ctr < user_usb_info.usart_txbuf_len[user_usb_info.usart_txbuf_index])
                {......      
                }
                else //发送完
                {
                   //查看是否还有下次要发送的数据包
                   if(user_usb_info.usart_txbuf_len[user_usb_info.usart_txbuf_index]>0)
                   {
                                usart_data_transmit(USART0 , user_usb_info.usart_tx_buf[user_usb_info.usart_txbuf_index][0]);
                            user_usb_info.usart_txbuf_ctr = 1;
                   }
                   else //没有 就休息
                   {
                            user_usb_info.usart_txbuf_busy = BUS_IDLE;
                            usart_interrupt_disable(USART0, USART_INT_TBE); //关闭
                   }               
              }
        }

     if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_ERR_ORERR))
    {
         usart_interrupt_flag_clear(USART0, USART_INT_FLAG_ERR_ORERR);
         Sysinfo.Decode_year = usart_data_receive(USART0);  //这个变量值反正没啥用
    }
}

使用特权

评论回复
6
洗个菠萝|  楼主 | 2020-12-21 11:11 | 只看该作者
lvben5d 发表于 2020-12-21 10:18
我把我中断处理发给你看下  你注意下跟库相关的   我这个是GD32E103芯片的库   中断标志位分  接收  发送结 ...

非常感谢您。

使用特权

评论回复
评论
ywd_Linux 2021-4-15 21:53 回复TA
楼主你是怎么解决的 求指教求指教,,,我的是串口0的收发正常,然后我移植了UART6和UART7,六和七两个都是输出正常,接收就只能接每帧的第一个字符,求指教啊 
7
洗个菠萝|  楼主 | 2020-12-21 11:15 | 只看该作者
问题已解决了

使用特权

评论回复
评论
ywd_Linux 2021-4-17 16:00 回复TA
你好 请教一下这个串口6和串口7的问题您是怎么解决的啊 求助啊 
8
该死的微笑| | 2021-3-3 16:04 | 只看该作者
您好,你串口的串口中断函数那些在哪找的,我发现GD的库里的例程都没有。

使用特权

评论回复
9
里面有晴雨| | 2021-3-3 19:41 | 只看该作者
看了楼主的解决过程,受益匪浅呀。
不错的。

使用特权

评论回复
10
huquanz711| | 2021-4-16 07:33 | 只看该作者
感谢楼主的分享,学习了。

使用特权

评论回复
评论
XieNengbin 2021-5-23 22:54 回复TA
@ywd_Linux : if((RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) && (RESET != usart_flag_get(USART0, USART_FLAG_RBNE))){ /* Read one byte from the receive data register */ rx_buffer[rx_counter++] = (uint8_t)usart_data_receive(USART0); // if(rx_counter >= nbr_data_to_read){ /* disable the USART0 receive interrupt */ //usart_interrupt_disable(USART0, USART_INT_RBNE); } } 
ywd_Linux 2021-5-22 10:19 回复TA
@XieNengbin :我的问题解决了,之前我配置的是想用DMA模式+空闲中断做不定长数据接收,出现只能接一个字节的问题,后来不用DMA模式了,直接用原始的办法,接收中断+定时器,判断帧间隔来接收不定长数据帧现在调通了 
XieNengbin 2021-5-21 21:20 回复TA
@ywd_Linux :我也和你遇到了一样的问题,modbusmaster向GD32(作为从站)发送报文帧,但是串口只能接受第一个字节的数据。 
XieNengbin 2021-5-21 21:19 回复TA
@ywd_Linux :兄弟解决了嘛 
ywd_Linux 2021-4-17 13:47 回复TA
您好 请问这个串口7函数能帮忙指教一下吗?我的串口0正常。按照串口的步骤配置好串口7,结果发送正常,接收就只能接第一个字符, 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝