STM32F1 - 标准外设库_规范

STM32F10x_StdPeriph_Lib_V3.6.0

  • [1> 头文件包含关系](#1> 头文件包含关系)
  • [2> .c文件内部结构](#2> .c文件内部结构)
  • [3> 宏定义位置](#3> 宏定义位置)
  • [4> 位掩码bit mask](#4> 位掩码bit mask)
  • [5> .c文件中定义私有变量](#5> .c文件中定义私有变量)

1> 头文件包含关系

1个头文件stm32f10x.h 就把整个MCU以及标准外设库,就管理了;


2> .c文件内部结构

c 复制代码
/**
  ******************************************************************************
  * @file    Project/STM32F10x_StdPeriph_Template/stm32f10x_it.c 
  * @author  MCD Application Team
  * @version V3.6.0
  * @date    20-September-2021
  * @brief   Main Interrupt Service Routines.
  *         
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
【段】文件头注释


/* Includes -------------------------------*/
【段】包含头文件
/* Private typedef ------------------------*/
【段】内部类型重命名
/* Private define -------------------------*/
【段】内部宏定义
/* Private macro --------------------------*/
【段】内部预处理,宏函数
/* Private variables ----------------------*/
【段】内部变量定义
/* Private function prototypes ------------*/
【段】内部函数声明
/* Private functions ----------------------*/
【段】函数实现

3> 宏定义位置

有些宏定义在.c文件中,有些在 .h文件中,没规律吗?

例如:

c 复制代码
// stm32f10xx_gpio.c:
#define MAPR_OFFSET   (AFIO_OFFSET + 0x04)
c 复制代码
// stm32f10xx_gpio.h:
#define GPIO_Pin_0      ((uint16_t)0x0001)

如果宏定义只用在自己的.c文件中,定义到.c文件中,

如果要被其他文件用,就定义在.h文件中;


4> 位掩码bit mask

时钟控制寄存器RCC_CR的bit18【HSEBYP】

c 复制代码
// 文件 stm32f10x_rcc.c
// 位掩码定义
#define CR_HSEBYP_Reset           ((uint32_t)0xFFFBFFFF) // bit18 == 0;
#define CR_HSEBYP_Set             ((uint32_t)0x00040000) // bit18 == 1;	

位掩码使用:

c 复制代码
 /* Set HSEBYP */
 RCC->CR |= CR_HSEBYP_Set;
  
 /* Reset HSEBYP bit */
 RCC->CR &= CR_HSEBYP_Reset;

ST公司工程师为了不进行移位操作,定义好位掩码;

比如,

想要让CR寄存器的bit18等于1,就 |= 0x00040000;

想要让CR寄存器的bit18等于0,就&= FFFBFFFF;

往后,咱也用用这招;


5> .c文件中定义私有变量

c 复制代码
文件 stm32f10x_rcc.c
/** @defgroup RCC_Private_Variables
  * @{
  */ 
static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9};
static __I uint8_t ADCPrescTable[4] = {2, 4, 6, 8};

static原来这样使啊!Private /ˈpraɪvət/

相关推荐
公子无缘4 分钟前
【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历
vscode·stm32·单片机·mcu·platformio
昊昊昊昊昊明17 分钟前
十天学会嵌入式技术之51单片机—day-9
单片机·嵌入式硬件·51单片机
欢乐熊嵌入式编程1 小时前
智能手表蓝牙 GATT 通讯协议文档
嵌入式硬件·目标跟踪·规格说明书·智能手表
whaosoft-1431 小时前
51c嵌入式~电路~合集27
嵌入式硬件
Camellia03112 小时前
嵌入式学习--江协51单片机day5
嵌入式硬件·学习·51单片机
7yewh2 小时前
FPGA前瞻篇-计数器设计与实现实例
arm开发·驱动开发·嵌入式硬件·fpga开发·硬件架构·硬件工程·精益工程
Wallace Zhang4 小时前
STM32F103_LL库+寄存器学习笔记22 - 基础定时器TIM实现1ms周期回调
笔记·stm32·学习
小石(努力版)5 小时前
嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐
stm32·单片机·学习
GodKK老神灭5 小时前
STM32 变量加载到flash的过程中
stm32
檀越剑指大厂6 小时前
T-BOX硬件方案深度解析:STM32与SD NAND Flash存储的完美搭配
stm32·单片机·嵌入式硬件