详细分析stm32f10x.h
/**这里是STM32比较重要的头文件 ****************************************************************************** * @file stm32f10x.h ST 标准的头文件 * @author MCD Application Team 微控制器开发小组。 * @version V3.5.0 版本 * @date 11-March-2011 2011年3月11 * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File.(CMSIS:Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。 * This file contains all the peripheral register’s definitions, bits * definitions and memory mapping for STM32F10x Connectivity line, * High density, High density value line, Medium density, * Medium density Value line, Low density, Low density Value line * and XL-density devices. * 这个文件包含了芯片STM32F10X(接口增强型)内部的寄存器定义,位定义,内存地址变换定义,还有一些相应的高密度,低密度产品线的设备。 * The file is the unique include file that the application programmer * is using in the C source code, usually in main.c. This file contains: * - Configuration section that allows to select: * - The device used in the target application * - To use or not the peripherals drivers in application code(i.e. * code will be based on direct access to peripherals registers * rather than drivers API), this option is controlled by * “#define USE_STDPERIPH_DRIVER” * - To change few application-specific parameters such as the HSE * crystal frequency * - Data structures and the address mapping for all peripherals * - Peripheral’s registers declarations and bits definition * - Macros to access peripheral registers hardware *这个文件在应用程序中是至关重要的头文件,它是用C代码编写而成。通常包括在MAIN主程序中。它包括:1 设备中使用的目标应用程序。 2 决定是否使用外部设备的代码(例如使用基于寄存器的代码,而不是我们所熟悉的API应用程序接口代码)。这一设备可以通过设置 ”#define USE_STDPERIPH_DRIVER” 来实现。 3 通过这一文件可以改变诸如外部设备的频率参数。 4 可以了解程序的数据结构以及外设的地址映射。 5 外设的寄存器声明和位定义可以在这个文件里面了解到。 ****************************************************************************** /** @addtogroup CMSIS /** @addtogroup stm32f10x #ifndef __STM32F10x_H//如果没有定义__STM32F10x_H ,则定义__STM32F10x_H #ifdef __cplusplus// 还有要说明的是,extern “C”指令仅指定编译和连接规约,但不影响语义。例如在函数声明中,指定了extern “C”,仍然要遵守C++的类型检测、参数转换规则。/** @addtogroup Library_configuration_section /* Uncomment the line below according to the target STM32 device used in your #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) #if !defined USE_STDPERIPH_DRIVER /** Tip: To avoid modifying this file each time you need to use different HSE, you /** /** /** @addtogroup Configuration_section_for_CMSIS /** /** SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ ————————————————————————————————————————————————————————- ————————————————————————————————————————————————————————- /**这里是STM32比较重要的头文件 ****************************************************************************** /** @addtogroup CMSIS /** @addtogroup stm32f10x #ifndef __STM32F10x_H//如果没有定义__STM32F10x_H ,则定义__STM32F10x_H #ifdef __cplusplus// 还有要说明的是,extern “C”指令仅指定编译和连接规约,但不影响语义。例如在函数声明中,指定了extern “C”,仍然要遵守C++的类型检测、参数转换规则。 /* Uncomment the line below according to the target STM32 device used in your #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) #if !defined USE_STDPERIPH_DRIVER /** Tip: To avoid modifying this file each time you need to use different HSE, you /** |
#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */
高速外部时钟启动时间
#define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/
外部时钟设置的值
/**
* @brief STM32F10x Standard Peripheral Library version number标准外设库版本号的定义
*/
#define __STM32F10X_STDPERIPH_VERSION_MAIN (0x03) /*!< [31:24] main version */
#define __STM32F10X_STDPERIPH_VERSION_SUB1 (0x05) /*!< [23:16] sub1 version */
#define __STM32F10X_STDPERIPH_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
#define __STM32F10X_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F10X_STDPERIPH_VERSION ( (__STM32F10X_STDPERIPH_VERSION_MAIN << 24)\
|(__STM32F10X_STDPERIPH_VERSION_SUB1 << 16)\
|(__STM32F10X_STDPERIPH_VERSION_SUB2 << 8)\
|(__STM32F10X_STDPERIPH_VERSION_RC))
/**
* @}
*/
/** @addtogroup Configuration_section_for_CMSIS
* @{
*/
/**
* @brief Configuration of the Cortex-M3 Processor and Core Peripherals配置Cortex-M3处理器和核内外设
*/
#ifdef STM32F10X_XL
#define __MPU_PRESENT 1 /*!< STM32 XL-density devices provide an MPU */
#else
#define __MPU_PRESENT 0 /*!< Other STM32 devices does not provide an MPU */
#endif /* STM32F10X_XL */
#define __NVIC_PRIO_BITS 4 /*!< STM32 uses 4 Bits for the Priority Levels */
#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
/**
* @brief STM32F10x Interrupt Number Definition, according to the selected device
* in @refLibrary_configuration_section 中断线定义,前部分对于所有STM32F10x都有相同定义,后部分根据不同器件容量采用条件编译定义不同中断线。
*/
————————————————————————————————————————————–
————————————————————————————————————————————–
这里是STM32比较重要的头文件
typedef enum IRQn typedef enum表示定义了一个枚举型的数据结构,你可以用题目中的 IRQn 去定义变量
{系统异常ID:
标号
|
中断ID
|
描述
|
NonMaskableInt_IRQn
|
-14
|
不可屏蔽中断
|
MemoryManagement_IRQn
|
-12
|
Cortex-M3内存管理中断
|
BusFault_IRQn
|
-11
|
Cortex-M3 总线Fault中断
|
UsageFault_IRQn
|
-10
|
Cortex-M3 用法Fault 中断
|
SVCall_IRQn
|
-5
|
Cortex-M3 SV Call中断
|
DebugMonitor_IRQn
|
-4
|
Cortex-M3 调试监视中断
|
PendSV_IRQn
|
-2
|
Cortex-M3 Pend SV中断 |
SysTick_IRQn
|
-1
|
Cortex-M3 系统Tick中断 |
标号 | 中断ID | 描述 | 标号 | 中断ID | 描述 |
WDT_IRQn | 0 | 看门狗 | EINT3_IRQn | 21 | 外中断3 |
TIMER0_IRQn | 1 | 定时器0 | ADC_IRQn | 22 | AD转换 |
TIMER1_IRQn | 2 | 定时器1 | BOD_IRQn | 23 | 欠压检测 |
TIMER2_IRQn | 3 | 定时器2 | USB_IRQn | 24 | USB |
TIMER3_IRQn | 4 | 定时器3 | CAN_IRQn | 25 | CAN |
UART0_IRQn | 5 | UART0 | DMA_IRQn | 26 | 通用DMA |
UART1_IRQn | 6 | UART1 | I2S_IRQn | 27 | I2S |
UART2_IRQn | 7 | UART2 | ENET_IRQn | 28 | 以太网 |
UART3_IRQn | 8 | UART3 | MCI_IRQn | 29 | SD/MMC卡I/F |
PWM1_IRQn | 9 | PWM1 | MCPWM_IRQn | 30 | 电机控制PWM |
I2C0_IRQn | 10 | I2C0 | QEI_IRQn | 31 | 正交编码接口 |
I2C1_IRQn | 11 | I2C1 | PLL1_IRQn | 32 | PLL1锁存 |
I2C2_IRQn | 12 | I2C2 | USBActivity_IRQn | 33 | USB活动 |
Reserved0_IRQn | 13 | 保留 | CANActivity_IRQn | 34 | CAN活动 |
SSP0_IRQn | 14 | SSP0 | UART4_IRQn | 35 | UART4 |
SSP1_IRQn | 15 | SSP1 | SSP2_IRQn | 36 | SSP2 |
PLL0_IRQn | 16 | PLL0锁存 | LCD_IRQn | 37 | LCD |
RTC_IRQn | 17 | RTC | GPIO_IRQn | 38 | GPIO |
EINT0_IRQn | 18 | 外中断0 | PWM0_IRQn | 39 | PWM0 |
EINT1_IRQn | 19 | 外中断1 | EEPROM_IRQn | 40 | EEPROM |
EINT2_IRQn | 20 | 外中断2 |
/** Cortex-M3 Processor Exceptions Numbers
*****************************************/CMSIS中的中断定义
NonMaskableInt_IRQn = -14, /*!<
2 Non Maskable Interrupt 非屏蔽中断
*/
MemoryManagement_IRQn = -12, /*!<
4 Cortex-M3 Memory Management Interrupt Cortex-M3内存管理中断
*/
BusFault_IRQn = -11, /*!<
5 Cortex-M3 Bus Fault Interrupt */
UsageFault_IRQn = -10, /*!<
6 Cortex-M3 Usage Fault Interrupt */
SVCall_IRQn = -5, /*!<
11 Cortex-M3 SV Call Interrupt */
DebugMonitor_IRQn = -4, /*!<
12 Cortex-M3 Debug Monitor Interrupt */
PendSV_IRQn = -2, /*!<
14 Cortex-M3 Pend SV Interrupt */
SysTick_IRQn = -1, /*!<
15 Cortex-M3 System Tick Interrupt */
/* STM32 specific Interrupt Numbers ************************************************/
WWDG_IRQn = 0, /*!<
Window WatchDog Interrupt */
PVD_IRQn = 1, /*!<
PVD through EXTI Line detection Interrupt */
TAMPER_IRQn = 2, /*!<
Tamper Interrupt */
RTC_IRQn = 3, /*!<
RTC global Interrupt */
FLASH_IRQn = 4, /*!<
FLASH global Interrupt */
RCC_IRQn = 5, /*!<
RCC global Interrupt */
EXTI0_IRQn = 6, /*!<
EXTI Line0 Interrupt */
EXTI1_IRQn = 7, /*!<
EXTI Line1 Interrupt */
EXTI2_IRQn = 8, /*!<
EXTI Line2 Interrupt */
EXTI3_IRQn = 9, /*!<
EXTI Line3 Interrupt */
EXTI4_IRQn = 10, /*!<
EXTI Line4 Interrupt */
DMA1_Channel1_IRQn = 11, /*!<
DMA1 Channel 1 global Interrupt */
DMA1_Channel2_IRQn = 12, /*!<
DMA1 Channel 2 global Interrupt */
DMA1_Channel3_IRQn = 13, /*!<
DMA1 Channel 3 global Interrupt */
DMA1_Channel4_IRQn = 14, /*!<
DMA1 Channel 4 global Interrupt */
DMA1_Channel5_IRQn = 15, /*!<
DMA1 Channel 5 global Interrupt */
DMA1_Channel6_IRQn = 16, /*!<
DMA1 Channel 6 global Interrupt */
DMA1_Channel7_IRQn = 17, /*!<
DMA1 Channel 7 global Interrupt */
#ifdef STM32F10X_LD
ADC1_2_IRQn = 18, /*!<
ADC1 and ADC2 global Interrupt */
USB_HP_CAN1_TX_IRQn = 19, /*!<
USB Device High Priority or CAN1 TX Interrupts */
USB_LP_CAN1_RX0_IRQn = 20, /*!<
USB Device Low Priority or CAN1 RX0 Interrupts */
CAN1_RX1_IRQn = 21, /*!<
CAN1 RX1 Interrupt */
CAN1_SCE_IRQn = 22, /*!<
CAN1 SCE Interrupt */
EXTI9_5_IRQn = 23, /*!<
External Line[9:5] Interrupts */
TIM1_BRK_IRQn = 24, /*!<
TIM1 Break Interrupt */
TIM1_UP_IRQn = 25, /*!<
TIM1 Update Interrupt */
TIM1_TRG_COM_IRQn = 26, /*!<
TIM1 Trigger and Commutation Interrupt */
TIM1_CC_IRQn = 27, /*!<
TIM1 Capture Compare Interrupt */
TIM2_IRQn = 28, /*!<
TIM2 global Interrupt */
TIM3_IRQn = 29, /*!<
TIM3 global Interrupt */
I2C1_EV_IRQn = 31, /*!<
I2C1 Event Interrupt */
I2C1_ER_IRQn = 32, /*!<
I2C1 Error Interrupt */
SPI1_IRQn = 35, /*!<
SPI1 global Interrupt */
USART1_IRQn = 37, /*!<
USART1 global Interrupt */
USART2_IRQn = 38, /*!<
USART2 global Interrupt */
EXTI15_10_IRQn = 40, /*!<
External Line[15:10] Interrupts */
RTCAlarm_IRQn = 41, /*!<
RTC Alarm through EXTI Line Interrupt */
USBWakeUp_IRQn = 42 /*!<
USB Device WakeUp from suspend through EXTI Line Interrupt */
#endif /* STM32F10X_LD */
#ifdef STM32F10X_LD_VL
ADC1_IRQn = 18, /*!<
ADC1 global Interrupt */
EXTI9_5_IRQn = 23, /*!<
External Line[9:5] Interrupts */
TIM1_BRK_TIM15_IRQn = 24, /*!<
TIM1 Break and TIM15 Interrupts */
TIM1_UP_TIM16_IRQn = 25, /*!<
TIM1 Update and TIM16 Interrupts */
TIM1_TRG_COM_TIM17_IRQn = 26, /*!<
TIM1 Trigger and Commutation and TIM17 Interrupt */
TIM1_CC_IRQn = 27, /*!<
TIM1 Capture Compare Interrupt */
TIM2_IRQn = 28, /*!<
TIM2 global Interrupt */
TIM3_IRQn = 29, /*!<
TIM3 global Interrupt */
I2C1_EV_IRQn = 31, /*!<
I2C1 Event Interrupt */
I2C1_ER_IRQn = 32, /*!<
I2C1 Error Interrupt */
SPI1_IRQn = 35, /*!<
SPI1 global Interrupt */
USART1_IRQn = 37, /*!<
USART1 global Interrupt */
USART2_IRQn = 38, /*!<
USART2 global Interrupt */
EXTI15_10_IRQn = 40, /*!<
External Line[15:10] Interrupts */
RTCAlarm_IRQn = 41, /*!<
RTC Alarm through EXTI Line Interrupt */
CEC_IRQn = 42, /*!<
HDMI-CEC Interrupt */
TIM6_DAC_IRQn = 54, /*!<
TIM6 and DAC underrun Interrupt */
TIM7_IRQn = 55 /*!<
TIM7 Interrupt */
#endif /* STM32F10X_LD_VL */
——————————————————————————————————————————-
——————————————————————————————————————————-
这里是STM32比较重要的头文件
系统异常ID:
标号
|
中断ID
|
描述
|
NonMaskableInt_IRQn
|
-14
|
不可屏蔽中断
|
MemoryManagement_IRQn
|
-12
|
Cortex-M3内存管理中断
|
BusFault_IRQn
|
-11
|
Cortex-M3 总线Fault中断
|
UsageFault_IRQn
|
-10
|
Cortex-M3 用法Fault 中断
|
SVCall_IRQn
|
-5
|
Cortex-M3 SV Call中断
|
DebugMonitor_IRQn
|
-4
|
Cortex-M3 调试监视中断
|
PendSV_IRQn
|
-2
|
Cortex-M3 Pend SV中断 |
SysTick_IRQn
|
-1
|
Cortex-M3 系统Tick中断 |
标号 | 中断ID | 描述 | 标号 | 中断ID | 描述 |
WDT_IRQn | 0 | 看门狗 | EINT3_IRQn | 21 | 外中断3 |
TIMER0_IRQn | 1 | 定时器0 | ADC_IRQn | 22 | AD转换 |
TIMER1_IRQn | 2 | 定时器1 | BOD_IRQn | 23 | 欠压检测 |
TIMER2_IRQn | 3 | 定时器2 | USB_IRQn | 24 | USB |
TIMER3_IRQn | 4 | 定时器3 | CAN_IRQn | 25 | CAN |
UART0_IRQn | 5 | UART0 | DMA_IRQn | 26 | 通用DMA |
UART1_IRQn | 6 | UART1 | I2S_IRQn | 27 | I2S |
UART2_IRQn | 7 | UART2 | ENET_IRQn | 28 | 以太网 |
UART3_IRQn | 8 | UART3 | MCI_IRQn | 29 | SD/MMC卡I/F |
PWM1_IRQn | 9 | PWM1 | MCPWM_IRQn | 30 | 电机控制PWM |
I2C0_IRQn | 10 | I2C0 | QEI_IRQn | 31 | 正交编码接口 |
I2C1_IRQn | 11 | I2C1 | PLL1_IRQn | 32 | PLL1锁存 |
I2C2_IRQn | 12 | I2C2 | USBActivity_IRQn | 33 | USB活动 |
Reserved0_IRQn | 13 | 保留 | CANActivity_IRQn | 34 | CAN活动 |
SSP0_IRQn | 14 | SSP0 | UART4_IRQn | 35 | UART4 |
SSP1_IRQn | 15 | SSP1 | SSP2_IRQn | 36 | SSP2 |
PLL0_IRQn | 16 | PLL0锁存 | LCD_IRQn | 37 | LCD |
RTC_IRQn | 17 | RTC | GPIO_IRQn | 38 | GPIO |
EINT0_IRQn | 18 | 外中断0 | PWM0_IRQn | 39 | PWM0 |
EINT1_IRQn | 19 | 外中断1 | EEPROM_IRQn | 40 | EEPROM |
EINT2_IRQn | 20 | 外中断2 |
#ifdef STM32F10X_MD這是我們前面講過的不同的芯片型號,對應
著不同的中斷級別。請大家自行研究!
ADC1_2_IRQn = 18, /*!<
ADC1 and ADC2 global Interrupt */
USB_HP_CAN1_TX_IRQn = 19, /*!<
USB Device High Priority or CAN1 TX Interrupts */
USB_LP_CAN1_RX0_IRQn = 20, /*!<
USB Device Low Priority or CAN1 RX0 Interrupts */
CAN1_RX1_IRQn = 21, /*!<
CAN1 RX1 Interrupt */
CAN1_SCE_IRQn = 22, /*!<
CAN1 SCE Interrupt */
EXTI9_5_IRQn = 23, /*!<
External Line[9:5] Interrupts */
TIM1_BRK_IRQn = 24, /*!<
TIM1 Break Interrupt */
TIM1_UP_IRQn = 25, /*!<
TIM1 Update Interrupt */
TIM1_TRG_COM_IRQn = 26, /*!<
TIM1 Trigger and Commutation Interrupt */
TIM1_CC_IRQn = 27, /*!<
TIM1 Capture Compare Interrupt */
TIM2_IRQn = 28, /*!<
TIM2 global Interrupt */
TIM3_IRQn = 29, /*!<
TIM3 global Interrupt */
TIM4_IRQn = 30, /*!<
TIM4 global Interrupt */
I2C1_EV_IRQn = 31, /*!<
I2C1 Event Interrupt */
I2C1_ER_IRQn = 32, /*!<
I2C1 Error Interrupt */
I2C2_EV_IRQn = 33, /*!<
I2C2 Event Interrupt */
I2C2_ER_IRQn = 34, /*!<
I2C2 Error Interrupt */
SPI1_IRQn = 35, /*!<
SPI1 global Interrupt */
SPI2_IRQn = 36, /*!<
SPI2 global Interrupt */
USART1_IRQn = 37, /*!<
USART1 global Interrupt */
USART2_IRQn = 38, /*!<
USART2 global Interrupt */
USART3_IRQn = 39, /*!<
USART3 global Interrupt */
EXTI15_10_IRQn = 40, /*!<
External Line[15:10] Interrupts */
RTCAlarm_IRQn = 41, /*!<
RTC Alarm through EXTI Line Interrupt */
USBWakeUp_IRQn = 42 /*!<
USB Device WakeUp from suspend through EXTI Line Interrupt */
#endif /* STM32F10X_MD */
#ifdef STM32F10X_MD_VL這是我們前面講過的不同的芯片型號,對應
著不同的中斷級別。請大家自行研究!
ADC1_IRQn = 18, /*!<
ADC1 global Interrupt */
EXTI9_5_IRQn = 23, /*!<
External Line[9:5] Interrupts */
TIM1_BRK_TIM15_IRQn = 24, /*!<
TIM1 Break and TIM15 Interrupts */
TIM1_UP_TIM16_IRQn = 25, /*!<
TIM1 Update and TIM16 Interrupts */
TIM1_TRG_COM_TIM17_IRQn = 26, /*!<
TIM1 Trigger and Commutation and TIM17 Interrupt */
TIM1_CC_IRQn = 27, /*!<
TIM1 Capture Compare Interrupt */
TIM2_IRQn = 28, /*!<
TIM2 global Interrupt */
TIM3_IRQn = 29, /*!<
TIM3 global Interrupt */
TIM4_IRQn = 30, /*!<
TIM4 global Interrupt */
I2C1_EV_IRQn = 31, /*!<
I2C1 Event Interrupt */
I2C1_ER_IRQn = 32, /*!<
I2C1 Error Interrupt */
I2C2_EV_IRQn = 33, /*!<
I2C2 Event Interrupt */
I2C2_ER_IRQn = 34, /*!<
I2C2 Error Interrupt */
SPI1_IRQn = 35, /*!<
SPI1 global Interrupt */
SPI2_IRQn = 36, /*!<
SPI2 global Interrupt */
USART1_IRQn = 37, /*!<
USART1 global Interrupt */
USART2_IRQn = 38, /*!<
USART2 global Interrupt */
USART3_IRQn = 39, /*!<
USART3 global Interrupt */
EXTI15_10_IRQn = 40, /*!<
External Line[15:10] Interrupts */
RTCAlarm_IRQn = 41, /*!<
RTC Alarm through EXTI Line Interrupt */
CEC_IRQn = 42, /*!<
HDMI-CEC Interrupt */
TIM6_DAC_IRQn = 54, /*!<
TIM6 and DAC underrun Interrupt */
TIM7_IRQn = 55 /*!<
TIM7 Interrupt */
#endif /* STM32F10X_MD_VL */
我們通過這個枚舉類型,可以知道系統所有的中斷都在里面,而且可以了解它們的ID,這就代表了它們的中斷級別。
———————————————————————————–
———————————————————————————–
#include “core_cm3.h”STM32的内核是ARM CORTEX-M3,这个core_cm3.h包含的是一些内核相关的函数和宏定义,例如核内寄存器定义、部分核内外设的地址等等,其对应的是core_cm3.c文件。初学可以不管他,只要把它包含进工程里就行了,这里都是非常底层的函数,上层的一些函数直接调用它们了。如果对CORTEX-M3内核有兴趣或者基础较高,想深入了解这些函数,可以仔细研读一下,我们在后续的开讲中会仔细讲解这一个文件的内容。
#include “system_stm32f10x.h”这个文件就是我们现在所讲的文件了。
#include <stdint.h><stdint.h> 定义了 int16_t 、 uint32_t 、 int64_t 等整型,在需要确定大小的整型时可以使用它们代替 short 、 unsigned long long 等,在 C 整型中,只使用 int 。
/** @addtogroup Exported_types
* @{
*/
/*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */由于新的文件与老的文件会有不兼容问题,所以要转换变量类型。
typedef int32_t s32; typedef 在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
《变量类型》,3.0以后的版本中使用了CMSIS数据类型,变量的定义有所不同,但是出于兼容旧版本的目的,以上的数据类型仍然兼容。
CMSIS IO类型限定词
IO类限定词 | #define | 描述 |
_I | volatile const | 只读访问 |
_O | volatile | 只写访问 |
_IO | volatile | 读和写访问 |
件库与CMSIS数据类型对比
固件库类型 | CMSIS类型 | 描述 |
s32 | int32_t | 易挥发只读有符号32位数据 |
s16 | int16_t | 易挥发只读有符号16位数据 |
s8 | int8_t | 易挥发只读有符号8位数据 |
sc32 | const int32_t | 只读有符号32位数据 |
sc16 | const int16_t | 只读有符号16位数据 |
sc8 | const int8_t | 只读有符号8位数据 |
vs32 | _IO int32_t | 易挥发读写访问有符号32位数据 |
vs16 | _IO int16_t | 易挥发读写访问有符号16位数据 |
vs8 | _IO int8_t | 易挥发读写访问有符号8位数据 |
vsc32 | _I int32_t | 易挥发只读有符号32位数据 |
vsc16 | _I int16_t | 易挥发只读有符号16位数据 |
vsc8 | _I int8_t | 易挥发只读有符号8位数据 |
u32 | uint32_t | 无符号32位数据 |
u16 | uint16_t | 无符号16位数据 |
u8 | uint8_t | 无符号8位数据 |
uc32 | const uint32_t | 只读无符号32位数据 |
uc16 | const uint16_t | 只读无符号16位数据 |
uc8 | const uint8_t | 只读无符号8位数据 |
vu32 | _IO uint32_t | 易挥发读写访问无符号32位数据 |
vu16 | _IO uint16_t | 易挥发读写访问无符号16位数据 |
vu8 | _IO uint8_t | 易挥发读写访问无符号8位数据 |
vuc32 | _I uint32_t | 易挥发只读无符号32位数据 |
vuc16 | _I uint16_t | 易挥发只读无符号16位数据 |
vuc8 | _I uint8_t | 易挥发只读无符号8位数据 |
stm32f10x.h文件中还包含了常用的布尔形变量定义,如:
1 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
2
3 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
4
5 #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
6
7 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
不同版本的标准外设库的变量定义略有不同,如3.4版本中就没有之前版本的TRUE和FALSE的定义,用户也可以根据自己的需求按照上面的格式定义自己的布尔形变量。在使用标准外设库进行开发遇到相关的定义问题时应首先找到对应的头文件定义 。
typedef int16_t s16;
typedef int8_t s8;
typedef const int32_t sc32; /*!< Read Only */
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如C++、PHP5、C#.net、HC08 C。
typedef const int16_t sc16; /*!< Read Only */
typedef const int8_t sc8; /*!< Read Only */
typedef __IO int32_t vs32;
typedef __IO int16_t vs16;
typedef __IO int8_t vs8;
typedef __I int32_t vsc32; /*!< Read Only */
typedef __I int16_t vsc16; /*!< Read Only */
typedef __I int8_t vsc8; /*!< Read Only */
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
typedef const uint32_t uc32; /*!< Read Only */
typedef const uint16_t uc16; /*!< Read Only */
typedef const uint8_t uc8; /*!< Read Only */
typedef __IO uint32_t vu32;
typedef __IO uint16_t vu16;
typedef __IO uint8_t vu8;
typedef __I uint32_t vuc32; /*!< Read Only */
typedef __I uint16_t vuc16; /*!< Read Only */
typedef __I uint8_t vuc8; /*!< Read Only */
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
/*!< STM32F10x Standard Peripheral Library old definitions (maintained for legacy purpose) */
由于新的文件与老的文件会有不兼容问题,所以要转换变量类型。
#define HSEStartUp_TimeOut HSE_STARTUP_TIMEOUT 请大家注意这里的定义,高速外设时钟的启动时间。
#define HSE_Value HSE_VALUE
#define HSI_Value HSI_VALUE
/**
* @}
*/
/** @addtogroup Peripheral_registers_structures
* @{
*/
/**
* @briefAnalog to Digital Converter
*/
typedef struct ADC_TypeDef结构体的声名,看看它内部都有哪些内容。请读者注意。
ADC_TypeDef,看起来是一个结构类型,是对ADC寄存器各地址的一个定义。
{__IO就是volatile uint32_t就是32位无符号整形数。
这都是ARM公司无聊滴在CMSIS库里面定义的。STM32库1.x 2.x都没有这玩意,到了3.0以后引入了CMSIS就有了。__IO uint32_t SR;
__IO uint32_t CR1;
__IO uint32_t CR2;
__IO uint32_t SMPR1;
__IO uint32_t SMPR2;
__IO uint32_t JOFR1;
__IO uint32_t JOFR2;
__IO uint32_t JOFR3;
__IO uint32_t JOFR4;
__IO uint32_t HTR;
__IO uint32_t LTR;
__IO uint32_t SQR1;
__IO uint32_t SQR2;
__IO uint32_t SQR3;
__IO uint32_t JSQR;
__IO uint32_t JDR1;
__IO uint32_t JDR2;
__IO uint32_t JDR3;
__IO uint32_t JDR4;
__IO uint32_t DR;
} ADC_TypeDef;
/**
* @briefBackup Registers
*/
typedef struct 这个结构体声明的是数据备份寄存器,它们是16位的。它可以管理防范入侵,可以存储RTC检验值,可以做数据备份。
{
uint32_t RESERVED0;
__IO uint16_t DR1; DR代表数据备份1—45
uint16_t RESERVED1;
__IO uint16_t DR2;
uint16_t RESERVED2;
__IO uint16_t DR3;
uint16_t RESERVED3;
__IO uint16_t DR4;
uint16_t RESERVED4;
__IO uint16_t DR5;
uint16_t RESERVED5;
__IO uint16_t DR6;
uint16_t RESERVED6;
__IO uint16_t DR7;
uint16_t RESERVED7;
__IO uint16_t DR8;
uint16_t RESERVED8;
__IO uint16_t DR9;
uint16_t RESERVED9;
__IO uint16_t DR10;
uint16_t RESERVED10;
__IO uint16_t RTCCR; RTC时钟校准寄存器
uint16_t RESERVED11;
__IO uint16_t CR; CR备份控制寄存器
uint16_t RESERVED12;
__IO uint16_t CSR; CSR 备份控制状态寄存器
uint16_t RESERVED13[5];
__IO uint16_t DR11;
uint16_t RESERVED14;
__IO uint16_t DR12;
uint16_t RESERVED15;
__IO uint16_t DR13;
uint16_t RESERVED16;
__IO uint16_t DR14;
uint16_t RESERVED17;
__IO uint16_t DR15;
uint16_t RESERVED18;
__IO uint16_t DR16;
uint16_t RESERVED19;
__IO uint16_t DR17;
uint16_t RESERVED20;
__IO uint16_t DR18;
uint16_t RESERVED21;
__IO uint16_t DR19;
uint16_t RESERVED22;
__IO uint16_t DR20;
uint16_t RESERVED23;
__IO uint16_t DR21;
uint16_t RESERVED24;
__IO uint16_t DR22;
uint16_t RESERVED25;
__IO uint16_t DR23;
uint16_t RESERVED26;
__IO uint16_t DR24;
uint16_t RESERVED27;
__IO uint16_t DR25;
uint16_t RESERVED28;
__IO uint16_t DR26;
uint16_t RESERVED29;
__IO uint16_t DR27;
uint16_t RESERVED30;
__IO uint16_t DR28;
uint16_t RESERVED31;
__IO uint16_t DR29;
uint16_t RESERVED32;
__IO uint16_t DR30;
uint16_t RESERVED33;
__IO uint16_t DR31;
uint16_t RESERVED34;
__IO uint16_t DR32;
uint16_t RESERVED35;
__IO uint16_t DR33;
uint16_t RESERVED36;
__IO uint16_t DR34;
uint16_t RESERVED37;
__IO uint16_t DR35;
uint16_t RESERVED38;
__IO uint16_t DR36;
uint16_t RESERVED39;
__IO uint16_t DR37;
uint16_t RESERVED40;
__IO uint16_t DR38;
uint16_t RESERVED41;
__IO uint16_t DR39;
uint16_t RESERVED42;
__IO uint16_t DR40;
uint16_t RESERVED43;
__IO uint16_t DR41;
uint16_t RESERVED44;
__IO uint16_t DR42;
uint16_t RESERVED45;
} BKP_TypeDef;
/**
* @brief Controller Area Network TxMailBox
*/
typedef struct
{
__IO uint32_t TIR;
__IO uint32_t TDTR;
__IO uint32_t TDLR;
__IO uint32_t TDHR;
} CAN_TxMailBox_TypeDef; CAN的发送邮箱寄存器的结构体定义。
/**
* @brief Controller Area Network FIFOMailBox
*/
typedef struct
{
__IO uint32_t RIR;
__IO uint32_t RDTR;
__IO uint32_t RDLR;
__IO uint32_t RDHR;
} CAN_FIFOMailBox_TypeDef; 先进先出(FIFO)缓冲器,是一种寄存器。在这个头文件里定义了它的结构体类型。
/**
* @brief Controller Area Network FilterRegister
*/
typedef struct
{
__IO uint32_t FR1;
__IO uint32_t FR2;
}CAN_Filter Register_TypeDef;CAN硬件过滤器工作模式、访问码和访问码掩码。
/**
* @brief Controller Area Network
*/
typedef struct
{
__IO uint32_t MCR;
__IO uint32_t MSR;
__IO uint32_t TSR;
__IO uint32_t RF0R;
__IO uint32_t RF1R;
__IO uint32_t IER;
__IO uint32_t ESR;
__IO uint32_t BTR;
uint32_t RESERVED0[88];
CAN_TxMailBox_TypeDef sTxMailBox[3];
CAN_FIFOMailBox_TypeDef sFIFOMailBox[2];
uint32_t RESERVED1[12];
__IO uint32_t FMR;
__IO uint32_t FM1R;
uint32_t RESERVED2;
__IO uint32_t FS1R;
uint32_t RESERVED3;
__IO uint32_t FFA1R;
uint32_t RESERVED4;
__IO uint32_t FA1R;
uint32_t RESERVED5[8];
#ifndef STM32F10X_CL
CAN_FilterRegister_TypeDef sFilterRegister[14];
#else
CAN_FilterRegister_TypeDef sFilterRegister[28];
#endif /* STM32F10X_CL */
} CAN_TypeDef;
/**
* @brief Consumer Electronics Control (CEC)
*/
typedef struct
{
__IO uint32_t CFGR;
__IO uint32_t OAR;
__IO uint32_t PRES;
__IO uint32_t ESR;
__IO uint32_t CSR;
__IO uint32_t TXD;
__IO uint32_t RXD;
} CEC_TypeDef; CEC用于记录CAN总线发送数据错误的计数器
/**
* @brief CRC calculation unit
*/
typedef struct
{
__IO uint32_t DR;
__IO uint8_t IDR;
uint8_t RESERVED0;
uint16_t RESERVED1;
__IO uint32_t CR;
} CRC_TypeDe CRC校验
/**
* @brief Digital to Analog Converter 数模转换相应的结构体,DAC相关寄存器啊
*/
typedef struct
{
__IO uint32_t CR;
__IO uint32_t SWTRIGR; SWTRIGR 这个DAC软件触发寄存器
__IO uint32_t DHR12R1; DAC 通道 1 的 12 位右对 齐数据保持寄存器:DAC_DHR12R1。这个我只讲一个,这里面全部是关于DAC转换的相关寄存器。请大家自行对照硬件手册查找。
__IO uint32_t DHR12L1;
__IO uint32_t DHR8R1;
__IO uint32_t DHR12R2;
__IO uint32_t DHR12L2;
__IO uint32_t DHR8R2;
__IO uint32_t DHR12RD;
__IO uint32_t DHR12LD;
__IO uint32_t DHR8RD;
__IO uint32_t DOR1;
__IO uint32_t DOR2;
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
__IO uint32_t SR;
#endif
} DAC_TypeDef;
————————————————————————————-
————————————————————————————-
*@brief DMA Controller
typedef struct 这里就是直接内存寻址寄存器相关定义,我想DMA大家应该不是太陌生。
{
__IO uint32_t CCR;
__IO uint32_t CNDTR;
__IO uint32_t CPAR;
__IO uint32_t CMAR;
} DMA_Channel_TypeDef;
typedef struct
{
__IO uint32_t ISR;
__IO uint32_t IFCR;
} DMA_TypeDef;
/**
* @brief Ethernet MAC
*/ MAC(Medium Access Control)模块,实现符合 IEEE 802.3 标准的 MAC 逻辑。 这个结构体是网络模块的相关定义。
typedef struct
{
__IO uint32_t MACCR;
__IO uint32_t MACFFR;
__IO uint32_t MACHTHR;
__IO uint32_t MACHTLR;
__IO uint32_t MACMIIAR;
__IO uint32_t MACMIIDR;
__IO uint32_t MACFCR;
__IO uint32_t MACVLANTR; /* 8 */
uint32_t RESERVED0[2];
__IO uint32_t MACRWUFFR; /* 11 */
__IO uint32_t MACPMTCSR;
uint32_t RESERVED1[2];
__IO uint32_t MACSR; /* 15 */
__IO uint32_t MACIMR;
__IO uint32_t MACA0HR;
__IO uint32_t MACA0LR;
__IO uint32_t MACA1HR;
__IO uint32_t MACA1LR;
__IO uint32_t MACA2HR;
__IO uint32_t MACA2LR;
__IO uint32_t MACA3HR;
__IO uint32_t MACA3LR; /* 24 */
uint32_t RESERVED2[40];
__IO uint32_t MMCCR; /* 65 */
__IO uint32_t MMCRIR;
__IO uint32_t MMCTIR;
__IO uint32_t MMCRIMR;
__IO uint32_t MMCTIMR; /* 69 */
uint32_t RESERVED3[14];
__IO uint32_t MMCTGFSCCR; /* 84 */
__IO uint32_t MMCTGFMSCCR;
uint32_t RESERVED4[5];
__IO uint32_t MMCTGFCR;
uint32_t RESERVED5[10];
__IO uint32_t MMCRFCECR;
__IO uint32_t MMCRFAECR;
uint32_t RESERVED6[10];
__IO uint32_t MMCRGUFCR;
uint32_t RESERVED7[334];
__IO uint32_t PTPTSCR;
__IO uint32_t PTPSSIR;
__IO uint32_t PTPTSHR;
__IO uint32_t PTPTSLR;
__IO uint32_t PTPTSHUR;
__IO uint32_t PTPTSLUR;
__IO uint32_t PTPTSAR;
__IO uint32_t PTPTTHR;
__IO uint32_t PTPTTLR;
uint32_t RESERVED8[567];
__IO uint32_t DMABMR;
__IO uint32_t DMATPDR;
__IO uint32_t DMARPDR;
__IO uint32_t DMARDLAR;
__IO uint32_t DMATDLAR;
__IO uint32_t DMASR;
__IO uint32_t DMAOMR;
__IO uint32_t DMAIER;
__IO uint32_t DMAMFBOCR;
uint32_t RESERVED9[9];
__IO uint32_t DMACHTDR;
__IO uint32_t DMACHRDR;
__IO uint32_t DMACHTBAR;
__IO uint32_t DMACHRBAR;
} ETH_TypeDef;
/**
* @brief External Interrupt/Event Controller
*/
{
__IO uint32_t IMR;
__IO uint32_t EMR;
__IO uint32_t RTSR;
__IO uint32_t FTSR;
__IO uint32_t SWIER;
__IO uint32_t PR;
} EXTI_TypeDef;
/**
* @brief FLASH Registers
*/
{
__IO uint32_t ACR;
__IO uint32_t KEYR;
__IO uint32_t OPTKEYR;
__IO uint32_t SR;
__IO uint32_t CR;
__IO uint32_t AR;
__IO uint32_t RESERVED;
__IO uint32_t OBR;
__IO uint32_t WRPR;
#ifdef STM32F10X_XL
uint32_t RESERVED1[8];
__IO uint32_t KEYR2;
uint32_t RESERVED2;
__IO uint32_t SR2;
__IO uint32_t CR2;
__IO uint32_t AR2;
#endif /* STM32F10X_XL */
} FLASH_TypeDef;
————————————————————————————
————————————————————————————
//本程序只供学习使用,如果用于工程应用,请仔细检查
//主要对于ST公司的库存文件stm32f10x.h进行解析
//修改日期:2014/6
//Copyright(C) 2014-2025
//All rights reserved
//******************************************************************************** */
/**
* @brief Option Bytes Registers
*/选项字节寄存器
typedef struct
{
__IO uint16_t RDP;RDP 为 读出选项字节 ,USER 为 用户选项字节 , Data0 为 数据 0 选项字节,Data1 为 数据 1 选项字节,WRP0 为 写保护 0的先项字节。依此类推
__IO uint16_t USER;
__IO uint16_t Data0;
__IO uint16_t Data1;
__IO uint16_t WRP0;
__IO uint16_t WRP1;
__IO uint16_t WRP2;
__IO uint16_t WRP3;
} OB_TypeDef;
/**
* @brief Flexible Static Memory Controller
*/灵活的静态存储器控制器
FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。
FSMC技术优势①支持多种静态存储器类型。STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连。
②支持丰富的存储操作方法。FSMC不仅支持多种数据宽度的异步读/写操作,而且支持对NOR/PSRAM/NAND存储器的同步突发访问方式。
③支持同时扩展多种存储器。FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器。当系统中扩展和使用多个外部存储器时,FSMC会通过总线悬空延迟时间参数的设置,防止各存储器对总线的访问冲突。
④支持更为广泛的存储器型号。通过对FSMC的时间参数设置,扩大了系统中可用存储器的速度范围,为用户提供了灵活的存储芯片选择空间。
⑤支持代码从FSMC扩展的外部存储器中直接运行,而不需要首先调入内部SRAM。
typedef struct
{
__IO uint32_t BTCR[8];
} FSMC_Bank1_TypeDef;
/**
* @brief Flexible Static Memory Controller Bank1E
*/
FSMC映射地址空间FSMC管理1 GB的映射地址空间。该空间划分为4个大小为256 MB的BANK,每个BANK又划分为4个64 MB的子BANK,如表1所列。FSMC的2个控制器管理的映射地址空间不同。NOR Flash控制器管理第1个BANK,NAND/PC Card控制器管理第2~4个BANK。由于两个控制器管理的存储器类型不同,扩展时应根据选用的存储设备类型确定其映射位置。其中,BANK1的4个子BANK拥有独立的片选线和控制寄存器,可分别扩展一个独立的存储设备,而BANK2~BANK4只有一组控制寄存器。
typedef struct
{
__IO uint32_t BWTR[7];
} FSMC_Bank1E_TypeDef;那么这里就是FSMC的BANK1的结构体定义
/**
* @brief Flexible Static Memory Controller Bank2
*/
typedef struct
{
__IO uint32_t PCR2;
__IO uint32_t SR2;
__IO uint32_t PMEM2;
__IO uint32_t PATT2;
uint32_t RESERVED0;
__IO uint32_t ECCR2;
} FSMC_Bank2_TypeDef;
/**
* @brief Flexible Static Memory Controller Bank3
*/
typedef struct
{
__IO uint32_t PCR3;
__IO uint32_t SR3;
__IO uint32_t PMEM3;
__IO uint32_t PATT3;
uint32_t RESERVED0;
__IO uint32_t ECCR3;
} FSMC_Bank3_TypeDef;
/**
* @brief Flexible Static Memory Controller Bank4
*/
—————————————————————————————————————————————————————
—————————————————————————————————————————————————————-
{
__IO uint32_t PCR4;
__IO uint32_t SR4;
__IO uint32_t PMEM4;
__IO uint32_t PATT4;
__IO uint32_t PIO4;
} FSMC_Bank4_TypeDef;
/**
* @brief General Purpose I/O
*/
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
* @brief Alternate Function I/O
*/
typedef struct
{
__IO uint32_t EVCR;
__IO uint32_t MAPR;
__IO uint32_t EXTICR[4];
uint32_t RESERVED0;
__IO uint32_t MAPR2;
} AFIO_TypeDef;复用功能寄存器结构,也就是说这里可以把IO做复用。
/**
* @brief Inter Integrated Circuit Interface
*/
typedef struct I2C 结构体类型,这里面的全部是数据寄存器。
{
__IO uint16_t CR1;
uint16_t RESERVED0;
__IO uint16_t CR2;
uint16_t RESERVED 1;
__IO uint16_t OAR1;
uint16_t RESERVED2;
__IO uint16_t OAR2;
uint16_t RESERVED3;
__IO uint16_t DR;
uint16_t RESERVED4;
__IO uint16_t SR1;
uint16_t RESERVED5;
__IO uint16_t SR2;
uint16_t RESERVED6;
__IO uint16_t CCR;
uint16_t RESERVED7;
__IO uint16_t TRISE;
uint16_t RESERVED8;
} I2C_TypeDef;
/**
* @brief Independent WATCHDOG
*/
在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复
{
__IO uint32_t KR;
__IO uint32_t PR;
__IO uint32_t RLR;
__IO uint32_t SR;
} IWDG_TypeDef;
/**
* @brief Power Control
*/
typedef struct
{
__IO uint32_t CR;
__IO uint32_t CSR;
} PWR_TypeDef; CR; //电源控制寄存器 vu32 CSR; //电源控制状态寄存器
/**
* @brief Reset and Clock Control
*/
typedef struct
{
__IO uint32_t CR;
__IO uint32_t CFGR;
__IO uint32_t CIR;
__IO uint32_t APB2RSTR;
__IO uint32_t APB1RSTR;
__IO uint32_t AHBENR;
__IO uint32_t APB2ENR;
__IO uint32_t APB1ENR;
__IO uint32_t BDCR;
__IO uint32_t CSR;
#ifdef STM32F10X_CL
__IO uint32_t AHBRSTR;
__IO uint32_t CFGR2;
#endif /* STM32F10X_CL */
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
uint32_t RESERVED0;
__IO uint32_t CFGR2;
#endif /* STM32F10X_LD_VL || STM32F10X_MD_VL || STM32F10X_HD_VL */
} RCC_TypeDef;
———————————————————————————————————————————————————
———————————————————————————————————————————————————
//本程序只供学习使用,如果用于工程应用,请仔细检查
//主要对于ST公司的库存文件stm32f10x.h进行解析
//修改日期:2014/6
//Copyright(C) 2014-2025
//All rights reserved
//******************************************************************************** */
/**
* @brief Real-Time Clock
*/
RTC预分频器余数寄存器高位(RTC_DIVH)
RTC预分频器余数寄存器低位(RTC_DIVL)
RTC控制寄存器高位(RTC_CRH)
RTC控制寄存器低位(RTC_CRL)
RTC预分频装载寄存器高位(RTC_PRLH)
RTC预分频装载寄存器低位(RTC_PRLL)
RTC计数器寄存器高位(RTC_CNTH)
RTC计数器寄存器低位(RTC_CNTL)
RTC闹钟寄存器高位(RTC_ALRH)
RTC闹钟寄存器低位(RTC_ALRL)
typedef struct
{
__IO uint16_t CRH;
uint16_t RESERVED0; RTC寄存器是16位可寻址寄存器,这是定义它的数据类型为16位的。
__IO uint16_t CRL;
uint16_t RESERVED1;
__IO uint16_t PRLH;
uint16_t RESERVED2;
__IO uint16_t PRLL;
uint16_t RESERVED3;
__IO uint16_t DIVH;
uint16_t RESERVED4;
__IO uint16_t DIVL;
uint16_t RESERVED5;
__IO uint16_t CNTH;
uint16_t RESERVED6;
__IO uint16_t CNTL;
uint16_t RESERVED7;
__IO uint16_t ALRH;
uint16_t RESERVED8;
__IO uint16_t ALRL;
uint16_t RESERVED9;
}
RTC_TypeDef;
/**
* @brief SD host Interface SD卡接口
*/
SDIO电源控制寄存器(SDIO_POWER)
SDIO时钟控制寄存器(SDIO_CLKCR)
SDIO参数寄存器(SDIO_ARG)
SDIO命令寄存器(SDIO_CMD)
SDIO命令响应寄存器(SDIO_RESPCMD)
SDIO响应1..4寄存器(SDIO_RESPx)
SDIO数据定时器寄存器(SDIO_DTIMER)
SDIO数据长度寄存器(SDIO_DLEN)
SDIO数据控制寄存器(SDIO_DCTRL)
SDIO数据计数器寄存器(SDIO_DCOUNT)
SDIO状态寄存器(SDIO_STA)
SDIO清除中断寄存器(SDIO_ICR)
SDIO中断屏蔽寄存器(SDIO_MASK)
SDIO FIFO计数器寄存器(SDIO_FIFOCNT)
SDIO数据FIFO寄存器(SDIO_FIFO)
typedef struct
{
__IO uint32_t POWER;
__IO uint32_t CLKCR;
__IO uint32_t ARG;
__IO uint32_t CMD;
__I uint32_t RESPCMD;
__I uint32_t RESP1;
__I uint32_t RESP2;
__I uint32_t RESP3;
__I uint32_t RESP4;
__IO uint32_t DTIMER;
__IO uint32_t DLEN;
__IO uint32_t DCTRL;
__I uint32_t DCOUNT;
__I uint32_t STA;
__IO uint32_t ICR;
__IO uint32_t MASK;
uint32_t RESERVED0[2];
__I uint32_t FIFOCNT;
uint32_t RESERVED1[13];
__IO uint32_t FIFO;
} SDIO_TypeDef;
/**
* @brief Serial Peripheral Interface————-SPI串行总线
*/
SPI控制寄存器1(SPI_CR1)
SPI控制寄存器2(SPI_CR2)
SPI 状态寄存器(SPI_SR)
SPI 数据寄存器(SPI_DR)
SPI CRC多项式寄存器(SPI_CRCPR)
SPI Rx CRC寄存器(SPI_RXCRCR)
SPI Tx CRC寄存器(SPI_TXCRCR)
SPI_I2S配置寄存器(SPI_I2S_CFGR)
SPI_I2S预分频寄存器(SPI_I2SPR)
typedef struct
{
__IO uint16_t CR1;
uint16_t RESERVED0;
__IO uint16_t CR2;
uint16_t RESERVED1;
__IO uint16_t SR;
uint16_t RESERVED2;
__IO uint16_t DR;
uint16_t RESERVED3;
__IO uint16_t CRCPR;
uint16_t RESERVED4;
__IO uint16_t RXCRCR;
uint16_t RESERVED5;
__IO uint16_t TXCRCR;
uint16_t RESERVED6;
__IO uint16_t I2SCFGR;
uint16_t RESERVED7;
__IO uint16_t I2SPR;
uint16_t RESERVED8;
} SPI_TypeDef;
/**
* @brief TIM
高级控制定时器(TIM1和TIM8)由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动。
它适合多种用途,包含测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较、
PWM、嵌入死区时间的互补PWM等)。
使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几
个毫秒的调节。
高级控制定时器(TIM1和TIM8)和通用定时器(TIMx)是完全独立的,它们不共享任何资源。它们
可以同步操作.
控制寄存器1(TIMx_CR1)
控制寄存器2(TIMx_CR2)
从模式控制寄存器(TIMx_SMCR)
DMA/中断使能寄存器(TIMx_DIER)
状态寄存器(TIMx_SR)
事件产生寄存器(TIMx_EGR)
捕获/比较模式寄存器1(TIMx_CCMR1)
捕获/比较模式寄存器2(TIMx_CCMR2)
捕获/比较使能寄存器(TIMx_CCER)
计数器(TIMx_CNT)
预分频器(TIMx_PSC)
自动重装载寄存器(TIMx_ARR)
重复计数寄存器(TIMx_RCR)
捕获/比较寄存器1(TIMx_CCR1)
捕获/比较寄存器2(TIMx_CCR2)
捕获/比较寄存器3(TIMx_CCR3)
捕获/比较寄存器(TIMx_CCR4)
刹车和死区寄存器(TIMx_BDTR)
DMA控制寄存器(TIMx_DCR)
连续模式的DMA地址(TIMx_DMAR)
这个结构体就是以上这些寄存器的类型定义。
*/
typedef struct
{
__IO uint16_t CR1;
uint16_t RESERVED0;
__IO uint16_t CR2;
uint16_t RESERVED1;
__IO uint16_t SMCR;
uint16_t RESERVED2;
__IO uint16_t DIER;
uint16_t RESERVED3;
__IO uint16_t SR;
uint16_t RESERVED4;
__IO uint16_t EGR;
uint16_t RESERVED5;
__IO uint16_t CCMR1;
uint16_t RESERVED6;
__IO uint16_t CCMR2;
uint16_t RESERVED7;
__IO uint16_t CCER;
uint16_t RESERVED8;
__IO uint16_t CNT;
uint16_t RESERVED9;
__IO uint16_t PSC;
uint16_t RESERVED10;
__IO uint16_t ARR;
uint16_t RESERVED11;
__IO uint16_t RCR;
uint16_t RESERVED12;
__IO uint16_t CCR1;
uint16_t RESERVED13;
__IO uint16_t CCR2;
uint16_t RESERVED14;
__IO uint16_t CCR3;
uint16_t RESERVED15;
__IO uint16_t CCR4;
uint16_t RESERVED16;
__IO uint16_t BDTR;
uint16_t RESERVED17;
__IO uint16_t DCR;
uint16_t RESERVED18;
__IO uint16_t DMAR;
uint16_t RESERVED19;
} TIM_TypeDef;
/**
* @brief Universal Synchronous Asynchronous Receiver Transmitter
*/在UART上追加同步方式的序列信号变换电路的产品,被称为USART(Universal Synchronous Asynchronous Receiver Transmitter)。
状态寄存器(USART_SR)
数据寄存器(USART_DR)
波特比率寄存器(USART_BRR)
控制寄存器1(USART_CR1)
控制寄存器2(USART_CR2)
控制寄存器3(USART_CR3)
保护时间和预分频寄存器(USART_GTPR)
typedef struct
{
__IO uint16_t SR;
uint16_t RESERVED0;
__IO uint16_t DR;
uint16_t RESERVED1;
__IO uint16_t BRR;
uint16_t RESERVED2;
__IO uint16_t CR1;
uint16_t RESERVED3;
__IO uint16_t CR2;
uint16_t RESERVED4;
__IO uint16_t CR3;
uint16_t RESERVED5;
__IO uint16_t GTPR;
uint16_t RESERVED6;
} USART_TypeDef;
/**
* @brief Window WATCHDOG
*/
typedef struct
{
__IO uint32_t CR;
__IO uint32_t CFR;
__IO uint32_t SR;
} WWDG_TypeDef;
/**
* @}
*/
/** @addtogroup Peripheral_memory_map
* @{
*/
#define FLASH_BASE ((uint32_t)0x08000000) /*!< FLASH base address in the alias region
在Alias地区Flash基址*/
#define SRAM_BASE ((uint32_t)0x20000000) /*!< SRAM base address in the alias region */
#define PERIPH_BASE ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */
#define SRAM_BB_BASE ((uint32_t)0x22000000) /*!< SRAM base address in the bit-band region */
#define PERIPH_BB_BASE ((uint32_t)0x42000000) /*!< Peripheral base address in the bit-band region */
#define FSMC_R_BASE ((uint32_t)0xA0000000) /*!< FSMC registers base address */
/*!< Peripheral memory map */
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
#define TIM2_BASE (APB1PERIPH_BASE + 0x0000)
#define TIM3_BASE (APB1PERIPH_BASE + 0x0400)
#define TIM4_BASE (APB1PERIPH_BASE + 0x0800)
#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00)
#define TIM6_BASE (APB1PERIPH_BASE + 0x1000)
#define TIM7_BASE (APB1PERIPH_BASE + 0x1400)
#define TIM12_BASE (APB1PERIPH_BASE + 0x1800)
#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00)
#define TIM14_BASE (APB1PERIPH_BASE + 0x2000)
#define RTC_BASE (APB1PERIPH_BASE + 0x2800)
#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00)
#define IWDG_BASE (APB1PERIPH_BASE + 0x3000)
#define SPI2_BASE (APB1PERIPH_BASE + 0x3800)
#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00)
#define USART2_BASE (APB1PERIPH_BASE + 0x4400)
#define USART3_BASE (APB1PERIPH_BASE + 0x4800)
#define UART4_BASE (APB1PERIPH_BASE + 0x4C00)
#define UART5_BASE (APB1PERIPH_BASE + 0x5000)
#define I2C1_BASE (APB1PERIPH_BASE + 0x5400)
#define I2C2_BASE (APB1PERIPH_BASE + 0x5800)
#define CAN1_BASE (APB1PERIPH_BASE + 0x6400)
#define CAN2_BASE (APB1PERIPH_BASE + 0x6800)
#define BKP_BASE (APB1PERIPH_BASE + 0x6C00)
#define PWR_BASE (APB1PERIPH_BASE + 0x7000)
#define DAC_BASE (APB1PERIPH_BASE + 0x7400)
#define CEC_BASE (APB1PERIPH_BASE + 0x7800)
#define AFIO_BASE (APB2PERIPH_BASE + 0x0000)
#define EXTI_BASE (APB2PERIPH_BASE + 0x0400)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000)
#define ADC1_BASE (APB2PERIPH_BASE + 0x2400)
#define ADC2_BASE (APB2PERIPH_BASE + 0x2800)
#define TIM1_BASE (APB2PERIPH_BASE + 0x2C00)
#define SPI1_BASE (APB2PERIPH_BASE + 0x3000)
#define TIM8_BASE (APB2PERIPH_BASE + 0x3400)
#define USART1_BASE (APB2PERIPH_BASE + 0x3800)
#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00)
#define TIM15_BASE (APB2PERIPH_BASE + 0x4000)
#define TIM16_BASE (APB2PERIPH_BASE + 0x4400)
#define TIM17_BASE (APB2PERIPH_BASE + 0x4800)
#define TIM9_BASE (APB2PERIPH_BASE + 0x4C00)
#define TIM10_BASE (APB2PERIPH_BASE + 0x5000)
#define TIM11_BASE (APB2PERIPH_BASE + 0x5400)
#define SDIO_BASE (PERIPH_BASE + 0x18000)
#define DMA1_BASE (AHBPERIPH_BASE + 0x0000)
#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008)
#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x001C)
#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x0030)
#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x0044)
#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x0058)
#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x006C)
#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x0080)
#define DMA2_BASE (AHBPERIPH_BASE + 0x0400)
#define DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408)
#define DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C)
#define DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430)
#define DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444)
#define DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458)
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)
#define CRC_BASE (AHBPERIPH_BASE + 0x3000)
#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) /*!< Flash registers base address */
#define OB_BASE ((uint32_t)0x1FFFF800) /*!< Flash Option Bytes base address */
#define ETH_BASE (AHBPERIPH_BASE + 0x8000)
#define ETH_MAC_BASE (ETH_BASE)
#define ETH_MMC_BASE (ETH_BASE + 0x0100)
#define ETH_PTP_BASE (ETH_BASE + 0x0700)
#define ETH_DMA_BASE (ETH_BASE + 0x1000)
#define FSMC_Bank1_R_BASE (FSMC_R_BASE + 0x0000) /*!< FSMC Bank1 registers base address */
#define FSMC_Bank1E_R_BASE (FSMC_R_BASE + 0x0104) /*!< FSMC Bank1E registers base address */
#define FSMC_Bank2_R_BASE (FSMC_R_BASE + 0x0060) /*!< FSMC Bank2 registers base address */
#define FSMC_Bank3_R_BASE (FSMC_R_BASE + 0x0080) /*!< FSMC Bank3 registers base address */
#define FSMC_Bank4_R_BASE (FSMC_R_BASE + 0x00A0) /*!< FSMC Bank4 registers base address */
#define DBGMCU_BASE ((uint32_t)0xE0042000) /*!< Debug MCU registers base address */
———————————————————————————————————————————————————
———————————————————————————————————————————————————
/******************************************************************************/
/* Peripheral Registers_Bits_Definition
、 串行寄存器位定义 */
/******************************************************************************/
/******************************************************************************/
/* */
/* CRC calculation unit */
/* CRC 校验单元 */
/******************************************************************************/
/******************* Bit definition for CRC_DR register *********************/
#define CRC_DR_DR ((uint32_t)0xFFFFFFFF)/*!< Data register bits数据寄存器位 */
数据寄存器(CRC_DR)
/******************* Bit definition for CRC_IDR register ********************/
#define CRC_IDR_IDR ((uint8_t)0xFF) /*!< General-purpose 8-bit data register bits 通用8位寄存器*/
独立数据寄存器(CRC_IDR)
控制寄存器(CRC_CR)
/******************** Bit definition for CRC_CR register ********************/
#define CRC_CR_RESET ((uint8_t)0x01) /*!< RESET bit 重启位*/
/******************************************************************************/
/* */
/* Power Control */
/* */
/******************************************************************************/
/******************** Bit definition for PWR_CR register ********************/
#define PWR_CR_LPDS ((uint16_t)0x0001) /*!< Low-Power Deepsleep */
#define PWR_CR_PDDS ((uint16_t)0x0002) /*!< Power Down Deepsleep */
#define PWR_CR_CWUF ((uint16_t)0x0004) /*!< Clear Wakeup Flag */
#define PWR_CR_CSBF ((uint16_t)0x0008) /*!< Clear Standby Flag */
#define PWR_CR_PVDE ((uint16_t)0x0010) /*!< Power Voltage Detector Enable */
#define PWR_CR_PLS ((uint16_t)0x00E0) /*!< PLS[2:0] bits (PVD Level Selection) */
#define PWR_CR_PLS_0 ((uint16_t)0x0020) /*!< Bit 0 */
#define PWR_CR_PLS_1 ((uint16_t)0x0040) /*!< Bit 1 */
#define PWR_CR_PLS_2 ((uint16_t)0x0080) /*!< Bit 2 */
/*!< PVD level configuration */
#define PWR_CR_PLS_2V2 ((uint16_t)0x0000) /*!< PVD level 2.2V */
#define PWR_CR_PLS_2V3 ((uint16_t)0x0020) /*!< PVD level 2.3V */
#define PWR_CR_PLS_2V4 ((uint16_t)0x0040) /*!< PVD level 2.4V */
#define PWR_CR_PLS_2V5 ((uint16_t)0x0060) /*!< PVD level 2.5V */
#define PWR_CR_PLS_2V6 ((uint16_t)0x0080) /*!< PVD level 2.6V */
#define PWR_CR_PLS_2V7 ((uint16_t)0x00A0) /*!< PVD level 2.7V */
#define PWR_CR_PLS_2V8 ((uint16_t)0x00C0) /*!< PVD level 2.8V */
#define PWR_CR_PLS_2V9 ((uint16_t)0x00E0) /*!< PVD level 2.9V */
#define PWR_CR_DBP ((uint16_t)0x0100) /*!< Disable Backup Domain write protection */
/******************* Bit definition for PWR_CSR register ********************/
#define PWR_CSR_WUF ((uint16_t)0x0001) /*!< Wakeup Flag */
#define PWR_CSR_SBF ((uint16_t)0x0002) /*!< Standby Flag */
#define PWR_CSR_PVDO ((uint16_t)0x0004) /*!< PVD Output */
#define PWR_CSR_EWUP ((uint16_t)0x0100) /*!< Enable WKUP pin */
/******************************************************************************/
/* */
/* Backup registers */
/* */
/******************************************************************************/
/******************* Bit definition for BKP_DR1 register ********************/
#define BKP_DR1_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR2 register ********************/
#define BKP_DR2_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR3 register ********************/
#define BKP_DR3_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR4 register ********************/
#define BKP_DR4_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR5 register ********************/
#define BKP_DR5_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR6 register ********************/
#define BKP_DR6_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR7 register ********************/
#define BKP_DR7_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR8 register ********************/
#define BKP_DR8_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR9 register ********************/
#define BKP_DR9_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR10 register *******************/
#define BKP_DR10_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR11 register *******************/
#define BKP_DR11_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR12 register *******************/
#define BKP_DR12_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR13 register *******************/
#define BKP_DR13_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR14 register *******************/
#define BKP_DR14_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR15 register *******************/
#define BKP_DR15_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR16 register *******************/
#define BKP_DR16_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR17 register *******************/
#define BKP_DR17_D ((uint16_t)0xFFFF) /*!< Backup data */
/****************** Bit definition for BKP_DR18 register ********************/
#define BKP_DR18_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR19 register *******************/
#define BKP_DR19_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR20 register *******************/
#define BKP_DR20_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR21 register *******************/
#define BKP_DR21_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR22 register *******************/
#define BKP_DR22_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR23 register *******************/
#define BKP_DR23_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR24 register *******************/
#define BKP_DR24_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR25 register *******************/
#define BKP_DR25_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR26 register *******************/
#define BKP_DR26_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR27 register *******************/
#define BKP_DR27_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR28 register *******************/
#define BKP_DR28_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR29 register *******************/
#define BKP_DR29_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR30 register *******************/
#define BKP_DR30_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR31 register *******************/
#define BKP_DR31_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR32 register *******************/
#define BKP_DR32_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR33 register *******************/
#define BKP_DR33_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR34 register *******************/
#define BKP_DR34_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR35 register *******************/
#define BKP_DR35_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR36 register *******************/
#define BKP_DR36_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR37 register *******************/
#define BKP_DR37_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR38 register *******************/
#define BKP_DR38_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR39 register *******************/
#define BKP_DR39_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR40 register *******************/
#define BKP_DR40_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR41 register *******************/
#define BKP_DR41_D ((uint16_t)0xFFFF) /*!< Backup data */
/******************* Bit definition for BKP_DR42 register *******************/
#define BKP_DR42_D ((uint16_t)0xFFFF) /*!< Backup data */
/****************** Bit definition for BKP_RTCCR register *******************/
#define BKP_RTCCR_CAL ((uint16_t)0x007F) /*!< Calibration value */
#define BKP_RTCCR_CCO ((uint16_t)0x0080) /*!< Calibration Clock Output */
#define BKP_RTCCR_ASOE ((uint16_t)0x0100) /*!< Alarm or Second Output Enable */
#define BKP_RTCCR_ASOS ((uint16_t)0x0200) /*!< Alarm or Second Output Selection */
/******************** Bit definition for BKP_CR register ********************/
#define BKP_CR_TPE ((uint8_t)0x01) /*!< TAMPER pin enable */
#define BKP_CR_TPAL ((uint8_t)0x02) /*!< TAMPER pin active level */
/******************* Bit definition for BKP_CSR register ********************/
#define BKP_CSR_CTE ((uint16_t)0x0001) /*!< Clear Tamper event */
#define BKP_CSR_CTI ((uint16_t)0x0002) /*!< Clear Tamper Interrupt */
#define BKP_CSR_TPIE ((uint16_t)0x0004) /*!< TAMPER Pin interrupt enable */
#define BKP_CSR_TEF ((uint16_t)0x0100) /*!< Tamper Event Flag */
#define BKP_CSR_TIF ((uint16_t)0x0200) /*!< Tamper Interrupt Flag */
/******************************************************************************/
/* */
/* Reset and Clock Control */
/* */
/******************************************************************************/
/******************** Bit definition for RCC_CR register ********************/
#define RCC_CR_HSION ((uint32_t)0x00000001) /*!< Internal High Speed clock enable */
#define RCC_CR_HSIRDY ((uint32_t)0x00000002) /*!< Internal High Speed clock ready flag */
#define RCC_CR_HSITRIM ((uint32_t)0x000000F8) /*!< Internal High Speed clock trimming */
#define RCC_CR_HSICAL ((uint32_t)0x0000FF00) /*!< Internal High Speed clock Calibration */
#define RCC_CR_HSEON ((uint32_t)0x00010000) /*!< External High Speed clock enable */
#define RCC_CR_HSERDY ((uint32_t)0x00020000) /*!< External High Speed clock ready flag */
#define RCC_CR_HSEBYP ((uint32_t)0x00040000) /*!< External High Speed clock Bypass */
#define RCC_CR_CSSON ((uint32_t)0x00080000) /*!< Clock Security System enable */
#define RCC_CR_PLLON ((uint32_t)0x01000000) /*!< PLL enable */
#define RCC_CR_PLLRDY ((uint32_t)0x02000000) /*!< PLL clock ready flag */
#ifdef STM32F10X_CL
#define RCC_CR_PLL2ON ((uint32_t)0x04000000) /*!< PLL2 enable */
#define RCC_CR_PLL2RDY ((uint32_t)0x08000000) /*!< PLL2 clock ready flag */
#define RCC_CR_PLL3ON ((uint32_t)0x10000000) /*!< PLL3 enable */
#define RCC_CR_PLL3RDY ((uint32_t)0x20000000) /*!< PLL3 clock ready flag */
#endif /* STM32F10X_CL */
———————————————————————————————————————————————————
———————————————————————————————————————————————————
截止到目前为止。这个头文件应该注意的都已经解析完毕,剩下的就是相关控制位的定义了。
———————————————————————————————————————————————————
———————————————————————————————————————————————————
转至于http://bbs.21ic.com/icview-749116-1-1.html
详细分析stm32f10x.h相关推荐
- h.264 NALU详细分析2
承接上集 h.264 NALU详细分析1_杀神李的博客-CSDN博客 上集我们已经讲到了帧是由一个或者多个NALU组成 并且NALU除了存储帧的信息外 还会存储一些其他的信息 比如 SEI SPS P ...
- Yolov1目标检测算法详细分析
Yolov1目标检测算法详细分析 Yolov1介绍 这是继RCNN,fast-RCNN 和 faster-RCNN之后,rbg(Ross Girshick)大神挂名的又一大作,起了一个很娱乐化的名字: ...
- C语言中的static 详细分析
google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大.所以,我这篇博文博采众家之长,把互 ...
- C语言中static详细分析
google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大.所以,我这篇博文博采众家之长,把互 ...
- C语言中的static 详细分析 2014-10-11 15:15 143人阅读 评论(0) 收藏...
转自:http://blog.csdn.net/keyeagle/article/details/6708077 看到这篇文章针对C语言的static关键字解释的比较好,这里转载过来.谢谢原作者分享. ...
- HashMap 源码详细分析(JDK1.8)
1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap.HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现.HashMap 允许 null 键和 null 值 ...
- 处理大并发之四 libevent demo详细分析(对比epoll)
处理大并发之四 libevent demo详细分析(对比epoll) libevent默认情况下是单线程,每个线程有且仅有一个event_base,对应一个struct event_base结构体,以 ...
- linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...
原标题:Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动 2.3 函数实现机制 2.3.1 Linux 字符设备驱动 在linux 3.5.4中,用结构体cdev描述字符设备,cde ...
- 【C++】 C++虚函数表详细分析(上)
C++虚函数表详细分析 01. 目录 C++虚函数表详细分析 01. 目录 02. 虚函数表 03. 测试代码 04. 指针基础知识 05. _vptr 06. 结果分析 07. vptr. vtab ...
最新文章
- npm 安装less插件_Gulp 开发 HTML 静态页面和 Less 实时更新
- php 大图找小图,点击小图弹出大图,点击网页任何部分隐藏大图
- 今天微软关闭Silverlight官网,Sivlerlight真得要死了吗?
- 这可能是我见过最详细的快速排序!
- [C++STL]set容器用法介绍
- 使用ORM提取数据很容易! 是吗?
- BZOJ1061 NOI2008 志愿者招募 线性规划、费用流
- spring mvc tutorial
- 虎课网腾小渔C4DR21基础入门,OC渲染设置
- 神经网络系统辨识的特点,神经网络系统辨识程序
- 刷BOIS的要点方法
- shell 004 __小斌文档 |数组+函数
- 我的世界服务器无限制区块,我的世界所有区块同时加载,内存多惊人?162万个100T硬盘装不下...
- solicit报文_DHCPv6原理与配置
- vue中实现文字超过2行... 展开-收起(兼容ie)
- 互联网电影创新随心所欲的观看电影
- CSS:运用阿里巴巴矢量库快速在对应位置加上好看的图标
- 阿里云云虚拟主机上个人网站的Https访问配置
- 什么是code-Behind技术?
- 一名非典型二流大学生的自述 | 我是如何从菜鸟进化到辣鸡的
热门文章
- 基于Springboot的网上商城
- Linux应用程序利用libudev库识别USB设备
- 武汉大学计算机电气,武汉大学电气与自动化学院
- matlab 时间坐标轴,matlab坐标轴范围
- 如何理解论文中常见的Top-1错误率和Top-5错误率?
- 零基础学C语言 第3版 pdf
- 王者荣耀android看不见iOS,王者荣耀转区功能来了!iOS和安卓这个限制,终于消失了...
- Python编写的命令行版微信。(已集成自动聊天机器人(通过网址api形式))
- 谷歌开源 ClusterFuzz,自动化查找并修复 bug
- 宏碁暗影骑士擎安装双系统踩坑记录