老李的RT-THREAD学习02--改时钟
上一讲提过,RT-Thread默认HSI,即高速片内时钟,这玩意不准确,再加上温漂,用起来并不放心,尤其在当项目中用到了各种通讯设备,如UART,CAN,485等要求准确时钟的时候,一般会使用外部晶振,即HSE,现在来做一下切换
生成CubeMX工程
改时钟,需要用到CubeMX生成的函数,以省心省力。当然对底层熟悉的话也可以自己写。其实就是系统时钟的初始化的过程。
按下图设置,其余默认
1 进入时钟配置页面
2 按自己的板子设置好外部晶振的频率
3 F767的最高运行频率是216M,所以在此处输入216并回车,系统自动计算出所需要的时钟通路和相关参数
4 进入工程管理页面,输入工程要保存的路径,注意整个路径不能有中文,这是国外软件的通病
对应设置1,2,3,4,我用的是Keil MDK最新版,所以可以选V5.27
最后按5生成工程
5打开生成的工程
6 修改时钟函数
打开生成的工程,在main.c中找到SystemClock_Config这个函数,复制整个函数,不需要函数名,即图中蓝色的部分
修改 drv_clk.c
前文提到,需要在drv_clk.c中修改时钟函数,此时转到RT-Studio,找到drv_clk.c中的system_clock_config函数,将 { } 的内容替换为刚才复制的内容
这步的工作是将时钟初始化函数做了替换,系统已经是用外部晶振进行初始化工作了。
修改 HSE_VALUE 宏定义
但此时rt-thread这个操作系统并不知道系统时钟已经从默认的8MHz变为了12M,还需要通知一下操作系统
打开 stm32xxxx_hal_conf.h ,将HSE_VALUE的值改为外部晶振的实际频率,12M就写12000000
需要注意的是这个文件 stm32xxxx_hal_conf.h,其中的xxxx,是根据你芯片来的,F7系列,就是F7xx,F1系列就是F1xx
编译,运行,OK
如何证明此时的系统运行在外部晶振状态呢,很简单。
无源晶振的话,用镊子将外部晶振2个脚短路
有源晶振,就将输出脚对地短路
此时可以观察到LED的状态不再发生闪烁,系统停止运行
松开镊子,灯继续闪
完工
还有最后一件事,点赞 关注