前言
记录一下在开发华大芯片过程中遇到的一些小问题和心得,留作笔记,常看常新。
遇到的问题
1、关于切换时钟源问题
当工程从boot程序跳转到app程序后,需要切换时钟源。L13x系列芯片默认时钟源为内部高速时钟,频率为4MHz,需要切换至内部高速时钟,24MHZ。
切换方式有两种,一是直接升频,二是通过切换时钟源后再升频,实测个人项目中采用方法二
//方法一 直接对内部高速时钟源进行升频
_SysctrlUnlock();
Sysctrl_SetHCLKDiv(SysctrlHclkDiv128);
Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);
_SysctrlUnlock();
Sysctrl_SetHCLKDiv(SysctrlHclkDiv1);
//方法二 先切换内部低速时钟在切换内部高速时钟
Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz);
Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
Sysctrl_SysClkSwitch(SysctrlClkRCL);
Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);
Sysctrl_SysClkSwitch(SysctrlClkRCH);
Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);
2、关于无法进入定时器中断问题
因开发项目采用时间片轮询法模拟程序前后台,在boot跳转至app程序后,无法进入定时器中断,触发对应时间标志位。
调整方法为:修改.s文件中,app代码段的启动地址,并重新编译,且需要注意keil的编译版本。实测个人项目在使用6版本编译存在问题,切换至5版本后正常,后再次切换6版本后也正常
3、关于flash擦除失败问题
解决办法:查阅手册找到flash擦除步骤,打开官方flash.c文件找到扇区擦除函数对比,发现该函数中解除写保护位置与手册中提供的步骤不一致。
以下为原擦除函数
//原擦除函数
en_result_t Flash_Sec