0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

芯片设计上的BUG

嵌入式电子创客街 来源:嵌入式电子创客街 作者:嵌入式电子创客街 2022-10-26 09:28 次阅读

近期白嫖君在使用GD32这款芯片时候,发现了一个大概率是芯片设计上的BUG,贴出来和大家分享一下。

我们在使用串口发送数据时,无非是使用两种方法,一种是逐字节发送,另一种是DMA发送。

af7164ca-54cb-11ed-a3b6-dac502259ad0.png

一般串口发送数据前,我们需要先查看TBE标志位,判断缓存区内是不是已经空了,如果空了我们才会往里填数据。

但是当发送缓存区为空时,并不代表我们的数据已经实际发完了,只是代表缓存区内的数据空了,这时物理意义上的发送可能还在进行中,如果你使用RS485器件,这时候把发送使能关断的话,就会丢失一个字节的数据。

因此,一般发送完成后,需要检查TC标志是不是已经被拉高了,以此来判断数据线上的数据是不是确实已经发结束了。

void usart_sendbuf(uint32_t usart_periph, uint8_t *Buffer , uint16_t ucSend_num)
{        
    unsigned int i;
    usart_flag_clear(usart_periph, USART_FLAG_TC);  //在发送前要先清除TC
    for(i = 0; i < ucSend_num; i++)
    {        
        while(usart_flag_get(usart_periph, USART_FLAG_TBE) == RESET); 
        usart_data_transmit(usart_periph, Buffer[i]);
    }
while(usart_flag_get(usart_periph,USART_FLAG_TC)==RESET);
}

这次白嫖君的程序就是还按照这个套路来写的,串口发送数据量比较大,在运行一段时间后,程序突然就死机了,查看一下,是死在了最后一行等待TC标志位这里。查看寄存器列表,TC始终为0。

af90f7fe-54cb-11ed-a3b6-dac502259ad0.png

下面是官方库函数手册上给出的说明:

afa87802-54cb-11ed-a3b6-dac502259ad0.png

TC标识是受单片机硬件控制的,并不受程序影响,这里无法拉高九成九就是芯片BUG了,于是白嫖君谷歌了一下,发现也有人遇到类似问题:

afb65058-54cb-11ed-a3b6-dac502259ad0.png

针对这种情况,硬件上无法做出改善,只能从软件上规避了:

void usart_sendbuf(uint32_t usart_periph, uint8_t *Buffer , uint16_t ucSend_num)
{        
    uint32_t i;
    uint32_t j = 0;
    
    usart_flag_clear(usart_periph, USART_FLAG_TC);  //为了使用TC,在发送前要先清除TC
    for(i = 0; i< ucSend_num; i++)
    {        
        while(usart_flag_get(usart_periph, USART_FLAG_TBE) == RESET); 
        usart_data_transmit(usart_periph, Buffer[i]);
    }
    while(usart_flag_get(usart_periph, USART_FLAG_TC) == RESET)
    {
        if(j++ >= 0xFFFF) //在这里加超时机制
        {
            break;
        }
    }        
}

引入超时机制,当等待时间超过设定阈值,则不再等待TC置位,以此来避免程序阻塞假死。

特别注意:出现这种情况目前来说可能GD全系都有可能存在这个问题,且不区分是USART0还是USARTx,同时似乎只在数据量较大时会出现此种情况。我以前用GD的片子也不少,从没遇见过这种情况。特此说明,避免抬杠嘛~

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    48024

    浏览量

    410456
  • 单片机
    +关注

    关注

    6006

    文章

    44023

    浏览量

    622076

原文标题:国产单片机GD32 串口发送再现BUG?

文章出处:【微信号:嵌入式电子创客街,微信公众号:嵌入式电子创客街】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    BUG收集】为昕原理图设计EDA软件(Jupiter)免费评测活动常见问题及BUG收集

    各位参与评测活动的工程师,遇到bug可以在本帖反馈,会由为昕EDA的工程师们为各位解答。 【软件及试用指南】 请联系活动小助手领取(微信号:elecfans_666) 【活动时间】 报告提交截止时间
    发表于 04-25 18:23

    在TP芯片开发的软件想要运行在同型号的TE芯片,需要做什么修改吗?

    嗨,请教个问题,如在TP芯片开发的软件想要运行在同型号的TE芯片,需要做什么修改吗?
    发表于 02-01 08:01

    Firefox长达21年的 “陈年老bug”,终于被修复了!

    Firefox 的工单记录页面显示,一个在 21 年前发现的 bug 终于被修复了。
    的头像 发表于 01-25 11:08 174次阅读
    Firefox长达21年的 “陈年老<b class='flag-5'>bug</b>”,终于被修复了!

    暂停Debian的升级:内核 6.1.64 ext4 Bug警报

    Debian 开发人员正在积极寻找解决方案,并会在其可用时提供更新。与此同时,用户可以通过访问此处的 Debian bug 追踪页面了解该 bug 的进展情况并获取更多信息。
    的头像 发表于 12-10 14:53 696次阅读
    暂停Debian的升级:内核 6.1.64 ext4 <b class='flag-5'>Bug</b>警报

    无符号整型能产生哪些bug

    为什么不建议使用无符号整型,无符号整型能产生哪些bug
    的头像 发表于 11-09 17:09 264次阅读
    无符号整型能产生哪些<b class='flag-5'>bug</b>?

    某些bug正常运行时会出现,当打开串口log时又不再复现怎么办?

    某些bug正常运行时会出现,当打开串口log时又不再复现怎么办? 在开发过程中,我们经常会遇到一些bug。这些bug会对我们的开发造成一定程度的困扰,有时候甚至会让我们的软件崩溃或无法正常运行
    的头像 发表于 10-31 14:37 204次阅读

    常见的PLC系统BUG有哪些?如何减少这些BUG的产生?

    PLC系统可能会遇到各种不同类型的BUG,以下是一些常见的PLC系统BUG以及如何减少这些BUG的产生的建议: (1)逻辑错误:逻辑错误是最常见的PLC系统BUG之一。它们可能是由于程
    的头像 发表于 10-31 11:30 454次阅读
    常见的PLC系统<b class='flag-5'>BUG</b>有哪些?如何减少这些<b class='flag-5'>BUG</b>的产生?

    常见的PLC系统BUG有哪些?如何减少BUG的产生呢?

    PLC系统可能会遇到各种不同类型的BUG,以下是一些常见的PLC系统BUG以及如何减少这些BUG的产生的建议
    的头像 发表于 10-31 11:29 537次阅读

    带参数宏定义易出现的隐藏bug和定义方式归纳

    宏定义尤其是带参数的宏定义,特别容易出现一些隐藏问题,因为宏定义在预处理阶段是按照定义原封不动的进行展开,此时如果展开之后涉及到运算符优先级的问题,那么隐藏bug就此出现。
    的头像 发表于 10-20 15:26 252次阅读

    一个隐秘的串口中断BUG案例分享

    本文分享一个STM32L4平台串口驱动比较隐秘的BUG,分享的目的不在结论本身,而在于问题的分析过程,和如何形成标准,形成checklist,避免类似问题,以及在嵌入式开发中的思想。
    的头像 发表于 09-19 14:05 1364次阅读
    一个隐秘的串口中断<b class='flag-5'>BUG</b>案例分享

    关于复杂汽车软件bug管理的简单思考和探索

    虽然不能自拔,但从研发管理的角度,我对bug的评价和印象都还算不错,bug的管理基本算是目前汽车软件开发过程的最好典型,无论是过程规范度上,还是数字化程度上,或者协同合作度上。
    发表于 08-21 11:23 235次阅读
    关于复杂汽车软件<b class='flag-5'>bug</b>管理的简单思考和探索

    FPGA时序Bug分析

    Bug的现象是这样的,假设我们跑一次test,结果正确为T,结果不正确为F。
    发表于 07-30 14:23 349次阅读

    浅谈RTL中常见的bug

    在你们的工作中都遇到过哪些bug呢?下面这些你见过没?
    的头像 发表于 07-15 14:08 616次阅读
    浅谈RTL中常见的<b class='flag-5'>bug</b>

    代码中藏几个bug,让自己无法替代?

    我们在进行嵌入式软件开发过程中,产生一些bug是难免的。
    的头像 发表于 06-07 10:34 396次阅读
    代码中藏几个<b class='flag-5'>bug</b>,让自己无法替代?

    【感芯科技MC3172开发板体验】BUG:烧录工具卡校验

    前言 几天前,刚到手的板子,直接体验了一波,烧录程序完全没有问题。 但最近却遇到了问题:烧录卡校验,程序无反应,无法下载程序到板子??? PS:发现有挺多人都存在这个问题! 找BUG 然后就开始
    发表于 05-29 10:07