dontium 发表于 2024-7-20 19:50

HC32L13x_DDL_Rev2.1.0库,不该踩的坑

项目使用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 带中断的,在低功耗应用中可能就会出现进不了低功耗模式的时候,然后还不好找原因。
页: [1]
查看完整版本: HC32L13x_DDL_Rev2.1.0库,不该踩的坑