2021/1/10 学习日志
- STM32f1库函数开发学习
-
- 软件基础
-
- 固件库与CMSIS标准
- 文件夹结构
- C语言基础
- STM32系统架构
- STM32时钟系统
STM32f1库函数开发学习
软件基础
固件库与CMSIS标准
ARM是一个芯片标准设计公司,负责架构设计;
ST、TI是芯片公司,根据ARM公司提供的芯片内核标准(例如Cortex-M3)设计芯片,内核结构都相同,不同在于存储器容量、片上外设、串口数量、控制方法。
- 核内外访问层:ARM公司提供的访问,定义处理器内部寄存器地址及其功能函数
- 中间件访问层:ARM公司提供的访问,定义访问中间件的通用API
- 外设访问层:定义硬件寄存器的地址以及外设的访问函数
简而言之,CMSIS规定了库函数的一些规范,例如系统初始化函数必须叫SystemInit,下拉输出模式必须交GPIO_ResetBits
文件夹结构
一. 官方库文件夹
- USER
- Template.uvprojx 工程文件
- main.c 文件
- system_stm32f10x.c 文件
- stm32f10x.h
- stm32f10x_conf.h
- system_stm32f10x.c/h
- stm32f10x_it.c/h
- DebugConfig 自动生成的调试配置文件夹
- Listings 自动生成的编译中间文件夹(删)
- Objects 自动生成的编译中间文件夹(删)
- OBJ(隐) 替换自动生成的Listing/Objects文件夹,存放编译过程文件、hex文件
- CORE 官方固件库启动文件
- core_cm3.c/h
- startup_stm32f10x_hd.s RCT6 FLASH 256KB,使用大容量类型
- FWLib 存放官方库函数源代码
- src 存放 .c 文件,每个外设对应一个文件,在工程里选择对应的C文件加入
- inc 存放 .h 文件,每个外设对应一个文件,在魔术棒里添加头文件路径
- HARDWARE 需要用到的外设代码,例如:
- LED
- PWM
- SYSTEM 存放每个实验都要用的共用代码
- sys
- usart
- delay
- README 备注文件
C语言基础
- 位操作
运算符 | 含义 | 运算符 | 含义 |
---|---|---|---|
& | 按位与 | ~ | 取反 |
| | 按位或 | 左移 | |
^ | 按位异或 | >> | 右移 |
- define宏定义
- ifdef条件编译
- extern外部变量申明
- typedef类型别名
为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。
- 结构体
关于结构体的用法,详见下文:
结构体的用法
STM32系统架构
架构图:
-
高速时钟
- HSI (High Speed Internal),高速内部时钟,RC振荡器,8MHz
- HSE (High Speed External),高速外部时钟,石英/陶瓷谐振器/外部时钟源,4~16MHz
- PLL (Phase Locked Loop),锁相环倍频输出,可2~16倍频,最大不超过72MHz
-
低速时钟
- LSI (Low Speed Internal),低速内部时钟,RC振荡器,40kHz。独立看门狗只能使用LSI;可作为RTC (Real Time Clock,实时时钟)时钟源
- LSE (Low Speed External),低速外部时钟,石英晶体频率32.768kHz,RTC的主要时钟源
时钟图解剖:
A. MCO 是 STM32 的一个时钟输出 IO(PA8),它可以选择一个时钟信 输出,可以选择为 PLL 输出的 2 分频、HSI、HSE、或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。B. RTC 时钟源,从图上可以看出,RTC 的时钟源可以选择 LSI,LSE,以及HSE 的 128 分频。
C. 此处 USB 的时钟是来自 PLL 时钟源。STM32 中有一个全速功能的 USB 模块,其串行接口引擎需要一个频率为 48MHz 的时钟源。该时钟源只能从 PLL 输出端获取,可以选择为 1.5 分频或者 1 分频,也就是,当需要使用 USB模块时,PLL 必须使能,并且时钟频率配置为 48MHz 或 72MHz。
D. STM32 的系统时钟 SYSCLK,它是供 STM32 中绝大部分部件工作的时钟源。系统时钟可选择为 PLL 输出、HSI 或者 HSE,最大频率为 72MHz,可以超频,不过为了系统稳定性不建议超频。
① AHB 总线、内核、内存和 DMA 使用的 HCLK 时钟。
② 通过 8 分频后送给 Cortex 的系统定时器时钟,也就是 systick 了。
③ 直接送给 Cortex 的空闲运行时钟 FCLK。
④ 送给 APB1 分频器。APB1 分频器输出一路供 APB1 外设使用(PCLK1,最大频率 36MHz),另一路送给定时器(Timer) 2、3、4 倍频器使用。
⑤ 送给 APB2 分频器。APB2 分频器分频输出一路供 APB2 外设使用(PCLK2,最大频率 72MHz),另一路送给定时器(Timer) 1 倍频器使用。
APB1 和 APB2 的区别
APB1 上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等APB2 上面连接的是高速外设,包括 UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等
STM32时钟系统的配置除了初始化的时候在 system_stm32f10x.c 中的 SystemInit() 函数中之外,其他的配置主要在 stm32f10x_rcc.c 文件里。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!