上一篇介绍了怎么用内部高速时钟做系统时钟,
内部时钟好是好,就是3%的偏差对于一些苛刻的场合也许不是那么适用.
那么现在,是时候适用外部晶振作为系统时钟了.
这颗芯片,如果使用晶振,在写程序前需要先写配置字.
好了,那就先说说怎么写配置字.
我手上的是JlinkV8,按官方说法,只要使用JLinkBurner.exe这个软件就能写.
这个软件在哪里?
在安装了Keil插件之后,这个软件就会出现你的Keil安装目录下.
如我电脑的就在”C:\Keil_v5\JLinkBurner”位置.
由于这个软件调用的是Jlink的烧录函数进行操作的,所以还有必要安装Jlink的驱动…
最好装个最新版的吧.
还有,,,特别要注意的地方!!!
一般我们用Jlink的SW模式调试的时候只要接SWDIO,SWCLK,GND这三个接口就好了.
而如果烧录配置字还这么用的话会提示解锁失败,怎么办,怎么办,怎么办,,,,
很简单,再把RST接口也接上就好了.
大概是这样,
好了,线也接了,接下来就是使用JLinkBurner了,
用之前,最好先详细阅读芯片手册的”芯片配置章节”.
打开JLinkBurner软件,芯片类型选择”HP8P506”,
可以看到默认的选项配置,我就不一一解读了,芯片手册上已经描述得很详细了.
首先要说明的是,我外部晶振接在了PB10,PB11这两个接口,晶振频率是8MHz.
我的调试接口是PA0,PA1,,,这个配置字也不能动,,,
其他的,先不管了,现在用不着.
如图,我只要配置这四个选项就可以……
为什么我的晶振明明是8Mhz,,INTOSC_SEL位置还要选择16Mhz.,,因为只有4M跟16M可以选,,,
只要仔细看看芯片手册就知道的了…
选择好之后,点击烧录配置字….
当软件提示”烧录配置字成功”后,这步就完成了.,..
下一步,写代码….
我们的目标,使用外部高速晶振,经PLL倍频到48M,作为系统主时钟使用,.
流程其实跟使用内部高速时钟差不多,
使能外部高速时钟
|
将外部高速时钟设置成PLL时钟输入
|
将PLL设置成48M输出
|
将系统时钟设置成PLL输入,不分频
|
大功告成
由上篇的代码改动一下就可以了.
//打开所有外设时钟
DeviceClockAllEnable();
//原始时钟源选择为外部晶振
SCU_SysClkSelect(SCU_CLK_XTAL);
//打开PLL锁相环,输入为内部HRC 16M,输出为48M,系统时钟使用PLL
PLLClock_Config(Enable,SCU_PLL_OUT8M,SCU_PLL_48M,Enable);
//系统时钟后分频为1:1
SCU_RegUnLock();
SCU_SysClk_Div1();
SCU_RegLock();
GPIO_InitTmp.Func = GPIO_Reuse_Func3; //复用功能3
GPIO_InitTmp.Dir = GPIO_Direction_Output; //设置为输出
GPIO_InitTmp.DS = GPIO_DS_Output_Strong; //大电流
GPIO_InitTmp.ODE = GPIO_ODE_Output_Disable; //开漏禁止
GPIO_InitTmp.PDE = GPIO_PDE_Input_Disable; //弱下拉禁止
GPIO_InitTmp.PUE = GPIO_PUE_Input_Disable; //弱上拉禁止
GPIO_InitTmp.Signal = GPIO_Pin_Signal_Digital; //管脚类型为数字模式
GPIO_Init(GPIO_Pin_A9,&GPIO_InitTmp);
//CLKOUT0输出时钟为系统时钟
SCU_RegUnLock();
SCU->SCLKEN0.CLKOUT0_SEL = 1;
SCU_RegLock();
编译,下载.用示波器看PA9脚,
48M妥妥的,实验完成.