系统时钟的设置在运行MCU时是十分关键的问题,你需要知道你的CPU跑在什么样的速度,使用什么样的时钟,如何设置。这些问题我们都在这一节一一讲述,并且同时将会通过硬件参数的系统滴答时钟SysTick来进行精确定时。
Stm32f051系列属于cortex m0系列内核,时钟速率最快可以跑到接近50MHZ左右,那么其内核时钟如何产生的了?我们首先看看下面的时钟结构图:
图中的我们可以看到,M0的时钟实际上是有多种选择途径的,你采用外部高速晶振时钟可以,也可以采用内部的高速时钟,最终都要通过一个PLL进行倍频的,倍频之后再分频提供给AHB总线,AHB总线上挂了系统CPU,AHB分频后的时钟就是CPU的工作时钟了。之后还要通过APB时钟分频提供给其他的外设使用。上面所分析的就是M0内部时钟是如何产生的。知道这些了,我们就来通过KEIL编译环境对这个工作时钟状态进行设置。
我们首先结合软件程序进行讲解。首先看看通过keil建立工程项目,如下图所示:
软件准备:
Keil的工程树建立如下图所示:lib中加入gpio和rcc两个库文件,分别用于设置GPIO和rcc时钟。用户需要编写systick.c文件用于设置时钟滴答。
如上图所示,其中在system_stm32f0xx.c文件中设置了多系统时钟,打开此文件,我们看见下面一个定义:
这里面定义了三种时钟方式,我们采取第二种,采用8MHz外部时钟作为主时钟。HSI称为高速内部振荡时钟,HSE称为外部振荡时钟。同时在文件系统中定义系统内核时钟为48MHZ。
下面一段代码定义了HSI通过PLL配置为48MHZ:
系统外部时钟模型如下:
此在system_stm32f0xx.c文件内定义好了系统时钟,那么在启动项首先直接指向SystemInit,启动项文件我们在startup_stm32f0xx.s中可以找到如下代码:
startup_stm32f0xx.s是建立stm32f051 keil工程项目后MDK自动产生的。可以看到系统启动后首先确定系统时钟,然后才进入住函数。系统时钟配置好后,我们在来通过SysTick来进行精确定时,来驱动LED进行闪烁,这里面设置ms级的配置,然后设置10s闪烁,大家下载程序后可以对照时钟看是不是10s进行闪烁。
首先建立一个延迟函数,nTime作为定时数。SysTick配置通过设置为1ms,为SystemCoreClock / 1000:
并且通过TimingDelay_Decrement调动中断,代码如下:
在stm32f0xx_it.c 中定义 SysTick_Handler中断函数,函数调用TimingDelay_Decrement:
最后我们调用上面编写的systick.c子函数,编写主函数如下:
实验现象:
Led灯按照1s等间隔的闪烁,精确定时。
设计资源 培训 开发板 精华推荐
- 科学家研发基于AI的身份验证工具 可保护车辆免受网络攻击威胁
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 面向未来驾驶体验 博世推出新型微电子技术
- 英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
- 5C超充,该怎么卷?
- 《2025年度中国汽车十大技术趋势》正式揭晓!你最看好哪个?
- Microchip推出新型VelocityDRIVE™软件平台和车规级多千兆位以太网交换芯片,支持软件定义汽车
- 英特尔中国正式发布2023-2024企业社会责任报告
- can转485数据是如何对应的
- MCU今年的重点:NPU和64位