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/

相关推荐
forAllforMe13 小时前
用STM32+LAN9252实现etherCAT 从站IO控制
stm32·单片机·嵌入式硬件
AnalogElectronic13 小时前
RP2040学习4,LED点亮,OLED显示,DHT11温湿度传感器数据读取
单片机·嵌入式硬件·学习
LCG元13 小时前
系统冗余设计:STM32F7双看门狗+电源监控,提高可靠性
stm32·单片机·嵌入式硬件
豆豆饿啦14 小时前
【瑞萨AI挑战赛】#01 快速开始
嵌入式硬件·mcu·物联网·iot
豆豆饿啦14 小时前
【瑞萨AI挑战赛】#02 DL任务说明及训练
人工智能·嵌入式硬件·mcu·物联网·iot
国科安芯15 小时前
抗辐照加固CAN FD芯片的商业航天与车规级应用解析
科技·嵌入式硬件·安全·fpga开发·安全威胁分析
GodKK老神灭16 小时前
CMSIS-DAP协议关键命令完整数据包示例详解
单片机·keil
XINVRY-FPGA16 小时前
XC7Z020-2CLG400I Xilinx AMDZynq-7000 FPGA
嵌入式硬件·fpga开发·arm·硬件工程·dsp开发·fpga
暮雪倾风16 小时前
【软件安装】VSPD(Virtual Serial Port Driver)虚拟串口软件安装及使用
单片机·串口
头发够用的程序员17 小时前
GPU 流水线底层探索:从 SIMT 前端到 SIMD 后端的全链路解析
arm开发·人工智能·嵌入式硬件·深度学习·硬件架构·边缘计算