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/