假期备战蓝桥杯stm32学习笔记(一)

来源:互联网 发布:上海话剧艺术中心淘宝 编辑:程序博客网 时间:2024/04/30 12:32

在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总线上的外设。

 

每个外设都配备有外设时钟的开关, 当不使用某个设备时, 可以把这个外设时钟关闭, 从而降低功耗, 所以,当我们使用外设的时候就要记得开启外设时钟。

 


0 0