- Date:2023-05-25

  • Time:15:57
  • Subject: none
  • Tags: #stm32
    [[2023-05]]

基于CMSIS应用程序文件描述

  1. Pasted image 20230604222756|600

STM32开发文件结构分布

  1. Pasted image 20230604222818|600

HAL库的用户配置文件(stm32f1xx_hal_conf.h)

  1. 裁剪HAL库外设驱动源码(不进行编译)
    1. /#ifdef /#endif 的使用
  2. 设置外部高速晶振频率(HSF)(根据开发板实际情况设置)
  3. 设置外部低速晶振频率(根据开发板实际情况设置)

HAL库使用注意事项

  1. 使用HAL库出现问题,还是得通过参考手册检查是否硬件操作是否有问题
  2. 尽量不通过修改库源码实现功能,这样不方便库更新
  3. HAL库可能会存在错误,要有质疑精神
  4. 有些HAL库API函数执行效率偏低,我们可能会直接通过操作寄存器的方式代替

- Date:2023-05-25

  • Time:12:53
  • Subject: none
  • Tags: #stm32
    [[2023-05]]

CMSIS简介

  1. CMSIS (微控制器软件接口标准):Cortex Microcontroller Software Interface Standard,是由ARM和与其合作的芯片厂商、软件工具厂商,共同制定的标准
    1. Pasted image 20230525151257|600

HAL库简介

  1. ST 为了方便用户开发 STM32芯片开发提供了三种库:
    1. 标准外设库 (Standard Peripheral Libraries)
      1. F0/F1/F3/F2/F4/L1
      2. 目前已停止维护
    2. HAL库(硬件抽象层):Hardware Abstraction Layer
      1. 全系列兼容
      2. ST目前主推的库
      3. 兼容性、易移植性
      4. 效率低
    3. LL库:Low Layer
      1. 全系列兼容
      2. 与HAL库捆绑发布
      3. 轻量级、效率高
      4. 不匹配部分复杂外设

STM32Cube固件包浅析

STM32Cube固件包文件夹简介

  1. Pasted image 20230525151957|600
  2. Pasted image 20230525152058|600
  3. Pasted image 20230525152106|600

CMSIS文件夹关键文件

  1. Pasted image 20230525152122|600
  2. Pasted image 20230525152258|600

Device和Include文件夹的关键文件介绍

  1. Pasted image 20230525152330|600
  2. 可以从cube固件包里面找

HAL库框架结构

HAL库文件夹结构

  1. Pasted image 20230525153514|600
    1. Src(Source):外设驱动源码
    2. Inc(Include):外设驱动源码头文件

HAL库文件介绍

  1. Pasted image 20230525153656|600

HAL库API函数和变量命名规则

  1. Pasted image 20230525153716|600
    1. 初始化/反初始化函数:HAL_PPP_Init(), HAL_PPP_DeInit()
    2. 外设读写函数:HAL_PPP_Read(), HAL_PPP_Write(), HAL_PPP_Transmit(), HAL_PPP_Receive()
    3. 控制函数:HAL_PPP_Set (), HAL_PPP_Get ()
    4. 状态和错误:HAL_PPP_GetState (), HAL_PPP_GetError ()

HAL库对寄存器位操作的相关宏定义

  1. Pasted image 20230525154333|600

HAL库回调函数

  1. Pasted image 20230525154615|600
    1. 此类函数通常被_weak修饰(弱函数),允许用户重新定义该函数

- Date:2023-06-04

  • Time:22:41
  • Subject: none
  • Tags: #stm32
    [[2023-06]]

MAP文件浅析

  1. MDK编译过程文件(11种)
    1. Pasted image 20230604224248|600
  2. MAP文件概念和作用
    1. MAP文件是MDK编译代码后,产生的集程序、数据及IO空间的一种映射列表文件
    2. 简单说就是包括了:各种.c文件、函数、符号等的地址、大小、引用关系等信息
    3. 分析各.c文件占用FLASH 和 RAM的大小,方便优化代码
  3. MAP文件组成
    1. Pasted image 20230604224449|600

STM32启动过程

  1. STM32启动模式(F1/F4/F7/H7)(也称自举模式)
    1. M3/M4/M7等内核复位后,做的第一件事:
      1. 从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值,该值就是栈顶地址
      2. 从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值是复位向量
    2. Pasted image 20230604225747|600
  2. STM32启动模式(F1)
    1. 在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存
    2. Pasted image 20230604225826|600
  3. STM32启动过程(内部FLASH启动为例)
    1. Pasted image 20230604230440|600
    2. .s启动文件介绍
      1. Pasted image 20230604230828|600
    3. Reset_Handler函数介绍(汇编)
1
2
3
4
5
6
7
8
9
Reset_Handler   PROC
                EXPORT  Reset_Handler   [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR   R0, =SystemInit
                BLX   R0              
                LDR   R0, =__main
                BX      R0
                ENDP
	1. EXPORT:标明全局属性,可被外部调用
	2. IMPORT:申明来自外部文件,类extern
	3. PROC:定义子程序
	4. ENDP:表示子程序结束
	5. WEAK:弱定义	
  1. 堆栈简介
    1. Pasted image 20230604231214|600
    2. 函数局部变量较多,嵌套关系复杂时,需加大栈大小(Stack_Size)!

32启动过程图解

  1. Pasted image 20230604231507|600