搜索
bottom↓
回复: 43

华大单片机HC32L136K8 神仙级BUG ?【编译器版本不同所致】

[复制链接]

出0入213汤圆

发表于 2021-5-15 11:06:47 | 显示全部楼层 |阅读模式
本帖最后由 jyrpxj 于 2021-5-15 22:18 编辑

芯片:HC32L136K8 QFP64
IDE: MDK 5.33
仿真器: DAP

官方下载的库里面的例程

HC32L136_SDK\驱动库及样例\hc32l13x_ddl_Rev1.9.1\example\lcd\lcd_mode\source\main.c

int32_t main(void)
{
    Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE);            ///< 使能RCL时钟   //BUG:运行完此句后,hclk_prs变成了5  ,即32分频了
    Sysctrl_SetRCLTrim(SysctrlRclFreq32768);                ///< 配置内部低速时钟频率为32.768kHz

    Sysctrl_SetPeripheralGate(SysctrlPeripheralLcd,TRUE);   ///< 开启LCD时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);  ///< 开启GPIO时钟
   
    App_PortCfg();               ///< LCD端口配置
    App_LcdCfg();                ///< LCD模块配置

    Lcd_ClearDisp();             ///< 清屏
    Lcd_WriteRam(0,0x0f0f0f0f);  ///< 赋值寄存器LCDRAM0
    Lcd_WriteRam(1,0x0f0f0f0f);  ///< 赋值寄存器LCDRAM1

    while(1)
    {
        ;
    }
}

再定位到库 HC32L136_SDK\驱动库及样例\hc32l13x_ddl_Rev1.9.1\driver\src\sysctlr.c


en_result_t Sysctrl_ClkSourceEnable(en_sysctrl_clk_source_t enSource, boolean_t bFlag)
{
    en_result_t enRet = Ok;
    uint32_t u32Temp;
   
    _SysctrlUnlock();
    bFlag = !!bFlag;

    u32Temp = M0P_SYSCTRL->PERI_CLKEN;
    switch (enSource)
    {
        case SysctrlClkRCH:
            M0P_SYSCTRL->SYSCTRL0_f.RCH_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->RCH_CR_f.STABLE))
            {
                ;
            }
            break;

        case SysctrlClkXTH:
            M0P_SYSCTRL->PERI_CLKEN_f.GPIO = TRUE;
            M0P_GPIO->PDADS |= 3u;         
            M0P_SYSCTRL->SYSCTRL0_f.XTH_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->XTH_CR_f.STABLE))
            {
                ;
            }
            break;

        case SysctrlClkRCL:
            
            M0P_SYSCTRL->SYSCTRL0_f.RCL_EN = bFlag;  //BUG在此,运行完此句 hclk_prs变成了5  ,即32分频了
            while(bFlag && (1 != M0P_SYSCTRL->RCL_CR_f.STABLE))
            {
                ;
            }
            break;

        case SysctrlClkXTL:
            M0P_SYSCTRL->PERI_CLKEN_f.GPIO = TRUE;
            M0P_GPIO->PCADS |= 0xC000;
            M0P_SYSCTRL->SYSCTRL0_f.XTL_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->XTL_CR_f.STABLE))
            {
                ;
            }
            break;

        case SysctrlClkPLL:
            M0P_SYSCTRL->PERI_CLKEN_f.ADC = TRUE;
            M0P_BGR->CR_f.BGR_EN = TRUE;
            delay10us(20);
            M0P_SYSCTRL->SYSCTRL0_f.PLL_EN = bFlag;
            while(bFlag && (1 != M0P_SYSCTRL->PLL_CR_f.STABLE))
            {
                ;
            }
            break;

        default:
            enRet = ErrorInvalidParameter;
            break;
    }
    M0P_SYSCTRL->PERI_CLKEN = u32Temp;
   
    return enRet;
}

发现, M0P_SYSCTRL->SYSCTRL0这个寄存器怪得很,是位操作不正常吗?

用华大单片机的可以试试,这真的是个神仙级BUG吗?仿真调试过程,有图有真相


由于时钟配置不当,已经2片芯片因程序问题无法再连接仿真器,芯片变砖了。


===============编辑============
加入编译器的配置截图

===============编辑============
已解决:
有坛友贴图说例程跑起来没毛病,于是怀疑是编译器。
用V6的编译器就会出问题,用V5的就可以。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入442汤圆

发表于 2021-5-15 11:17:17 来自手机 | 显示全部楼层
没用过,如果是你说的,可能他们ccu的bug,写使能时把分频复位了。手动再配一下分频呗。分频跟pll vco无关,不需要等状态,随时随地随便分。

出0入213汤圆

 楼主| 发表于 2021-5-15 11:22:17 来自手机 | 显示全部楼层
wye11083 发表于 2021-5-15 11:17
没用过,如果是你说的,可能他们ccu的bug,写使能时把分频复位了。手动再配一下分频呗。分频跟pll vco无关 ...

只想知道:使能时钟会改变当前系统时钟的分频?还需手动改回分频?

出100入101汤圆

发表于 2021-5-15 11:24:17 来自手机 | 显示全部楼层
国产mcu坑多

出0入442汤圆

发表于 2021-5-15 11:25:08 来自手机 | 显示全部楼层
jyrpxj 发表于 2021-5-15 11:22
只想知道:使能时钟会改变当前系统时钟的分频?还需手动改回分频?

我又不是设计那个芯片的。。估计是工程师软件出身,应付老板,凑合着能用拉倒

出0入213汤圆

 楼主| 发表于 2021-5-15 11:28:24 | 显示全部楼层
手头有华大这款单片机的不妨确认一下官方这个例程,以防以后掉坑里。

出0入0汤圆

发表于 2021-5-15 12:42:22 | 显示全部楼层
这个型号和封装,我昨天的一个前同事开的SMT工厂正好还有10多K需要清仓
额耳温枪上用的。

出0入0汤圆

发表于 2021-5-15 13:32:08 | 显示全部楼层
我用了1.9.2的库,也遇到一个systick的bug,我找了很久还定位到的。就是你打开systick中断,当调用delayus函数时,systick配置会被修改了。

出0入162汤圆

发表于 2021-5-15 14:20:03 来自手机 | 显示全部楼层
ANHOME 发表于 2021-5-15 12:42
这个型号和封装,我昨天的一个前同事开的SMT工厂正好还有10多K需要清仓
额耳温枪上用的。 ...

7×7还是10×10的封装?

出15入186汤圆

发表于 2021-5-15 15:20:53 | 显示全部楼层
MCU本身没有BUG,只是库写的不够好,我用华大的都是寄存器编程,不用它的库,还不错,指标非常好

出0入20汤圆

发表于 2021-5-15 15:22:36 | 显示全部楼层
MDK的话,试试地址访问断点功能,带上调试器跑一下,看看是否是软件修改的.如果软件根本就没写上去,那有可能真的是硬件BUG

出0入0汤圆

发表于 2021-5-15 15:34:21 | 显示全部楼层
zhikunWang 发表于 2021-5-15 13:32
我用了1.9.2的库,也遇到一个systick的bug,我找了很久还定位到的。就是你打开systick中断,当调用delayus ...

这也能叫bug?
库的delayus 和 delayms 都是用 systick做的。不修改寄存器 怎么实现延时?

出10入12汤圆

发表于 2021-5-15 15:55:29 | 显示全部楼层
en_result_t Uart_SendDataPoll(M0P_UART_TypeDef* UARTx, uint8_t u8Data)   使用这个发动有时候会卡在   while(FALSE == Uart_GetStatus(UARTx,UartTC))

出0入84汤圆

发表于 2021-5-15 16:39:02 | 显示全部楼层
说句良心话,华大国产里面算是好的了。 各项指标都还不错,今年也有款产品切到了华大。

出0入84汤圆

发表于 2021-5-15 16:39:30 | 显示全部楼层
主要是不兼容STM32。如果软件兼容STM32那就更没得说了

出0入213汤圆

 楼主| 发表于 2021-5-15 16:48:35 来自手机 | 显示全部楼层
不用位变量操作,改为直接整个寄存器先读出来再与/或操作,再写入寄存器,就OK。
是编译器背锅,还是芯片硬件自身bug?
鬼知道还有没有其他的坑?

出0入32汤圆

发表于 2021-5-15 17:08:13 | 显示全部楼层
zhikunWang 发表于 2021-5-15 13:32
我用了1.9.2的库,也遇到一个systick的bug,我找了很久还定位到的。就是你打开systick中断,当调用delayus ...

库函数里面的delay函数,就是靠修改滴答定时器的装载值,然后倒计时判断精确延时的,如果你之前配置的中断,肯定会被影响到。这个算不上BUG。

我遇到一个问题,是使能PLL时钟,但实际测试频率怎么都跟自己设置的不一致,找不到问题所在,随后不得不改为使用内部RCH,好歹内部即使24M,还算比较准。

出0入213汤圆

 楼主| 发表于 2021-5-15 17:18:16 来自手机 | 显示全部楼层
令狐冲 发表于 2021-5-15 17:08
库函数里面的delay函数,就是靠修改滴答定时器的装载值,然后倒计时判断精确延时的,如果你之前配置的中 ...

你就是踩了跟我楼主位一样的坑,库里面使能时钟会影响系统分频参数。

出0入0汤圆

发表于 2021-5-15 17:22:26 | 显示全部楼层
AWEN2000 发表于 2021-5-15 14:20
7×7还是10×10的封装?

完整型号是: HC32L136K8TA-LQ64,7x7mm

出70入145汤圆

发表于 2021-5-15 18:18:38 | 显示全部楼层
华大的单片机的仿真接口建议把ISP要用的脚也引出来,比如13X系列的BOOT0/PD03。平时接下拉电阻到GND。当仿真器连不上时可以把BOOT0接VCC,然后复位下MCU,让MCU进入ISP模式。使用华大的上位机 HDSC MCU Programmer重新擦除芯片就可以连仿真器了。
我的华大单片机的仿真口为VCC,GND,SWCLK,SWDIO,BOOT0,有时把RESET也接出来。

出70入145汤圆

发表于 2021-5-15 18:24:59 | 显示全部楼层
我使用IAR+HC32L130J8TA测试了下(厂家130和136使用的库是同一个),测试开RCL时正常,没有你说的32分频的问题。接入函数单步走也没问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出75入88汤圆

发表于 2021-5-15 18:32:47 | 显示全部楼层
yuyu87 发表于 2021-5-15 15:20
MCU本身没有BUG,只是库写的不够好,我用华大的都是寄存器编程,不用它的库,还不错,指标非常好 ...

用寄存器方式,此句是核心!!!

我们是华大的小代理。曾经我们给所有用户推荐的策略是。用寄存器编程。
如果不想花时间搞懂,按如下流程操作
1.  先用库方式配置正确,
2.  仿真状态下,运行正确情况下对所有寄存器配置截图。并 保存
3.  再用寄存器方式做改写,直到运行时配置与已保存截图。

不过TMD,就算这样,上周又出问题了。
460系列仿真状态下没法直接查询寄存器。
想了好久只能采用watch方式做寄存器参数查询。在按照上述流程截图。

干!!!!  被客户骂死。不过是,好的是帮客户提供了解决思路。

说真心话,2年多时间感觉,华大的芯片硬件还行,软件真垃圾!!真垃圾!!!真的很垃圾!!!
缺货他妈缺的一逼。而且不管你先前是否有量产,一律回复没货。
完全没法给客户交待。只能苦逼兮兮的帮客户换芯片改程序,从元旦开始,过年只休息了5天,其他时间全是找芯片改程序。说起来都是泪

总结,华大硬件还行。软件,客服,FAE,采购流程配合等等,其他都不行。现在对关系好的客户说的是,能不用华大尽量不用。
MD,3年时间被狗吃了,这个小代理资质现在看来完全没任何意义和价值。

出0入22汤圆

发表于 2021-5-15 18:36:10 | 显示全部楼层
zhikunWang 发表于 2021-5-15 13:32
我用了1.9.2的库,也遇到一个systick的bug,我找了很久还定位到的。就是你打开systick中断,当调用delayus ...

你这个是因为daley函数调用systick来延时导致的。

出0入22汤圆

发表于 2021-5-15 18:38:04 | 显示全部楼层
华大的IC ,还有很多搞笑的BUG,断点打在某个定时器使能上,会导致退出debug状态。

出0入213汤圆

 楼主| 发表于 2021-5-15 18:42:14 来自手机 | 显示全部楼层
hailing 发表于 2021-5-15 18:24
我使用IAR+HC32L130J8TA测试了下(厂家130和136使用的库是同一个),测试开RCL时正常,没有你说的32分频的 ...

编译器背锅? 我现在把这句由位操作改为寄存器读,改,写入操作,才不会影响分频参数。

出0入8汤圆

发表于 2021-5-15 22:19:25 | 显示全部楼层
华大的硬件SPI也是个奇葩,需要延时才能工作正常。

出0入42汤圆

发表于 2021-5-16 06:16:48 来自手机 | 显示全部楼层
ADC 才搞笑,时钟分频不够,必须降低主频才能用,然后刷新TFT必须高频,然后就不停的改分频,真是欢乐。还好勉强可以用。

出0入162汤圆

发表于 2021-5-16 07:22:17 来自手机 | 显示全部楼层
将就用吧。
就是没货没货没货,改完程序做了一批后面就没货了,代理也分不到货

出70入145汤圆

发表于 2021-5-16 07:56:14 来自手机 | 显示全部楼层
跟先入为主有很大的关系,大家很多吐槽的是华大与ST不同的地方。而华大现在最大的问题是压根拿不到货。我只调过华大的M0,华大的M0的ADC可以使用外部基准输入和内部基准电压,并且基准电压可以是1.25V这点比ST以及一堆兼容ST的M0强多了。M0的基准电压输入可以是1.25V这点华大自己的M4都做不到。

出0入4汤圆

发表于 2021-5-16 10:11:36 来自手机 | 显示全部楼层
L136之前也遇到过类似的问题,调用一些库函数容易把时钟分频配置给复位。

出0入162汤圆

发表于 2021-5-16 10:41:56 来自手机 | 显示全部楼层
hailing 发表于 2021-5-16 07:56
跟先入为主有很大的关系,大家很多吐槽的是华大与ST不同的地方。而华大现在最大的问题是压根拿不到货。我只 ...

华大ADC的序列转换比较好,可以任意指定通道顺序。
就是ADC的时钟比较麻烦,时钟直接取PCLK,主频太高就得人为降低PCLK。
采样时间设定分频系数太小,如果要加长采样时间就得分频PCLK

出0入135汤圆

发表于 2021-5-16 11:23:35 来自手机 | 显示全部楼层
这都不是事,最主要是没货,没货不是说买不到,翻五倍还是随时能买到的

出0入0汤圆

发表于 2021-5-16 13:36:35 | 显示全部楼层
这个情况我之前好像在Keil5.33版本上是程序会卡死,基本是编译器兼容性的问题,5.32和5.34都不会有问题,没做过多调试,考虑是不是编译器优化的问题,所以换了版本继续用!

出100入101汤圆

发表于 2021-5-16 14:46:54 | 显示全部楼层
jyrpxj 发表于 2021-5-15 18:42
编译器背锅? 我现在把这句由位操作改为寄存器读,改,写入操作,才不会影响分频参数。 ...

记得m0的mcu不支持位带操作

出0入8汤圆

发表于 2021-5-16 23:11:19 | 显示全部楼层
这个不是芯片的BUG,是库的问题,库为了方便,用了--union 联合--来操作寄存器的位,这个在V5版本编译器是没问题的,但是V6版本编译器时候就会出现问题了,你们改用V5编译器或者直接寄存器操作就行了。

出0入4汤圆

发表于 2021-5-17 10:07:36 | 显示全部楼层
华大的最好是寄存器编程,他们家的库真的是太差了

出0入0汤圆

发表于 2021-5-17 10:55:15 | 显示全部楼层
它们库太乱了,还有几个版本

出0入0汤圆

发表于 2022-4-15 00:01:40 | 显示全部楼层
前辈请教一下,按照你这样修改编译器V5 还是不能解决问题

出0入0汤圆

发表于 2022-5-29 23:04:01 来自手机 | 显示全部楼层
442502587 发表于 2021-5-15 15:55
en_result_t Uart_SendDataPoll(M0P_UART_TypeDef* UARTx, uint8_t u8Data)   使用这个发动有时候会卡在    ...
(引用自13楼)

我也遇到了这个问题,用的是hc32l110的LPUART,开深度休眠时会遇到这个问题,你是怎么解决的?

出0入4汤圆

发表于 2022-5-30 00:50:08 来自手机 | 显示全部楼层
现在讨论华大mcu的意义何在?他们家除了460和4A0,别的通通没货。

出1310入193汤圆

发表于 2022-5-30 10:36:37 | 显示全部楼层
缺锌少铁时代
arm内核生产线靠外援
国产封装而已  
没有办法

接下来 在紧张的话   还是STM返回
毕竟财大气粗  晶圆这块有优势

出180入85汤圆

发表于 2022-5-30 16:00:48 | 显示全部楼层
bzbs 发表于 2021-5-15 18:32
用寄存器方式,此句是核心!!!

我们是华大的小代理。曾经我们给所有用户推荐的策略是。用寄存器编程。 ...
(引用自22楼)

同事刚想选用华大的4a0,这个能用吗?

出0入0汤圆

发表于 2022-5-30 17:15:12 | 显示全部楼层
建议:仅是建议:系统时钟初始化,完毕,然后再根据需要,设置外设分频;
这样,会不会更实用。因为某些时钟下,某些外设可能不支持8分频,所以需要你重新设置分频。这也是很合理的吧。
先设置8分频,再设置时钟,你还希望他支持你的8分频,他在上电初期,就是个小孩。可能不是很智能的。所以需要,先设定时钟,再确认外设分频,这也是很合理的。

出0入4汤圆

发表于 2022-5-30 17:17:30 来自手机 | 显示全部楼层
yz_altang 发表于 2022-5-30 16:00
同事刚想选用华大的4a0,这个能用吗?
(引用自42楼)

4a0没问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 11:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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