华大芯片时钟调试配置记录

华大F460系列出了好几款,手里有一款HC32F460PETB系列的芯片,去年官网上面给出的例程还是2.1版本,今年再去看的时候,驱动和例程已经更新到了3.0,对比之后发现驱动部分改变还比较大,虽然本质上还是对寄存器进行配置,但是配置形式和封装,还有宏的检查上面,感觉让人理解的话,更加困难一些。根据代码能跑就不要乱动的原则,本来是不想更新的,但是2.1的时候发现一些问题,比如PA11设置为输入的时候,总是读取不到低电平;使用keil的V6.16编译器的时候,就会造成功能很v5版本的不一样,keil的V6编译器与V5相比,有多快?想必用的人都身能体会!自从更换了V6编译器,编译一遍划水3分钟的好日子就一去不复返了。所以,更新驱动库就显得迫在眉睫了。

上一篇讲述了开机启动文件,对了,从启动开始,单步调试就能知道运行流程了。华大(现在改名小华半导体)芯片启动文件详细讲解_风一样的航哥的博客-CSDN博客

 今天来简单概述一下时钟的配置。能在数据手册和用户手册看到的东西就不多说了,总结起来大概就是这样子的:

首先外部高速时钟进来,通过选择器进行选择,这里选择有两个第一是外部高速时钟,第二是内部高速时钟作为PLL的时钟源,这里我们选择的是外部高速时钟,外部高速时钟进入PLL之前需要进行分频,为什么要分频呢?应该是消除外部干扰,比如8M的外部高速时钟进入后,进行8分频,这样的话就得到了1M的时钟,然后这1M的时钟再进行倍频,倍频后就得到了一个特别高速的时钟,这个时钟是无法进行使用的,因为频率太快了,所以还有进行再次的分频,分频后的时钟呢就可以作为系统时钟来使用了,系统时钟有了,我们再根据AHP和APB上外设的不同,对系统时钟进行分频处理,这样就得到了我们所需要的外设时钟了,然后根据不同的时钟进行通信。

                外部高速时钟
                   ↓
                   分频
                    ↓
                   倍频
                    ↓
            选择为系统时钟
                    ↓
            系统时钟分频
                    ↓
     不同的外设时钟总线再次分频
                    ↓
                    结束

今天遇到的问题是将8M晶振改为12M,因为keta开发板和petb两个开发板是不一样的。参考配置方法为:

华大hc32f460的官方板使用8Mhz无源晶振,关键点如下:
8M无源晶振配置:stcXtalCfg.enMode = ClkXtalModeOsc;
12M有源晶振配置:stcXtalCfg.enMode = ClkXtalModeExtClk;

           /* Switch system clock source to MPLL. */
            /* Use Xtal as MPLL source. */
            /* active crystal:ClkXtalModeExtClk,passive crystal:ClkXtalModeOsc */
                stcXtalCfg.enMode = ClkXtalModeExtClk;
                stcXtalCfg.enDrv = ClkXtalLowDrv;
                stcXtalCfg.enFastStartup = Enable;
                CLK_XtalConfig(&stcXtalCfg);
                CLK_XtalCmd(Enable);

以上问题解决。

配置12MHz有源晶振,具体配置总结如下:
(1)system_hc32f460.h的宏定义, XTAL_VALUE由8Mhz改为12Mhz
(2)keil工程配置XTAL改为12Mhz
(3)时钟初始化代码,stcXtalCfg.enMode = ClkXtalModeExtClk;(重点
(4)PLL锁相环按照手册要求配置,在频率范围内

 

在以上重点的地方:要结合硬件电路确认是无源晶振还是有源晶振,不然就会跟我一样,调到怀疑自己。那怎么区别有源还是无源晶振呢?通常说的有源晶振叫做石英晶体振荡器。 而无源晶振称为石英晶体谐振器简称晶体。 传统的有源晶振和无源晶振非常好区分,有源晶振一般最少得有三个以上引脚:Vcc+、Vcc-和输出端。 而无源晶振只有两个引脚。

 看这个晶振电路图,只有两个引脚,是无源晶振啦。要将stcXtalCfg.enMode,ll库中stcXtalInit.u8Mode,设置为CLK_XTAL_MD_OSC.

其他的分频系数,要根据自己需要进行计算。看懂用户用户手册就不难啦。

猜你喜欢

转载自blog.csdn.net/weixin_41579872/article/details/127756522