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/

相关推荐
赋能大师兄18 小时前
单片机3.3V和5V电压等级
单片机·3.3v·5v
BreezeJuvenile18 小时前
外设模块学习(6)——DHT11温湿度传感器(STM32)
stm32·单片机·dht11·温湿度传感器
桃里桑18 小时前
【嵌入式软件】STM32 UART转485通信问题
stm32·单片机·嵌入式硬件
萧技电创EIIA20 小时前
基于wifi摄像头与单片机的串口透传及二次开发
单片机·51单片机·硬件工程·个人开发
三佛科技-1341638421220 小时前
迷你加湿器方案开发,加湿器/香薰机MCU控制方案开发设计
单片机·嵌入式硬件·智能家居·pcb工艺
hazy1k20 小时前
51单片机基础-矩阵按键
嵌入式硬件·矩阵·51单片机
一支闲人21 小时前
带你了解STM32:SPI通信(硬件部分)
stm32·单片机·嵌入式硬件·基础知识
我先去打把游戏先1 天前
VSCode通过SSH连接到Ubuntu虚拟机失败“找不到ssh安装”问题解决
笔记·vscode·单片机·嵌入式硬件·学习·ubuntu·ssh
XiangrongZ1 天前
江协科技STM32课程笔记(三)—定时器TIM(输出比较)
笔记·科技·stm32
学工科的皮皮志^_^1 天前
电压源和电流源学习理解
单片机·嵌入式硬件·学习