STM32软件基础

2021/1/10 学习日志

  • STM32f1库函数开发学习
    • 软件基础
      • 固件库与CMSIS标准
      • 文件夹结构
      • C语言基础
      • STM32系统架构
      • STM32时钟系统

STM32f1库函数开发学习

软件基础


固件库与CMSIS标准

ARM是一个芯片标准设计公司,负责架构设计;
ST、TI是芯片公司,根据ARM公司提供的芯片内核标准(例如Cortex-M3)设计芯片,内核结构都相同,不同在于存储器容量、片上外设、串口数量、控制方法。

STM32软件基础
CMSIS分为3个基本功能层:
  • 核内外访问层:ARM公司提供的访问,定义处理器内部寄存器地址及其功能函数
  • 中间件访问层:ARM公司提供的访问,定义访问中间件的通用API
  • 外设访问层:定义硬件寄存器的地址以及外设的访问函数

简而言之,CMSIS规定了库函数的一些规范,例如系统初始化函数必须叫SystemInit,下拉输出模式必须交GPIO_ResetBits


文件夹结构

一. 官方库文件夹

STM32软件基础
结构介绍:
  • 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语言基础

  1. 位操作
运算符 含义 运算符 含义
& 按位与 ~ 取反
| 按位或 左移
^ 按位异或 >> 右移
  1. define宏定义
  1. ifdef条件编译
  1. extern外部变量申明
  1. typedef类型别名
    为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。
  1. 结构体

关于结构体的用法,详见下文:


结构体的用法



STM32系统架构

架构图:

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,可以超频,不过为了系统稳定性不建议超频。

E. 其他所有外设。从时钟图上可以看出,其他所有外设的时钟最终来源都是 SYSCLK。SYSCLK 通过 AHB 分频器分频后送给各模块使用。这些模块包括:

① 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 文件里。

来源:Chorgy

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月8日
下一篇 2021年1月8日

相关推荐