在core_cm3.c文件中有关于类型的定义
Core_cm3.c与启动文件一样都是底层文件
Ststem_stm32f10x.c文件是用来设置系统时钟和总线时钟 实现系统时钟的时候要用到
PLL(锁相环),需要操作寄存器。寄存器十一存储器映射的方式访问的。所以
这个c文件需包含stm32f10x.h
Stm32f10x.h包含了 stm32中的寄存器地址和结构体类型定义。
启动文件的作用:
初始化堆栈指针sp
初始化程序计数器指针pc
设置堆、栈的大小。
设置异常向量表的入口地址
配置外部SRAM作为数据存储器
设置C库的分支入口__main
调用了ststem_stm32f10x.c文件中的SystemIni()函数配置系统时钟
Stm32f10x_it.c是专门写中断服务函数的,定义了一些系统异常的接口
其他的普通中断函数由我们自己添加
Stm32f10x_conf.h 文件被包含进了stm32f10x.h.用来配置使用了哪些外设的
头文件,可以把用不到的头文件注释掉
PERIPH_BASE = 0x40000000, 0x40000000这个地址是偏上512Mb寻址空间的第一个地址。即外设基地址、
APB2PERIPH_BASE = PERIPH_BASE + 0x10000.因为stm32的不同外设挂在不同的总线上。Stm32有AHB总线、APB2总线、和APB2总线。
那APB2PERIPH_BASE为APB2总线外设基地址、
APB1 = 0x40000000
AHB = 0x40018000
STM32 参考手册的各个寄存器左上角一般有。地址偏移
这个地址偏移。这就是该寄存器组对应所在寄存器组基地址的偏移量。
Stm32为了实现低功耗, 设计了一个功能完善但非常复杂的时钟系统。普通的MCU一般只要设置好GPIO寄存器就可以使用了,但是STM32还有一个步骤就是开启外设时钟。
STM32有4个时钟源
1.高速外部时钟(HSE):以外部晶振作为时钟源,晶振频率可取范围为4~16MHz
2.高速内部时钟(HSI):由内部RC振荡器产生,频率为8MHz,不稳定
3.低速外部时钟(LSE):以外部晶振作为时钟源,主要提供给实时时钟模块,所以一般采用 32.768kHz。
4.低速内部时钟(LSI):由内部RC振荡器产生,也提供给实时时钟模块,频率大约40kHz。
与我们开发密切相关的时钟。
1.SYSCLK:系统时钟,是STM32大部分器件的时钟来源, 主要由AHB预分频器分配到各个部件
2.HCLK: 有AHB预分频器直接输出得到, 他是高速总线AHB的时钟信号, 提供给存储器、DMA及Cortex内核, 是Cortex内核运行的时钟,CPU主频就是这个信号,它的大小与STM32运算速度、数据存取速度密切相关。
3.FCLK:同样由AHB预分频器输出得到,是内核的“自由运行时钟”。 “自由”表现在它不来自时钟HCLK, 因此在HCLK时钟停止时FCLK也继续运行。它的存在可以保证,在处理其休眠时也能够采样到终端和跟踪事件,它与HCLK互动同步。
4.PCLK1: 外设时钟, 由APB1预分频器输出得到,最大分频为36MHz, 提供给挂载在APB1总线上的外设。
5.PCLK2: 外设时钟, 由APB2预分频器输出得到,最大分频为36MHz, 提供给挂载在APB2总线上的外设。
每个外设都配备有外设时钟的开关, 当不使用某个设备时, 可以把这个外设时钟关闭, 从而降低功耗, 所以,当我们使用外设的时候就要记得开启外设时钟。