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的片子也不少,从没遇见过这种情况。特此说明,避免抬杠嘛~

审核编辑 :李倩


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

    关注

    455

    文章

    50732

    浏览量

    423255
  • 单片机
    +关注

    关注

    6035

    文章

    44553

    浏览量

    634736

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

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

收藏 人收藏

    评论

    相关推荐

    stm32H7 HAL库中存在的bug

    stm32H7 hal 库里面的以太网代码,坑了鱼鹰很多次(不知道最新版是否已经修复了这些bug),这里分享一篇网上的文章,因为鱼鹰也遇到过,靠它解决了其中一个编译优化问题,在此感谢作者。不过hal
    的头像 发表于 08-12 17:37 1124次阅读

    底部填充工艺在倒装芯片的应用

    底部填充工艺在倒装芯片(FlipChip)的应用是一种重要的封装技术,旨在提高封装的可靠性和延长电子产品的使用寿命。以下是该工艺的主要应用和优势:增强可靠性:倒装芯片封装中的焊点(常为金锡合金或铅
    的头像 发表于 07-19 11:16 716次阅读
    底部填充工艺在倒装<b class='flag-5'>芯片</b><b class='flag-5'>上</b>的应用

    助力程序员告别困扰已久的梦魇-Bug

    程序员的噩梦是什么?不用怀疑,就是让你加班到崩溃的Bug!下面是经过业界大佬们“长期加班”积累的小妙招,助力你离早下班又进一步~一、定位Bug范围及性质要有效解决问题,首先要缩小范围,集中关注最近
    的头像 发表于 07-02 08:10 314次阅读
    助力程序员告别困扰已久的梦魇-<b class='flag-5'>Bug</b>

    IDF4.2.1的编译器优化bug导致panic怎么处理?

    芯片:ESP32-D0WDQ6 IDF版本:v4.2.1 开发环境:tools for windows,cmake。 这几天在写一个项目,同时用到uart和ota功能。当uart发送数据时,同时
    发表于 06-21 10:55

    为昕科技VXIN原理图工具Jupiter使用发现问题BUG

    申请使用上海为昕科技VXIN原理图工具Jupiter和元件设计工具Venues已经有两周了,现将发现BUG用表单发给厂家供参考。
    发表于 06-12 00:21

    底部填充工艺在倒装芯片的应用

    倒装芯片(FC)技术是一种将芯片直接连接到基板的封装方式,它具有高密度、高性能、低成本等优点。但是,由于芯片和基板之间存在热膨胀系数(CTE)的不匹配,当温度变化时,焊点会承受很大的
    的头像 发表于 06-05 09:10 521次阅读
    底部填充工艺在倒装<b class='flag-5'>芯片</b><b class='flag-5'>上</b>的应用

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

    感谢各位参与评测活动的工程师,请先认真阅读评测规则和本帖顶部的视频讲解。 如遇到bug可以在本帖反馈,会由为昕EDA的工程师们为各位解答。 【软件及使用指南】 软件使用指南见本帖底部视频 软件本体请
    发表于 04-25 18:23

    电源芯片的工作原理 电源芯片怎么测好坏 电源芯片如何接到pcb板

    电源芯片的工作原理 电源芯片怎么测好坏 电源芯片如何接到pcb板 电源芯片是电子设备中常见的一种集成电路,用于提供稳定的直流电源给其他电子
    的头像 发表于 03-28 15:37 7607次阅读

    系统soc芯片的类型与应用领域

    系统(SoC)芯片是一种高度集成的半导体产品,它将传统的微处理器、内存、输入/输出端口以及其他必要的电子系统组件集成在单一芯片。SoC芯片
    的头像 发表于 03-28 15:26 1172次阅读

    系统代表芯片

    系统并不直接等同于芯片。片系统(SoC)是一种集成电路(IC)的设计方案,它将多个功能模块(如处理器、内存、接口等)集成在一个芯片
    的头像 发表于 03-28 15:07 683次阅读

    系统soc芯片技术介绍

    系统(SoC)芯片技术是一种高度集成化的技术,它将微处理器、存储器、接口和其他功能模块集成到单个芯片,从而形成一个完整的系统。这种技术的出现极大地简化了系统的设计和制造过程,提高
    的头像 发表于 03-28 14:38 752次阅读

    一文详解芯片的集成技术

    封装内集成的基本单元是一步完成的裸芯片或者小芯片Chiplet,我们称之为功能单元 (Function Unit),这些功能单元在封装内集成形成了SiP。
    发表于 03-13 14:43 1507次阅读
    一文详解<b class='flag-5'>芯片</b><b class='flag-5'>上</b>的集成技术

    m3芯片用在哪些设备 m3芯片在哪款电脑

    m3芯片用在哪些设备 搭载M3芯片的设备目前主要包括新款MacBook Air、13英寸MacBook Pro和24英寸iMac。据预测,苹果未来还计划将M3系列芯片应用于更多高端M
    的头像 发表于 03-12 18:03 3004次阅读

    M3芯片在哪款电脑

    M3芯片被应用于多款苹果电脑,以下是一些主要型号及其特点。
    的头像 发表于 03-11 16:38 912次阅读

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

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