📄 stm32f103-s.h
字号:
//=================================================================================================
// 2008.7.26
//
// STM32_Gpioa_Regs->crh.bit.MODE8=0;
// STM32_Gpioa_Regs->crh.bit.CNF8=0;
//
// 增加 BIT_BAND 位带区功能
//=================================================================================================
#ifndef STM32F103_H
#define STM32F103_H
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
typedef volatile unsigned char vu8;
typedef volatile unsigned short vu16;
typedef volatile unsigned long vu32;
typedef volatile unsigned char Uint8;
typedef volatile unsigned short Uint16;
typedef volatile unsigned long Uint32;
// *******************************************************************************************************
// 3 电源控制(PWR)
// *******************************************************************************************************
//------------------------------------------------------------------------
// 电源控制寄存器(PWR_CR)
//------------------------------------------------------------------------
struct PWR_CR_BITS {
Uint32 LPDS :1; // 0 LPDS:深睡眠下的低功耗 0:在停机模式下电压调压器开启 1:在停机模式下电压调压器处于低功耗模式
Uint32 PDDS :1; // 1 PDDS:掉电深睡眠 1:CPU进入深睡眠时进入待机模式。0:当CPU进入深睡眠时进入停机模式,调压器的状态由LPDS位控制。
Uint32 CWUF :1; // 2 CWUF:清除唤醒位
Uint32 CSBF :1; // 3 SBF:清除待机位
Uint32 PVDE :1; // 4 PVDE:电源电压监测器(PVD)使能 1:开启PVD
Uint32 PLS :3; // 5:7 PLS[2:0]:PVD电平选择
Uint32 DBP :1; // 8 DBP:取消后备区域的写保护 0:禁止写入RTC和后备寄存器 1:允许写入RTC和后备寄存器
Uint32 NC :23; // 31:9
};
//使用“位带别名区 每个比特膨胀成一个32 位的字 32比特膨胀到32个32位。
struct BB_PWR_CR_BITS {
Uint32 LPDS; //
Uint32 PDDS; //
Uint32 CWUF; //
Uint32 CSBF; //
Uint32 PVDE; //
Uint32 PLS[3]; //
Uint32 DBP; //
Uint32 NC[23]; //
};
union PWR_CR_REG {
Uint32 all;
struct PWR_CR_BITS bit;
};
//DBP:取消后备区域的写保护 1:允许写入RTC和后备寄存器
#define PWR_RTCDBP ((u32)0x1<<8)
// PLS[2:0]:PVD电平选择(RW)
#define PWR_PVD_2V2 ((u32)0x0<<5)
#define PWR_PVD_2V3 ((u32)0x1<<5)
#define PWR_PVD_2V4 ((u32)0x2<<5)
#define PWR_PVD_2V5 ((u32)0x3<<5)
#define PWR_PVD_2V6 ((u32)0x4<<5)
#define PWR_PVD_2V7 ((u32)0x5<<5)
#define PWR_PVD_2V8 ((u32)0x6<<5)
#define PWR_PVD_2V9 ((u32)0x7<<5)
#define PWR_PLS_2V2 ((u8)0x0)
#define PWR_PLS_2V3 ((u8)0x1)
#define PWR_PLS_2V4 ((u8)0x2)
#define PWR_PLS_2V5 ((u8)0x3)
#define PWR_PLS_2V6 ((u8)0x4)
#define PWR_PLS_2V7 ((u8)0x5)
#define PWR_PLS_2V8 ((u8)0x6)
#define PWR_PLS_2V9 ((u8)0x7)
// PVDE:电源电压监测器(PVD)使能) 1:开启PVD
#define PWR_PVDE ((u32)0x1<<4)
// CSBF:清除待机位 1:清除SBF待机位(写)
#define PWR_CSBF ((u32)0x1<<3)
// CWUF:清除唤醒位 1:2个系统时钟周期后清除WUF唤醒位(写)
#define PWR_CWUF ((u32)0x1<<2)
// PDDS:掉电深睡眠 1:CPU进入深睡眠时进入待机模式。
#define PWR_PDDS ((u32)0x1<<1)
// LPDS:深睡眠下的低功耗 1:在停机模式下电压调压器处于低功耗模式
#define PWR_LPDS ((u32)0x1<<0)
//--------------------------------------------------------------------
// 电源控制/状态寄存器
//--------------------------------------------------------------------
struct PWR_CRF_BITS {
Uint32 WUF :1; // 0 WUF:唤醒标志
Uint32 SBF :1; // 1 SBF:待机标志
Uint32 PVDO :1; // 2 PVDO:PVD输出
Uint32 NC1 :5; // 7:3
Uint32 EWUP :1; // 8 EWUP:使能WKUP管脚 1:WKUP管脚用于将CPU从 【 待机模式唤醒 】
Uint32 NC :23; // 31:9
};
//使用“位带别名区 每个比特膨胀成一个32 位的字 32比特膨胀到32个32位。
struct BB_PWR_CRF_BITS {
Uint32 WUF; // 0
Uint32 SBF; // 1
Uint32 PVDO; // 2
Uint32 NC1[5]; // 7:3
Uint32 EWUP; // 8
Uint32 NC[23]; // 31:9
};
union PWR_CRF_REG {
Uint32 all;
struct PWR_CRF_BITS bit;
};
// EWUP:使能WKUP管脚
// 1:WKUP管脚用于将CPU从待机模式唤醒,WKUP管脚被强置为输入下拉的配置(WKUP管脚上的上升沿将系统从待机模式唤醒)
#define PWR_EWUP ((u32)0x1<<8)
//PVDO:PVD输出
struct PWR_REGS {
union PWR_CR_REG cr ; // 电源控制寄存器(PWR_CR)
union PWR_CRF_REG crf ; // 电源控制/状态寄存器
};
struct BB_PWR_REGS {
struct BB_PWR_CR_BITS CR ; //
struct BB_PWR_CRF_BITS CFR ; //
};
// *******************************************************************************************************
// 4 复位和时钟控制
// *******************************************************************************************************
//--------------------------------------------------------------------
// 时钟控制寄存器(RCC_CR)
//--------------------------------------------------------------------
struct RCC_CR_BITS {
unsigned HSION :1; // 0 HSION:内部高速时钟使能
unsigned HSIRDY :1; // 1 HSIRDY:内部高速时钟就绪标志
unsigned Reserved2 :1; // 2
unsigned HSITRIM :5; // 7:3 HSITRIM[4:0]:内部高速时钟调整
unsigned HSICAL :8; // 15:8 HSICAL[7:0]:内部高速时钟校准
unsigned HSEON :1; // 16 HSEON:外部高速时钟使能 1:HSE振荡器开启
unsigned HSERDY :1; // 17 HSERDY:外部高速时钟就绪标志 1:外部1-25MHz时钟就绪
unsigned HSEBYP :1; // 18 HSEBYP:外部高速时钟旁路 1:外部1-25MHz外部晶体振荡器被旁路。
unsigned CSSON :1; // 19 CSSON:时钟安全系统使能 1:如果外部1-25MHz时钟就绪,时钟监测器开启。
unsigned Reserved1 :4; // 23:20
unsigned PLLON :1; // 24 PLLON:PLL使能 1:PLL使能
unsigned PLLRDY :1; // 25 PLLRDY:PLL时钟就绪标志 PLL锁定后由硬件置1。1:PLL锁定
unsigned Reserved0 :6; // 31:26
};
union RCC_CR_REG {
struct RCC_CR_BITS bit;
Uint32 all;
};
// PLLRDY:PLL时钟就绪标志 1:PLL锁定 (R)
#define RCC_PLLRDY ((u32)0x1<<25)
// PLLON:PLL使能
#define RCC_PLLON ((u32)0x1<<24)
//CSSON:时钟安全系统使能 如果外部1-25MHz时钟就绪,时钟监测器开启。
#define RCC_CSSON ((u32)0x1<<19)
//位18 HSEBYP:外部高速时钟旁路 1:外部1-25MHz外部晶体振荡器被旁路。
#define RCC_CR_HSEBYP ((u32)0x1<<18)
//位17 HSERDY:外部高速时钟就绪标志 (R) 1:外部1-25MHz时钟就绪
#define RCC_HSERDY ((u32)0x1<<17)
//位16 HSEON:外部高速时钟使能 1:HSE振荡器开启
#define RCC_HSEON ((u32)0x1<<16)
//位1 HSIRDY:内部高速时钟就绪标志 (R) 1:内部8MHz时钟就绪
#define RCC_HSION ((u32)0x1<<1)
//--------------------------------------------------------------------
// 时钟配置寄存器(RCC_CFGR)
//--------------------------------------------------------------------
struct RCC_CFGR_BITS {
unsigned SW :2; // 1:0 SW:系统时钟切换
unsigned SWS :2; // 3:2 SWS:系统时钟切换状态
unsigned HPRE :4; // 7:4 HPRE: AHB预分频
unsigned PPRE1 :3; // 10:8 PPRE1:低速APB预分频(APB1)
unsigned PPRE2 :3; // 13:11 PPRE2:高速APB预分频(APB2)
unsigned ADCPRE :2; // 15:14 ADCPRE:ADC预分频
unsigned PLLSRC :1; // 16 PLLSRC:PLL输入时钟源
unsigned PLLXTPRE :1; // 17 PLLXTPRE:HSE分频器作为PLL输入
unsigned PLLMUL :4; // 21:18 PLLMUL:PLL倍频系数
unsigned USRPRE :1; // 22 USBPRE:USB预分频
unsigned Reserved1 :1; // 23
unsigned MCO :3; // 26:24 MCO 微控制器时钟输出
unsigned Reserved0 :5; // 31:27
};
union RCC_CFGR_REG {
Uint32 all;
struct RCC_CFGR_BITS bit;
};
// USBPRE:USB预分频 1:PLL时钟直接作为USB时钟
#define RCC_USBPRE ((u32)0x1<<22)
// PLLMUL:PLL倍频系数
#define RCC_PLL_2 ((u32)0x0<<18)
#define RCC_PLL_3 ((u32)0x1<<18)
#define RCC_PLL_4 ((u32)0x2<<18)
#define RCC_PLL_5 ((u32)0x3<<18)
#define RCC_PLL_6 ((u32)0x4<<18)
#define RCC_PLL_7 ((u32)0x5<<18)
#define RCC_PLL_8 ((u32)0x6<<18)
#define RCC_PLL_9 ((u32)0x7<<18)
#define RCC_PLL_10 ((u32)0x8<<18)
#define RCC_PLL_11 ((u32)0x9<<18)
#define RCC_PLL_12 ((u32)0x10<<18)
#define RCC_PLL_13 ((u32)0x11<<18)
#define RCC_PLL_14 ((u32)0x12<<18)
#define RCC_PLL_15 ((u32)0x13<<18)
#define RCC_PLL_16 ((u32)0x14<<18)
#define RCC_PLL_2_B ((u8)0x0)
#define RCC_PLL_3_B ((u8)0x1)
#define RCC_PLL_4_B ((u8)0x2)
#define RCC_PLL_5_B ((u8)0x3)
#define RCC_PLL_6_B ((u8)0x4)
#define RCC_PLL_7_B ((u8)0x5)
#define RCC_PLL_8_B ((u8)0x6)
#define RCC_PLL_9_B ((u8)0x7)
#define RCC_PLL_10_B ((u8)0x8)
#define RCC_PLL_11_B ((u8)0x9)
#define RCC_PLL_12_B ((u8)0x10)
#define RCC_PLL_13_B ((u8)0x11)
#define RCC_PLL_14_B ((u8)0x12)
#define RCC_PLL_15_B ((u8)0x13)
#define RCC_PLL_16_B ((u8)0x14)
// PLLXTPRE:HSE分频器作为PLL输入 0:HSE不分频 1:HSE 2分频
#define RCC_PLLSource_HSE_DIV2 ((u32)0x1<<17)
// PLLSRC:PLL输入时钟源 0:HSI时钟2分频后作为PLL输入时钟 1:HSE时钟作为PLL输入时钟。
#define RCC_PLLSource_HSI_DIV2 ((u32)0x0<<16)
#define RCC_PLLSource_HSE_DIV1 ((u32)0x1<<16)
// ADCPRE:ADC预分频 00:PCLK2 2分频后作为ADC时钟
#define RCC_ADCPRE_PCLK2_DIV2 ((u32)0x0<<14)
#define RCC_ADCPRE_PCLK2_DIV4 ((u32)0x1<<14)
#define RCC_ADCPRE_PCLK2_DIV6 ((u32)0x2<<14)
#define RCC_ADCPRE_PCLK2_DIV8 ((u32)0x3<<14)
#define RCC_ADCPRE_PCLK2_DIV2_B ((u8)0x0)
#define RCC_ADCPRE_PCLK2_DIV4_B ((u8)0x1)
#define RCC_ADCPRE_PCLK2_DIV6_B ((u8)0x2)
#define RCC_ADCPRE_PCLK2_DIV8_B ((u8)0x3)
// PPRE2:高速APB预分频(APB2) 0xx:HCLK不分频
#define RCC_APB2_HCLK_DIV1 ((u32)0x0<<11)
#define RCC_APB2_HCLK_DIV2 ((u32)0x4<<11)
#define RCC_APB2_HCLK_DIV4 ((u32)0x5<<11)
#define RCC_APB2_HCLK_DIV8 ((u32)0x6<<11)
#define RCC_APB2_HCLK_DIV16 ((u32)0x7<<11)
#define RCC_APB2_HCLK_DIV1_B ((u8)0x0)
#define RCC_APB2_HCLK_DIV2_B ((u8)0x4)
#define RCC_APB2_HCLK_DIV4_B ((u8)0x5)
#define RCC_APB2_HCLK_DIV8_B ((u8)0x6)
#define RCC_APB2_HCLK_DIV16_B ((u8)0x7)
// PPRE1:低速APB预分频(APB1)必须保证APB1时钟频率不超过36MHz 0xx:HCLK不分频
#define RCC_APB1_HCLK_DIV1 (u32)0x0<<8)
#define RCC_APB1_HCLK_DIV2 ((u32)0x4<<8)
#define RCC_APB1_HCLK_DIV4 ((u32)0x5<<8)
#define RCC_APB1_HCLK_DIV8 ((u32)0x6<<8)
#define RCC_APB1_HCLK_DIV16 ((u32)0x7<<8)
#define RCC_APB1_HCLK_DIV1_B (u8)0x0)
#define RCC_APB1_HCLK_DIV2_B ((u8)0x4)
#define RCC_APB1_HCLK_DIV4_B ((u8)0x5)
#define RCC_APB1_HCLK_DIV8_B ((u8)0x6)
#define RCC_APB1_HCLK_DIV16_B ((u8)0x7)
// HPRE: AHB预分频 0xxx:SYSCLK不分频
// 当AHB时钟的预分频系数大于1时,必须保持预取缓冲器开启
#define RCC_AHB_SYSCLK_DIV1 ((u32)0x0<<4)
#define RCC_AHB_SYSCLK_DIV2 ((u32)0x8<<4)
#define RCC_AHB_SYSCLK_DIV4 ((u32)0x9<<4)
#define RCC_AHB_SYSCLK_DIV8 ((u32)0xA<<4)
#define RCC_AHB_SYSCLK_DIV16 ((u32)0xB<<4)
#define RCC_AHB_SYSCLK_DIV64 ((u32)0xC<<4)
#define RCC_AHB_SYSCLK_DIV128 ((u32)0xD<<4)
#define RCC_AHB_SYSCLK_DIV256 ((u32)0xE<<4)
#define RCC_AHB_SYSCLK_DIV512 ((u32)0xF<<4)
#define RCC_AHB_SYSCLK_DIV1_B ((u8)0x0)
#define RCC_AHB_SYSCLK_DIV2_B ((u8)0x8)
#define RCC_AHB_SYSCLK_DIV4_B ((u8)0x9)
#define RCC_AHB_SYSCLK_DIV8_B ((u8)0xA)
#define RCC_AHB_SYSCLK_DIV16_B ((u8)0xB)
#define RCC_AHB_SYSCLK_DIV64_B ((u8)0xC)
#define RCC_AHB_SYSCLK_DIV128_B ((u8)0xD)
#define RCC_AHB_SYSCLK_DIV256_B ((u8)0xE)
#define RCC_AHB_SYSCLK_DIV512_B ((u8)0xF)
// SWS:系统时钟切换状态
#define RCC_SWS_SYSCLK_HSI ((u32)0x0<<2)
#define RCC_SWS_SYSCLK_HSE ((u32)0x1<<2)
#define RCC_SWS_SYSCLK_PLL ((u32)0x2<<2)
#define RCC_SWS_SYSCLK_HSI_B ((u8)0x0)
#define RCC_SWS_SYSCLK_HSE_B ((u8)0x1)
#define RCC_SWS_SYSCLK_PLL_B ((u8)0x2)
// SW:系统时钟切换 00:HSI作为系统时钟
#define RCC_SW_SYSCLK_HSI ((u32)0x0<<0)
#define RCC_SW_SYSCLK_HSE ((u32)0x1<<0)
#define RCC_SW_SYSCLK_PLL ((u32)0x2<<0)
//--------------------------------------------------------------------
// 时钟中断寄存器 (RCC_CIR)
//--------------------------------------------------------------------
struct RCC_CIR_BITS {
unsigned LSIRDYF :1; // 0 LSIRDYF:LSI就绪中断标志
unsigned LSERDYF :1; // 1 LSERDYF:LSE就绪中断标志
unsigned HSIRDYF :1; // 2 HSIRDYF:HSI就绪中断标志
unsigned HSERDYF :1; // 3 HSERDYF:HSE就绪中断标志
unsigned PLLRDYF :1; // 4 PLLRDYF:PLL就绪中断标志
unsigned Reserved3 :2; // 6:5
unsigned CSSF :1; // 7 CSSF:时钟安全系统中断标志
unsigned LSIRDYIE :1; // 8 LSIRDYIE:LSI就绪中断使能
unsigned LSERDYIE :1; // 9 LSERDYIE:LSE就绪中断使能
unsigned HSIRDYIE :1; // 10 HSIRDYIE:HSI就绪中断使能
unsigned HSERDYIE :1; // 11 HSERDYIE:HSE就绪中断使能
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -