打印
[其他]

HC32L13x_DDL_Rev2.1.0库,不该踩的坑

[复制链接]
836|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dontium|  楼主 | 2024-7-20 19:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
V2, L13, ev, HC
项目使用HC32L130,刚用,在做芯片初化时,有SysTick中断,怎么调也调不好,
程序是这样的:
int32_t main(void)
{

        ClkConfig();      //配置PLL时钟48MHz
        // 定时1mS
        SystemCoreClockUpdate();
        SysTick_Config(SystemCoreClock / 1000 );

        peripherInit();   // 各种外围初始化。有ADC、I2C、SPI、PWM等


    while(1)
    {
          ........
    }  
}

反复检查程序是正确的,又将小华的例程运行一次,可以产生SysTick
就又回到我的程序,从寄存器开始跟踪,检查tick的设置正常,然而经过peripherInit()以后,就不正常了。

最后发现,官方的初始化程序用到的延时函数,会用到系统的tick,
在ddl.c中,有delay1ms、delay100us、delay10us函数,均用改写SysTick寄存器组中的寄存器值。

解决办法:
1、自己编写不使用SysTick寄存器的延时函数,
2、把SysTick_Config放到peripherInit后面。

使用特权

评论回复
沙发
supergoodmoon| | 2024-7-23 11:20 | 只看该作者
这个是个坑啊,记住备用

使用特权

评论回复
板凳
yang377156216| | 2024-7-25 15:00 | 只看该作者
用的时候确实得注意下,我见过还有一个坑的例程,总喜欢初始化一个 systick 带中断的,在低功耗应用中可能就会出现进不了低功耗模式的时候,然后还不好找原因。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:官向官来民向民,穷人向的是穷人

150

主题

1170

帖子

10

粉丝