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/

相关推荐
保安大队王队长9 小时前
51单片机知识
单片机·嵌入式硬件·51单片机
一条破秋裤10 小时前
20_串口通信基础与USART流程
stm32·单片机
一条破秋裤10 小时前
22_串口HEX与文本数据包收发
stm32·嵌入式硬件
sunoo-22910 小时前
51单片机学习Day2:数码管动态扫描、定时器与中断系统深度总
单片机·嵌入式硬件·学习·51单片机
sweetone11 小时前
索尼MHC-V7700组合音响一修一改
经验分享·嵌入式硬件·音视频
小娄~~12 小时前
LVGL,STM32U575RIT6+指纹模块
stm32·单片机·嵌入式硬件
Brilliantwxx12 小时前
【STM32】 HAL库深度入门:从设计思想到 USART 全模式实战
stm32·单片机·嵌入式硬件
恒锐丰科技林技术员12 小时前
EG1192S:高耐压零功耗使能降压 DC‑DC 芯片,拓宽工业电源设计边界
经验分享·嵌入式硬件·硬件工程
深圳市恒锐丰科技杨生12 小时前
EG1192L 零功耗使能集成上管非同步降压 DC‑DC|屹晶 EGmicro
嵌入式硬件·硬件工程
JNX_SEMI12 小时前
HTD8239 5.5V~36V宽压H桥驱动:适配12V/24V主流电机供电系统
单片机·嵌入式硬件