STM32库函数简介
一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3 二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7 三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9 四:ADC寄存器------------------------------------------------------------------------25 五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33 六、DMA控制器(DMA)---------------------------------------------------------------37 七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41
八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49
命名规则
1
在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。
名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.
名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.
名为PPP_StructInit的函数,其功能为通过设置PPP_InitTypeDef 结构中的各种参数来定义外设的功能,例如:USART_StructInit
名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如: SPI_Cmd.
名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如: RCC_ITConfig.
名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig. 用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig.
名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus.
名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag.
名为PPP_GetITStatus的函数,其功能为判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus.
名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如: I2C_ClearITPendingBit.
typedef signed long s32; typedef signed short s16; typedef signed char s8;
typedef signed long const sc32; /* Read Only */ typedef signed short const sc16; /* Read Only */ typedef signed char const sc8; /* Read Only */ typedef volatile signed long vs32; typedef volatile signed short vs16; typedef volatile signed char vs8;
typedef volatile signed long const vsc32; /* Read Only */ typedef volatile signed short const vsc16; /* Read Only */ typedef volatile signed char const vsc8; /* Read Only */ typedef unsigned long u32; typedef unsigned short u16; typedef unsigned char u8;
typedef unsigned long const uc32; /* Read Only */ typedef unsigned short const uc16; /* Read Only */ typedef unsigned char const uc8; /* Read Only */ typedef volatile unsigned long vu32; typedef volatile unsigned short vu16; typedef volatile unsigned char vu8;
typedef volatile unsigned long const vuc32; /* Read Only */ typedef volatile unsigned short const vuc16; /* Read Only */ typedef volatile unsigned char const vuc8; /* Read Only */
一、通用输入/输出(GPIO)
2
GPIO寄存器结构
GPIO_TypeDef和AFIO_TypeDef,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
vu32 CRL; vu32 CRH; vu32 IDR; vu32 ODR; vu32 BSRR; vu32 BRR; vu32 LCKR; }
GPIO_TypeDef; typedef struct {
vu32 EVCR; vu32 MAPR;
vu32 EXTICR[4]; }
AFIO_TypeDef;
GPIO库函数
1 函数GPIO_DeInit
功能描述:将外设GPIOx寄存器重设为缺省值 例:
GPIO_DeInit(GPIOA);
2 函数GPIO_AFIODeInit
功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值 例:
GPIO_AFIODeInit();
3 函数GPIO_Init
功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器 例:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitTypeDef structure
3
GPIO_InitTypeDef定义于文件“stm32f10x_gpio.h”:
typedef struct {
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }
GPIO_InitTypeDef;
GPIO_Pin
该参数选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚。可以使用下表中的任意组合。 GPIO_Pin_None:无管脚被选中 GPIO_Pin_x:选中管脚x(0--15) GPIO_Pin_All:选中全部管脚
GPIO_Speed
GPIO_Speed:用以设置选中管脚的速率。 GPIO_Speed_10MHz:最高输出速率10MHz GPIO_Speed_2MHz:最高输出速率2MHz GPIO_Speed_50MHz:最高输出速率50MHz
GPIO_Mode
GPIO_Mode:用以设置选中管脚的工作状态。 GPIO_Mode_AIN:模拟输入
GPIO_Mode_IN_FLOATING:浮空输入 GPIO_Mode_IPD:下拉输入 GPIO_Mode_IPU:上拉输入 GPIO_Mode_Out_OD:开漏输出 GPIO_Mode_Out_PP:推挽输出
GPIO_Mode_AF_OD:复用开漏输出 GPIO_Mode_AF_PP:复用推挽输出
4 函数GPIO_StructInit
功能描述:把GPIO_InitStruct中的每一个参数按缺省值填入 例:
GPIO_InitTypeDef GPIO_InitStructure; GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStruct:
GPIO_Pin:GPIO_Pin_All
GPIO_Speed:GPIO_Speed_2MHz
GPIO_Mode:GPIO_Mode_IN_FLOATING
5 函数GPIO_ReadInputDataBit
功能描述:读取指定端口管脚的输入 例:
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
6 函数GPIO_ReadInputData
功能描述:读取指定的GPIO端口输入 例:
4
u16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);
7 函数GPIO_ReadOutputDataBit
功能描述:读取指定端口管脚的输出 例:
u8 ReadValue;
ReadValue = GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_7);
8 函数GPIO_ReadOutputData
功能描述:读取指定的GPIO端口输出 例:
u16 ReadValue;
ReadValue = GPIO_ReadOutputData(GPIOC);
9 函数GPIO_SetBits
功能描述:置位指定的数据端口位 例:
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);
10 函数GPIO_ResetBits
功能描述:清除指定的数据端口位 例:
GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);
11 函数GPIO_WriteBit
功能描述:设置或者清除指定的数据端口位 例:
GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);
12 函数GPIO_Write
功能描述:向指定GPIO数据端口写入数据 例:
GPIO_Write(GPIOA, 0x1101);
13 函数GPIO_PinLockConfig
功能描述:锁定GPIO管脚设置寄存器 例:
GPIO_PinLockConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);
14 函数GPIO_EventOutputConfig
5
功能描述:选择GPIO管脚用作事件输出 例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);
GPIO_PortSource
GPIO_PortSource用以选择用作事件输出的GPIO端口。
GPIO_PinSource
GPIO_PinSource用以选择用作事件输出的GPIO管脚。
15 函数GPIO_EventOutputCmd
功能描述:使能或者失能事件输出
例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6); GPIO_EventOutputCmd(ENABLE);
16 函数GPIO_PinRemapConfig
功能描述:改变指定管脚的映射 例:
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
GPIO_Remap
GPIO_Remap用以选择用作事件输出的GPIO端口。 GPIO_Remap_SPI1:SPI1复用功能映射 GPIO_Remap_I2C1:I2C1复用功能映射
GPIO_Remap_USART1:USART1复用功能映射
GPIO_PartialRemap_USART3:USART2复用功能映射 GPIO_FullRemap_USART3:USART3复用功能完全映射 GPIO_PartialRemap_TIM1:USART3复用功能部分映射 GPIO_FullRemap_TIM1:TIM1复用功能完全映射
GPIO_PartialRemap1_TIM2:TIM2复用功能部分映射1 GPIO_PartialRemap2_TIM2:TIM2复用功能部分映射2 GPIO_FullRemap_TIM2:TIM2复用功能完全映射 GPIO_PartialRemap_TIM3:TIM3复用功能部分映射 GPIO_FullRemap_TIM3:TIM3复用功能完全映射 GPIO_Remap_TIM4:TIM4复用功能映射 GPIO_Remap1_CAN:CAN复用功能映射1 GPIO_Remap2_CAN:CAN复用功能映射2 GPIO_Remap_PD01:PD01复用功能映射
GPIO_Remap_SWJ_NoJTRST:除JTRST外SWJ完全使能(JTAG+SW-DP) GPIO_Remap_SWJ_JTAGDisable:JTAG-DP失能 + SW-DP使能 GPIO_Remap_SWJ_Disable:SWJ完全失能(JTAG+SW-DP)
17 函数GPIO_EXTILineConfig
功能描述:选择GPIO管脚用作外部中断线路 例:
GPIO_EXTILineConfig(GPIO_PortSource_GPIOB, GPIO_PinSource8);
6
二、外部中断/事件控制器(EXTI)
EXTI寄存器结构
EXTI_TypeDef,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
vu32 IMR; vu32 EMR; vu32 RTSR; vu32 FTSR; vu32 SWIER; vu32 PR; }
EXTI_TypeDef;
EXTI库函数
1 函数EXTI_DeInit
功能描述:将外设EXTI寄存器重设为缺省值 例:
EXTI_DeInit();
2 函数EXTI_Init
功能描述:根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 例:
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line12 | EXTI_Line14; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);
EXTI_InitTypeDef structure
EXTI_InitTypeDef定义于文件“stm32f10x_exti.h”:
typedef struct { u32 EXTI_Line;
EXTIMode_TypeDef EXTI_Mode;
EXTIrigger_TypeDef EXTI_Trigger; FunctionalState EXTI_LineCmd; }
EXTI_InitTypeDef;
EXTI_Line
EXTI_Line选择了待使能或者失能的外部线路。
7
EXTI_Linex:外部中断线x(0--18)
EXTI_Mode
EXTI_Mode:设置了被使能线路的模式。
EXTI_Mode_Event:设置EXTI线路为事件请求 EXTI_Mode_Interrupt:设置EXTI线路为中断请求
EXTI_Trigger
EXTI_Trigger:设置了被使能线路的触发边沿。
EXTI_Trigger_Falling:设置输入线路下降沿为中断请求 EXTI_Trigger_Rising:设置输入线路上升沿为中断请求
EXTI_Trigger_Rising_Falling:设置输入线路上升沿和下降沿为中断请求
EXTI_LineCmd
EXTI_LineCmd用来定义选中线路的新状态。它可以被设为ENABLE或者DISABLE。
3 函数EXTI_StructInit
功能描述:把EXTI_InitStruct中的每一个参数按缺省值填入 例:
EXTI_InitTypeDef EXTI_InitStructure; EXTI_StructInit(&EXTI_InitStructure);
EXTI_InitStruct缺省值
EXTI_Line: EXTI_LineNone
EXTI_Mode: EXTI_Mode_Interrupt EXTI_Trigger: EXTI_Trigger_Falling EXTI_LineCmd: DISABLE
4 函数EXTI_GenerateSWInterrupt
功能描述:产生一个软件中断 例:
EXTI_GenerateSWInterrupt(EXTI_Line6);
5 函数EXTI_GetFlagStatus
功能描述:检查指定的EXTI线路标志位设置与否 例:
FlagStatus EXTIStatus;
EXTIStatus = EXTI_GetFlagStatus(EXTI_Line8);
6 函数EXTI_ClearFlag
功能描述:清除EXTI线路挂起标志位 例:
EXTI_ClearFlag(EXTI_Line2);
7 函数EXTI_GetITStatus
功能描述:检查指定的EXTI线路触发请求发生与否 例:
ITStatus EXTIStatus;
EXTIStatus = EXTI_GetITStatus(EXTI_Line8);
8
8 函数EXTI_ClearITPendingBit
功能描述:清除EXTI线路挂起位 例:
EXTI_ClearITpendingBit(EXTI_Line2);
三、通用定时器(TIM)
TIM寄存器结构
TIM_TypeDeff,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
vu16 CR1;
u16 RESERVED0; vu16 CR2;
u16 RESERVED1; vu16 SMCR;
u16 RESERVED2; vu16 DIER;
u16 RESERVED3; vu16 SR;
u16 RESERVED4; vu16 EGR;
u16 RESERVED5; vu16 CCMR1; u16 RESERVED6; vu16 CCMR2; u16 RESERVED7; vu16 CCER;
u16 RESERVED8; vu16 CNT;
u16 RESERVED9; vu16 PSC;
u16 RESERVED10; vu16 ARR;
u16 RESERVED11[3]; vu16 CCR1;
u16 RESERVED12; vu16 CCR2;
u16 RESERVED13; vu16 CCR3;
u16 RESERVED14; vu16 CCR4;
u16 RESERVED15[3]; vu16 DCR;
u16 RESERVED16; vu16 DMAR;
u16 RESERVED17; }
TIM_TypeDef;
9
TIM库函数
1 函数TIM_DeInit
功能描述:将外设TIMx寄存器重设为缺省值 例:
TIM_DeInit(TIM2);
2 函数TIM_TimeBaseInit
功能描述:根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 例:
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0xF;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);
TIM_TimeBaseInitTypeDef structure
TIM_TimeBaseInitTypeDef定义于文件“stm32f10x_tim.h”:
typedef struct {
u16 TIM_Period; u16 TIM_Prescaler; u8 TIM_ClockDivision; u16 TIM_CounterMode;
} TIM_TimeBaseInitTypeDef;
TIM_Period
TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。
TIM_Prescaler
TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。
TIM_ClockDivision
TIM_ClockDivision设置了时钟分割。 TIM_CKD_DIV1:TDTS = Tck_tim TIM_CKD_DIV2:TDTS = 2Tck_tim TIM_CKD_DIV4:TDTS = 4Tck_tim
TIM_CounterMode
TIM_CounterMode选择了计数器模式。 TIM_CounterMode_Up:TIM向上计数模式 TIM_CounterMode_Down:TIM向下计数模式
TIM_CounterMode_CenterAligned1:TIM中央对齐模式1计数模式 TIM_CounterMode_CenterAligned2:TIM中央对齐模式2计数模式 TIM_CounterMode_CenterAligned3:TIM中央对齐模式3计数模式
10
3 函数TIM_OCInit
功能描述:根据TIM_OCInitStruct中指定的参数初始化外设TIMx 例:
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_Channel = TIM_Channel_1; TIM_OCInitStructure.TIM_Pulse = 0x3FFF;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInit(TIM2, & TIM_OCInitStructure);
TIM_OCInitStruct:
指向结构TIM_OCInitTypeDef的指针,包含了TIMx时间基数单位的配置信息
TIM_OCInitTypeDef structure
TIM_OCInitTypeDef定义于文件“stm32f10x_tim.h”:
typedef struct {
u16 TIM_OCMode; u16 TIM_Channel; u16 TIM_Pulse;
u16 TIM_OCPolarity; }
TIM_OCInitTypeDef;
TIM_OCMode
TIM_OCMode选择定时器模式。
TIM_OCMode_Timing:TIM输出比较时间模式 TIM_OCMode_Active:TIM输出比较主动模式 TIM_OCMode_Inactive:TIM输出比较非主动模式 TIM_OCMode_Toggle:TIM输出比较触发模式 TIM_OCMode_PWM1:TIM脉冲宽度调制模式1 TIM_OCMode_PWM2:TIM脉冲宽度调制模式2
TIM_Channel
TIM_Channel选择通道。
TIM_Channel_1:使用TIM通道1 TIM_Channel_2:使用TIM通道2 TIM_Channel_3:使用TIM通道3 TIM_Channel_4:使用TIM通道4
TIM_Pulse
TIM_Pulse设置了待装入捕获比较寄存器的脉冲值。它的取值必须在0x0000和0xFFFF之间。
TIM_OCPolarity
TIM_OCPolarity输出极性。
TIM_OCPolarity_High:TIM输出比较极性高 TIM_OCPolarity_Low:TIM输出比较极性低
4 函数TIM_ICInit
功能描述:根据TIM_ICInitStruct中指定的参数初始化外设TIMx 例:
TIM_DeInit(TIM2);
TIM_ICStructInit(&TIM_ICInitStructure);
11
TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_PWMI; TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_ICInit(TIM2, &TIM_ICInitStructure);
TIM_ICInitStruct:指向结构TIM_ICInitTypeDef的指针,包含了TIMx的配置信息
TIM_ICInitTypeDef structure
TIM_ICInitTypeDef定义于文件“stm32f10x_tim.h”:
typedef struct {
u16 TIM_ICMode; u16 TIM_Channel; u16 TIM_ICPolarity; u16 TIM_ICSelection; u16 TIM_ICPrescaler; u16 TIM_ICFilter; }
TIM_ICInitTypeDef;
TIM_ICMode
TIM_ICMode选择了TIM输入捕获模式。 TIM_ICMode_ICAP:TIM使用输入捕获模式 TIM_ICMode_PWMI:TIM使用输入PWM模式
TIM_Channel
TIM_Channel选择通道。
TIM_Channel_1 使用TIM通道1 TIM_Channel_2 使用TIM通道2 TIM_Channel_3 使用TIM通道3 TIM_Channel_4 使用TIM通道4
TIM_ICPolarity
TIM_ICPolarity输入活动沿。
TIM_ICPolarity_Rising:TIM输入捕获上升沿 TIM_ICPolarity_Falling:TIM输入捕获下降沿
TIM_ICSelection
TIM_ICSelection选择输入。
TIM_ICSelection_DirectTI:TIM输入2,3或4选择对应地与IC1或IC2或IC3或IC4相连 TIM_ICSelection_IndirectTI:TIM输入2,3或4选择对应地与IC2或IC1或IC4或IC3相连TIM_ICSelection_TRC:TIM输入2,3或4选择与TRC相连
TIM_ICPrescaler
TIM_ICPrescaler设置输入捕获预分频器。
TIM_ICPSC_DIV1:TIM捕获在捕获输入上每探测到一个边沿执行一次 TIM_ICPSC_DIV2:TIM捕获每2个事件执行一次 TIM_ICPSC_DIV3:TIM捕获每3个事件执行一次 TIM_ICPSC_DIV4:TIM捕获每4个事件执行一次
TIM_ICFilter
TIM_ICFilter选择输入比较滤波器。该参数取值在0x0和0xF之间。
12
5 函数TIM_TimeBaseStructInit
功能描述:把TIM_TimeBaseInitStruct中的每一个参数按缺省值填入
TIM_TimeBaseInitStruct:指向结构TIM_TimeBaseInitTypeDef的指针,待初始化
TIM_TimeBaseInitStruct缺省值
TIM_Period:TIM_Period_Reset_Mask
TIM_Prescaler:TIM_Prescaler_Reset_Mask TIM_CKD:TIM_CKD_DIV1
TIM_CounterMode:TIM_CounterMode_Up
例:
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseStructInit(& TIM_TimeBaseInitStructure);
6 函数TIM_OCStructInit
功能描述:把TIM_OCInitStruct中的每一个参数按缺省值填入
TIM_OCInitStruct:指向结构TIM_OCInitTypeDef的指针,待初始化
例:
TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(& TIM_OCInitStructure);
TIM_OCInitStruct缺省值
TIM_OCMode:TIM_OCMode_Timing TIM_Channel:TIM_Channel_1
TIM_Pulse:TIM_Pulse_Reset_Mask TIM_OCPolarity:TIM_OCPolarity_High
7 函数TIM_ICStructInit
功能描述:把TIM_ICInitStruct中的每一个参数按缺省值填入
TIM_ICInitStruct:指向结构TIM_ICInitTypeDef的指针,待初始化
例:
TIM_ICInitTypeDef TIM_ICInitStructure; TIM_ICStructInit(& TIM_ICInitStructure);
TIM_ICInitStruct缺省值
TIM_ICMode:TIM_ICMode_ICAP TIM_Channel:TIM_Channel_1
TIM_ICPolarity:TIM_ICPolarity_Rising TIM_ICSelection:TIM_ICSelection_DirectTI TIM_ICPrescaler:TIM_ICPSC_DIV1 TIM_ICFilter:TIM_ICFilter_Mask
8 函数TIM_Cmd
功能描述:使能或者失能TIMx外设
例:
TIM_Cmd(TIM2, ENABLE);
13
9 函数TIM _ITConfig
功能描述:使能或者失能指定的TIM中断
例:
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE );
TIM_IT
输入参数TIM_IT使能或者失能TIM的中断 TIM_IT_Update TIM中断源
TIM_IT_CC1:TIM捕获/比较1中断源 TIM_IT_CC2:TIM捕获/比较2中断源 TIM_IT_CC3:TIM捕获/比较3中断源 TIM_IT_CC4:TIM捕获/比较4中断源 TIM_IT_Trigger:TIM触发中断源
10 函数TIM_DMAConfig
功能描述:设置TIMx的DMA接口
例:
TIM_DMAConfig(TIM2, TIM_DMABase_CCR1, TIM_DMABurstLength_1Byte)
TIM_DMABase
TIM_DMABase 设置DMA传输起始地址。
TIM_DMABase_CR1:TIM CR1寄存器作为DMA传输起始 TIM_DMABase_CR2:TIM CR2寄存器作为DMA传输起始 TIM_DMABase_SMCR:TIM SMCR寄存器作为DMA传输起始 TIM_DMABase_DIER:TIM DIER寄存器作为DMA传输起始 TIM_DMABase_SR:TIM SR寄存器作为DMA传输起始 TIM_DMABase_EGR:TIM EGR寄存器作为DMA传输起始
TIM_DMABase_CCMR1:TIM CCMR1寄存器作为DMA传输起始 TIM_DMABase_CCMR2:TIM CCMR2寄存器作为DMA传输起始 TIM_DMABase_CCER:TIM CCER寄存器作为DMA传输起始 TIM_DMABase_CNT:TIM CNT寄存器作为DMA传输起始 TIM_DMABase_PSC:TIM PSC寄存器作为DMA传输起始 TIM_DMABase_ARR:TIM APR寄存器作为DMA传输起始 TIM_DMABase_CCR1:TIM CCR1寄存器作为DMA传输起始 TIM_DMABase_CCR2:TIM CCR2寄存器作为DMA传输起始 TIM_DMABase_CCR3:TIM CCR3寄存器作为DMA传输起始 TIM_DMABase_CCR4:TIM CCR4寄存器作为DMA传输起始 TIM_DMABase_DCR:TIM DCR寄存器作为DMA传输起始
TIM_DMABurstLength
TIM_DMABurstLength设置DMA连续传送长度。
TIM_DMABurstLength_xByte:TIM DMA连续传送长度x字(1--18)
11 函数TIM_DMACmd
功能描述:使能或者失能指定的TIMx的DMA请求 例:
TIM_DMACmd(TIM2, TIM_DMA_CC1, ENABLE);
14
TIM_DMASource
输入参数TIM_DMASource使能或者失能TIM的中断。 TIM_DMA_Update TIM更新DMA源
TIM_DMA_CC1:TIM捕获/比较1DMA源 TIM_DMA_CC2:TIM捕获/比较2DMA源 TIM_DMA_CC3:TIM捕获/比较3DMA源 TIM_DMA_CC4:TIM捕获/比较4DMA源 TIM_DMA_Trigger:TIM触发DMA源
12 函数TIM_InternalClockConfig
功能描述:设置TIMx内部时钟 例:
TIM_InternalClockConfig(TIM2);
13 函数TIM_ITRxExternalClockConfig
功能描述:设置TIMx内部触发为外部时钟模式 例:
TIM_ITRxExternalClockConfig(TIM2, TIM_TS_ITR3);
TIM_InputTriggerSource
TIM_InputTriggerSource选择TIM输入触发。 TIM_TS_ITRx:TIM内部触发x(0--3)
14 函数TIM_TIxExternalClockConfig
功能描述:设置TIMx触发为外部时钟 例:
TIM_TIxExternalClockConfig(TIM2, TIM_TS_TI1FP1, TIM_ICPolarity_Rising, 0);
TIM_TIxExternalCLKSource
TIM_TIxExternalCLKSource选择TIMx外部时钟源。 TIM_TS_TI1FP1:TIM IC1连接到TI1 TIM_TS_TI1FP2:TIM IC2连接到TI2
TIM_TS_TI1F_ED:TIM IC1连接到TI1:使用边沿探测
15 函数TIM_ETRClockMode1Config
功能描述:配置TIMx外部时钟模式1 例:
TIM_ExternalCLK1Config(TIM2, TIM_ExtTRGPSC_DIV2, TIM_ExtTRGPolarity_NonInverted, 0x0);
TIM_ExtTRGPrescaler
TIM_ExtTRGPrescaler设置TIMx外部触发预分频。 TIM_ExtTRGPSC_OFF:TIM ETRP 预分频 OFF TIM_ExtTRGPSC_DIV2:TIM ETRP频率除以2 TIM_ExtTRGPSC_DIV4:TIM ETRP频率除以4 TIM_ExtTRGPSC_DIV8:TIM ETRP频率除以8
15
TIM_ExtTRGPolarity
TIM_ExtTRGPolarity设置TIMx外部触发极性。
TIM_ExtTRGPolarity_Inverted:TIM外部触发极性翻转:低电平或下降沿有效
TIM_ExtTRGPolarity_NonInverted:TIM外部触发极性非翻转:高电平或上升沿有效
16 函数TIM_ETRClockMode2Config
功能描述:配置TIMx外部时钟模式2 例:
TIM_ExternalCLK2Config(TIM2, TIM_ExtTRGPSC_DIV2, TIM_ExtTRGPolarity_NonInverted, 0x0);
17 函数TIM_ETRConfig
功能描述:配置TIMx外部触发 例:
TIM_ExternalCLK2Config(TIM2, TIM_ExtTRGPSC_DIV2, TIM_ExtTRGPolarity_NonInverted, 0x0);
18 函数TIM_SelectInputTrigger
功能描述:选择TIMx输入触发源 例:
void TIM_SelectInputTrigger(TIM2, TIM_TS_ITR3);
TIM_InputTriggerSource
TIM_InputTriggerSource选择TIMx输入触发源。 TIM_TS_ITR0:TIM内部触发0 TIM_TS_ITR1:TIM内部触发1 TIM_TS_ITR2:TIM内部触发2 TIM_TS_ITR3:TIM内部触发3
TIM_TS_TI1F_ED:TIM TL1 边沿探测器 TIM_TS_TI1FP1:TIM经滤波定时器输入1 TIM_TS_TI2FP2:TIM经滤波定时器输入2 TIM_TS_ETRF:TIM外部触发输入
19 函数TIM_PrescalerConfig
功能描述:设置TIMx预分频 例:
u16 TIMPrescaler = 0xFF00;
TIM_PrescalerConfig(TIM2, TIMPrescaler, TIM_PSCReloadMode_Immediate);
TIM_PSCReloadMode
TIM_PSCReloadMode选择预分频重载模式。
TIM_PSCReloadMode_Update:TIM预分频值在更新事件装入 TIM_PSCReloadMode_Immediate:TIM预分频值即时装入
20 函数TIM_CounterModeConfig
功能描述:设置TIMx计数器模式 例:
TIM_CounterModeConfig(TIM2, TIM_Counter_CenterAligned1);
16
21 函数TIM_ForcedOC1Config
功能描述:置TIMx输出1为活动或者非活动电平 例:
TIM_ForcedOC1Config(TIM2, TIM_ForcedAction_Active);
TIM_ForcedAction
输出信号的设置动作取值
TIM_ForcedAction_Active:置为OCxREF上的活动电平 TIM_ForcedAction_InActive:置为OCxREF上的非活动电平
22 函数TIM_ForcedOC2Config
功能描述:置TIMx输出2为活动或者非活动电平 例:
TIM_ForcedOC2Config(TIM2, TIM_ForcedAction_Active);
23 函数TIM_ForcedOC3Config
功能描述:置TIMx输出3为活动或者非活动电平 例:
TIM_ForcedOC3Config(TIM2, TIM_ForcedAction_Active);
24 函数TIM_ForcedOC4Config
功能描述:置TIMx输出4为活动或者非活动电平 例:
TIM_ForcedOC4Config(TIM2, TIM_ForcedAction_Active);
25 函数TIM_ARRPreloadConfig
功能描述:使能或者失能TIMx在ARR上的预装载寄存器
例:
TIM_ARRPreloadConfig(TIM2, ENABLE);
26 函数TIM_SelectCCDMA
功能描述:选择TIMx外设的捕获比较DMA源
例:
TIM_SelectCCDMA(TIM2, ENABLE);
27 函数TIM_OC1PreloadConfig
功能描述:使能或者失能TIMx在CCR1上的预装载寄存器 例:
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
17
TIM_OCPreload
输出比较预装载状态可以使能或者失能
TIM_OCPreload_Enable:TIMx在CCR1上的预装载寄存器使能 TIM_OCPreload_Disable:TIMx在CCR1上的预装载寄存器失能
28 函数TIM_OC2PreloadConfig
功能描述:使能或者失能TIMx在CCR2上的预装载寄存器
例:
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
29 函数TIM_OC3PreloadConfig
功能描述:使能或者失能TIMx在CCR3上的预装载寄存器 例:
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
30 函数TIM_OC4PreloadConfig
功能描述:使能或者失能TIMx在CCR4上的预装载寄存器 例:
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
31 函数TIM_OC1FastConfig
功能描述:设置TIMx捕获比较1快速特征 例:
TIM_OC1FastConfig(TIM2, TIM_OCFast_Enable);
TIM_OCFast
输出比较快速特征性能可以使能或者失能
TIM_OCFast_Enable:TIMx输出比较快速特征性能使能 TIM_OCFast_Disable:TIMx输出比较快速特征性能失能
32 函数TIM_OC2FastConfig
功能描述:设置TIMx捕获比较2快速特征 例:
TIM_OC2FastConfig(TIM2, TIM_OCFast_Enable);
33 函数TIM_OC3FastConfig
功能描述:设置TIMx捕获比较3快速特征 例:
TIM_OC3FastConfig(TIM2, TIM_OCFast_Enable);
18
34 函数TIM_OC4FastConfig
功能描述:设置TIMx捕获比较4快速特征 例:
TIM_OC4FastConfig(TIM2, TIM_OCFast_Enable);
35 函数TIM_ClearOC1Ref
功能描述:在一个外部事件时清除或者保持OCREF1信号 例:
TIM_ClearOC1Ref(TIM2, TIM_OCClear_Enable);
TIM_OCClear
输出比较清除使能位的值
TIM_OCClear_Enable:TIMx输出比较清除使能 TIM_OCClear_Disable:TIMx输出比较清除失能
36 函数TIM_ClearOC2Ref
功能描述:在一个外部事件时清除或者保持OCREF2信号 例:
TIM_ClearOC2Ref(TIM2, TIM_OCClear_Enable);
37 函数TIM_ClearOC3Ref
功能描述:在一个外部事件时清除或者保持OCREF3信号 例:
TIM_ClearOC3Ref(TIM2, TIM_OCClear_Enable);
38 函数TIM_ClearOC4Ref
功能描述:在一个外部事件时清除或者保持OCREF4信号 例:
TIM_ClearOC4Ref(TIM2, TIM_OCClear_Enable);
39 函数TIM_UpdateDisableConfig
功能描述:使能或者失能TIMx更新事件 例:
TIM_UpdateDisableConfig(TIM2, DISABLE);
40 函数TIM_EncoderInterfaceConfig
功能描述:设置TIMx编码界面 例:
TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
TIM_EncoderMode
TIM_EncoderMode选择TIMx编码模式。 TIM_EncoderMode_TI1 使用TIM编码模式1 TIM_EncoderMode_TI1 使用TIM编码模式2 TIM_EncoderMode_TI12 使用TIM编码模式3
19
41 函数TIM_GenerateEvent
功能描述:设置TIMx事件由软件产生 例:
TIM_GenerateEvent(TIM2, TIM_EventSource_Trigger);
TIM_EventSource
TIM_EventSource选择TIM软件事件源。 TIM_EventSource_Update:TIM更新事件源 TIM_EventSource_CC1:TIM捕获比较1事件源 TIM_EventSource_CC2:TIM捕获比较2事件源 TIM_EventSource_CC3:TIM捕获比较3事件源 TIM_EventSource_CC4:TIM捕获比较4事件源 TIM_EventSource_Trigger:TIM触发事件源
42 函数TIM_OC1PolarityConfig
功能描述:设置TIMx通道1极性 例:
TIM_OC1PolarityConfig(TIM2, TIM_OCPolarity_High);
43 函数TIM_OC2PolarityConfig
功能描述:设置TIMx通道2极性 例:
TIM_OC2PolarityConfig(TIM2, TIM_OCPolarity_High);
44 函数TIM_OC3PolarityConfig
功能描述:设置TIMx通道3极性 例:
TIM_OC3PolarityConfig(TIM2, TIM_OCPolarity_High);
45 函数TIM_OC4PolarityConfig
功能描述:设置TIMx通道4极性 例:
TIM_OC4PolarityConfig(TIM2, TIM_OCPolarity_High);
46 函数TIM_UpdateRequestConfig
功能描述:设置TIMx更新请求源 例:
TIM_UpdateRequestConfig(TIM2, TIM_UpdateSource_Regular);
TIM_UpdateSource
TIM_UpdateSource选择TIM更新源。
TIM_UpdateSource_Global:生成重复的脉冲:在更新事件时计数器不停止 TIM_UpdateSource_Regular:生成单一的脉冲:计数器在下一个更新事件停止
20
47 函数TIM_SelectHallSensor
功能描述:使能或者失能TIMx霍尔传感器接口 例:
TIM_SelectHallSensor(TIM2, ENABLE);
48 函数TIM_SelectOnePulseMode
功能描述:设置TIMx单脉冲模式 例:
TIM_SelectOnePulseMode(TIM2, TIM_OPMode_Single);
TIM_OPMode
TIM_OPMode选择TIM更新源。
TIM_OPMode_Repetitive:生成重复的脉冲:在更新事件时计数器不停止 TIM_OPMode_Single:生成单一的脉冲:计数器在下一个更新事件停止
49 函数TIM_SelectOutputTrigger
功能描述:选择TIMx触发输出模式 例:
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
TIM_TRGOSource
TIM_TRGOSource选择TIM触发输出源。
TIM_TRGOSource_Reset: 使用寄存器TIM_EGR的UG位作为触发输出(TRGO) TIM_TRGOSource_Enable:使用计数器使能CEN作为触发输出(TRGO) TIM_TRGOSource_Update:使用更新事件作为触发输出(TRGO) TIM_TRGOSource_OC1:一旦捕获或者比较匹配发生,当标志位CC1F被设置时触发输出发送一个肯定脉冲(TRGO) TIM_TRGOSource_OC1Ref 使用OC1REF作为触发输出(TRGO) TIM_TRGOSource_OC2Ref:使用OC2REF作为触发输出(TRGO) TIM_TRGOSource_OC3Ref:使用OC3REF作为触发输出(TRGO) TIM_TRGOSource_OC4Ref:使用OC4REF作为触发输出(TRGO)
50 函数TIM_SelectSlaveMode
功能描述:选择TIMx从模式 例:
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Gated);
TIM_SlaveMode
TIM_SlaveMode选择TIM从模式。
TIM_SlaveMode_Reset:选中触发信号(TRGI)的上升沿重初始化计数器并触发寄存器的更新 TIM_SlaveMode_Gated:当触发信号(TRGI)为高电平计数器时钟使能 TIM_SlaveMode_Trigger:计数器在触发(TRGI)的上升沿开始
TIM_SlaveMode_External1:选中触发(TRGI)的上升沿作为计数器时钟
51 函数TIM_SelectMasterSlaveMode
功能描述:设置或者重置TIMx主/从模式 例:
TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
21
TIM_MasterSlaveMode
TIM_MasterSlaveMode选择TIM主/从模式。见Table 543. 参阅该参数的取值。 TIM_MasterSlaveMode_Enable:TIM主/从模式使能 TIM_MasterSlaveMode_Disable:TIM主/从模式失能
52 函数TIM_SetCounter
功能描述:设置TIMx计数器寄存器值 例:
u16 TIMCounter = 0xFFFF;
TIM_SetCounter(TIM2, TIMCounter);
53 函数TIM_SetAutoreload
功能描述:设置TIMx自动重装载寄存器值 例:
u16 TIMAutoreload = 0xFFFF;
TIM_SetAutoreload(TIM2, TIMAutoreload);
54 函数TIM_SetCompare1
功能描述:设置TIMx捕获比较1寄存器值 例:
u16 TIMCompare1 = 0x7FFF;
TIM_SetCompare1(TIM2, TIMCompare1);
55 函数TIM_SetCompare2
功能描述:设置TIMx捕获比较2寄存器值 例:
u16 TIMCompare2 = 0x7FFF;
TIM_SetCompare2(TIM2, TIMCompare2);
56 函数TIM_SetCompare3
功能描述:设置TIMx捕获比较3寄存器值 例:
u16 TIMCompare3 = 0x7FFF;
TIM_SetCompare3(TIM2, TIMCompare3);
57 函数TIM_SetCompare4
功能描述:设置TIMx捕获比较4寄存器值 例:
u16 TIMCompare4 = 0x7FFF;
TIM_SetCompare4(TIM2, TIMCompare4);
22
58 函数TIM_SetIC1Prescaler
功能描述:设置TIMx输入捕获1预分频 例:
TIM_SetIC1Prescaler(TIM2, TIM_ICPSC_Div2);
59 函数TIM_SetIC2Prescaler
功能描述:设置TIMx输入捕获2预分频 例:
TIM_SetIC2Prescaler(TIM2, TIM_ICPSC_Div2);
60 函数TIM_SetIC3Prescaler
功能描述:设置TIMx输入捕获3预分频 例:
TIM_SetIC3Prescaler(TIM2, TIM_ICPSC_Div2);
61 函数TIM_SetIC4Prescaler
功能描述:设置TIMx输入捕获4预分频 例:
TIM_SetIC4Prescaler(TIM2, TIM_ICPSC_Div2);
62 函数TIM_SetClockDivision
功能描述:设置TIMx的时钟分割值 例:
TIM_SetClockDivision(TIM2, TIM_CKD_DIV4);
63 函数TIM_GetCapture1
功能描述:获得TIMx输入捕获1的值 例:
u16 ICAP1value = TIM_GetCapture1(TIM2);
64 函数TIM_GetCapture2
功能描述:获得TIMx输入捕获2的值 例:
u16 ICAP2value = TIM_GetCapture2(TIM2);
65 函数TIM_GetCapture3
功能描述:获得TIMx输入捕获3的值 例:
u16 ICAP3value = TIM_GetCapture3(TIM2);
23
66 函数TIM_GetCapture4
功能描述:获得TIMx输入捕获4的值 例:
u16 ICAP4value = TIM_GetCapture4(TIM2);
67 函数TIM_GetCounter
功能描述:获得TIMx计数器的值 例:
u16 TIMCounter = TIM_GetCounter(TIM2);
68 函数TIM_GetPrescaler
功能描述:获得TIMx预分频值 例:
u16 TIMPrescaler = TIM_GetPrescaler(TIM2);
69 函数TIM_GetFlagStatus
功能描述:检查指定的TIM标志位设置与否 例:
if(TIM_GetFlagStatus(TIM2, TIM_FLAG_CC1) == SET)
{ }
TIM_FLAG值
TIM_FLAG_Update TIM更新标志位
TIM_FLAG_CC1:TIM捕获/比较1标志位 TIM_FLAG_CC2:TIM捕获/比较2标志位 TIM_FLAG_CC3:TIM捕获/比较3标志位 TIM_FLAG_CC4:TIM捕获/比较4标志位 TIM_FLAG_Trigger:TIM触发标志位
TIM_FLAG_CC1OF:TIM捕获/比较1溢出标志位 TIM_FLAG_CC2OF:TIM捕获/比较2溢出标志位 TIM_FLAG_CC3OF:TIM捕获/比较3溢出标志位 TIM_FLAG_CC4OF:TIM捕获/比较4溢出标志位
70 函数TIM_ClearFlag
功能描述:清除TIMx的待处理标志位 例:
TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
71 函数TIM_GetITStatus
功能描述:检查指定的TIM中断发生与否 例:
if(TIM_GetITStatus(TIM2, TIM_IT_CC1) == SET)
{ }
24
72 函数TIM_ClearITPendingBit
功能描述:清除TIMx的中断待处理位 例:
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
四:ADC寄存器
ADC配置规则
void ADC_Config(void)
{
定义ADC初始化结构体变量 // ADC_Init(); ADC1和ADC2工作模式 使能扫描
ADC转换工作模式 由软件控制转换 转换数据右对齐 设置转换通道
初始化ADC // ADC_Init();
ADC1选择信道、音序器等级、采样时间 使能ADC1模块DMA 使能ADC1
重置ADC1校准寄存器 等待ADC1校准重置完成 开始ADC1校准 等待ADC1校准完成 使能ADC1软件开始转换 }
ADC寄存器结构
ADC_TypeDef,定义于文件“stm32f10x_map.h”如下:
typedef struct {
vu32 SR; vu32 CR1; vu32 CR2; vu32 SMPR1; vu32 SMPR2; vu32 JOFR1; vu32 JOFR2; vu32 JOFR3; vu32 JOFR4; vu32 HTR;
25
vu32 LTR; vu32 SQR1; vu32 SQR2; vu32 SQR3; vu32 JSQR; vu32 JDR1; vu32 JDR2; vu32 JDR3; vu32 JDR4; vu32 DR; }
ADC_TypeDef;
ADC库函数
1、ADC_DeInit();
功能描述:将外设ADCx的全部寄存器重设为缺省值
例:
ADC_DeInit(ADC2);
2、ADC_Init();
功能描述:根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
例: {
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_Ext_IT11; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 16; ADC_Init(ADC1, &ADC_InitStructure); }
ADC_InitStruct:指向结构ADC_InitTypeDef的指针,包含了指定外设ADC的配置信息
ADC_InitTypeDef: typedef struct {
u32 ADC_Mode;
FunctionalState ADC_ScanConvMode;
FunctionalState ADC_ContinuousConvMode; u32 ADC_ExternalTrigConv; u32 ADC_DataAlign; u8 ADC_NbrOfChannel; }
ADC_InitTypeDef
ADC_Mode:
ADC_Mode_Independent:ADC1和ADC2工作在独立模式
ADC_Mode_RegInjecSimult:ADC1和ADC2工作在同步规则和同步注入模式
ADC_Mode_RegSimult_AlterTrig:ADC1和ADC2工作在同步规则模式和交替触发模式 ADC_Mode_InjecSimult_FastInterl:ADC1和ADC2工作在同步规则模式和快速交替模式 ADC_Mode_InjecSimult_SlowInterl:ADC1和ADC2工作在同步注入模式和慢速交替模式ADC_Mode_InjecSimult:ADC1和ADC2工作在同步注入模式
26
ADC_Mode_RegSimult:ADC1和ADC2工作在同步规则模式 ADC_Mode_FastInterl:ADC1和ADC2工作在快速交替模式 ADC_Mode_SlowInterl:ADC1和ADC2工作在慢速交替模式 ADC_Mode_AlterTrig:ADC1和ADC2工作在交替触发模式
例:
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_ScanConvMode:
ADC_ScanConvMode规定了模数转换工作在扫描模式(多通道)还是单次(单通道)模式。可以设置这个参数为ENABLE或者DISABLE。
例:
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_ContinuousConvMode:
ADC_ContinuousConvMode规定了模数转换工作在连续还是单次模式。可以设置这个参数为ENABLE或者DISABLE。
例:
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_ExternalTrigConv:
ADC_ExternalTrigConv_T1_CC1:选择定时器1的捕获比较1作为转换外部触发 ADC_ExternalTrigConv_T1_CC2:选择定时器1的捕获比较2作为转换外部触发 ADC_ExternalTrigConv_T1_CC3:选择定时器1的捕获比较3作为转换外部触发 ADC_ExternalTrigConv_T2_CC2:选择定时器2的捕获比较2作为转换外部触发 ADC_ExternalTrigConv_T3_TRGO:选择定时器3的TRGO作为转换外部触发 ADC_ExternalTrigConv_T4_CC4:选择定时器4的捕获比较4作为转换外部触发 ADC_ExternalTrigConv_Ext_IT11:选择外部中断线11事件作为转换外部触发 ADC_ExternalTrigConv_None:转换由软件而不是外部触发启动
例:
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_Ext_IT11;
ADC_DataAlign:
ADC_DataAlign_Right:ADC数据右对齐 ADC_DataAlign_Left:ADC数据左对齐
例:
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_NbrOfChannel:
ADC_NbreOfChannel 规定了顺序进行规则转换的ADC通道的数目。这个数目的取值范围是1到16。
例:
ADC_InitStructure.ADC_NbrOfChannel = 16;
3 函数ADC_StructInit();
功能描述:把ADC_InitStruct中的每一个参数按缺省值填入,如下: ADC_Mode:ADC_Mode_Independent ADC_ScanConvMode:DISABLE
ADC_ContinuousConvMode:DISABLE
ADC_ExternalTrigConv:ADC_ExternalTrigConv_T1_CC1 ADC_DataAlign:ADC_DataAlign_Right ADC_NbrOfChannel:1 例:
ADC_InitTypeDef ADC_InitStructure;
ADC_StructInit(&ADC_InitStructure);
27
4 函数ADC_Cmd();
功能描述:使能或者失能指定的ADC 例:
ADC_Cmd(ADC1, ENABLE);
5 函数ADC_DMACmd();
功能描述:使能或者失能指定的ADC的DMA请求 例:
ADC_DMACmd(ADC2, ENABLE);
6 函数ADC_ITConfig();
功能描述:使能或者失能指定的ADC的中断 例:
ADC_ITConfig(ADC2, ADC_IT_EOC | ADC_IT_AWD, ENABLE);
ADC_IT:
ADC_IT可以用来使能或者失能ADC中断。可以使用下表中的一个参数,或者他们的组合。ADC_IT_EOC EOC:中断屏蔽 ADC_IT_AWD AWDOG:中断屏蔽 ADC_IT_JEOC JEOC:中断屏蔽
7 函数ADC_ResetCalibration();
功能描述:重置指定的ADC的校准寄存器 例:
ADC_ResetCalibration(ADC1);
8 函数ADC_GetResetCalibrationStatus();
功能描述:获取ADC重置校准寄存器的状态 例:
FlagStatus Status;
Status = ADC_GetResetCalibrationStatus(ADC2);
9 函数ADC_StartCalibration();
功能描述:开始指定ADC的校准状态 例:
ADC_StartCalibration(ADC2);
10 函数ADC_GetCalibrationStatus();
功能描述:获取指定ADC的校准程序 例:
FlagStatus Status;
Status = ADC_GetCalibrationStatus(ADC2);
28
11 函数ADC_SoftwareStartConvCmd();
功能描述:使能或者失能指定的ADC的软件转换启动功能 例:
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
12 函数ADC_GetSoftwareStartConvStatus();
功能描述:获取ADC软件转换启动状态 例:
FlagStatus Status; Status = ADC_GetSoftwareStartConvStatus(ADC1);
13 函数ADC_DiscModeChannelCountConfig();
功能描述:对ADC规则组通道配置间断模式 例:
ADC_DiscModeChannelCountConfig(ADC1, 2);
14 函数ADC_DiscModeCmd();
功能描述:使能或者失能指定的ADC规则组通道的间断模式 例:
ADC_DiscModeCmd(ADC1, ENABLE);
15 函数ADC_RegularChannelConfig();
功能描述:设置指定ADC的规则组通道,设置它们的转化顺序和采样时间 例:
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_7Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 2, ADC_SampleTime_1Cycles5);
ADC_Channel 参数ADC_Channel指定了通过调用函数ADC_RegularChannelConfig来设置的ADC通道。ADC_Channel_0:选择ADC通道0 ADC_Channel_1:选择ADC通道1 ADC_Channel_2:选择ADC通道2 ADC_Channel_3:选择ADC通道3 ADC_Channel_4:选择ADC通道4 ADC_Channel_5:选择ADC通道5 ADC_Channel_6:选择ADC通道6 ADC_Channel_7:选择ADC通道7 ADC_Channel_8:选择ADC通道8 ADC_Channel_9:选择ADC通道9 ADC_Channel_10:选择ADC通道10 ADC_Channel_11:选择ADC通道11 ADC_Channel_12:选择ADC通道12 ADC_Channel_13:选择ADC通道13 ADC_Channel_14:选择ADC通道14 ADC_Channel_15:选择ADC通道15 ADC_Channel_16:选择ADC通道16 ADC_Channel_17:选择ADC通道17
29
ADC_SampleTime
ADC_SampleTime设定了选中通道的ADC采样时间。 ADC_SampleTime_1Cycles5:采样时间为1.5周期 ADC_SampleTime_7Cycles5:采样时间为7.5周期 ADC_SampleTime_13Cycles5:采样时间为13.5周期 ADC_SampleTime_28Cycles5:采样时间为28.5周期 ADC_SampleTime_41Cycles5:采样时间为41.5周期 ADC_SampleTime_55Cycles5:采样时间为55.5周期 ADC_SampleTime_71Cycles5:采样时间为71.5周期 ADC_SampleTime_239Cycles5:采样时间为239.5周期
16 函数ADC_ExternalTrigConvConfig();
功能描述:使能或者失能ADCx的经外部触发启动转换功能 例:
ADC_ExternalTrigConvCmd(ADC1, ENABLE);
17 函数ADC_GetConversionValue();
功能描述:返回最近一次ADCx规则组的转换结果 例:
u16 DataValue;
DataValue = ADC_GetConversionValue(ADC1);
18 函数ADC_GetDuelModeConversionValue();
功能描述:返回最近一次双ADC模式下的转换结果 例:
u32 DataValue;
DataValue = ADC_GetDualModeConversionValue();
19 函数ADC_AutoInjectedConvCmd();
功能描述:使能或者失能指定ADC在规则组转化后自动开始注入组转换 例:
ADC_AutoInjectedConvCmd(ADC2, ENABLE);
20 函数ADC_InjectedDiscModeCmd();
功能描述:使能或者失能指定ADC的注入组间断模式 例:
ADC_InjectedDiscModeCmd(ADC2, ENABLE);
21 函数ADC_ExternalTrigInjectedConvConfig();
功能描述:配置ADCx的外部触发启动注入组转换功能 例:
ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigConv_T1_CC4);
ADC_ExternalTrigInjectedConv
ADC_ExternalTrigInjectedConv指定了所使用的注入转换启动触发。
ADC_ExternalTrigInjecConv_T1_TRGO:选择定时器1的TRGO作为注入转换外部触发
30
ADC_ExternalTrigInjecConv_T1_CC4:选择定时器1的捕获比较4作为注入转换外部触发 ADC_ExternalTrigInjecConv_T2_TRGO:选择定时器2的TRGO作为注入转换外部触发 ADC_ExternalTrigInjecConv_T2_CC1:选择定时器2的捕获比较1作为注入转换外部触发 ADC_ExternalTrigInjecConv_T3_CC4:选择定时器3的捕获比较4作为注入转换外部触发 ADC_ExternalTrigInjecConv_T4_TRGO:选择定时器4的TRGO作为注入转换外部触发 ADC_ExternalTrigInjecConv_Ext_IT15:选择外部中断线15事件作为注入转换外部触发 ADC_ExternalTrigInjecConv_None:注入转换由软件而不是外部触发启动
22 函数ADC_ExternalTrigInjectedConvCmd();
功能描述:使能或者失能ADCx的经外部触发启动注入组转换功能 例:
ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE);
23 函数ADC_SoftwareStartinjectedConvCmd();
功能描述:使能或者失能ADCx软件启动注入组转换功能 例:
ADC_SoftwareStartInjectedConvCmd(ADC2, ENABLE);
24 函数ADC_GetsoftwareStartinjectedConvStatus();
功能描述:获取指定ADC的软件启动注入组转换状态 例:
FlagStatus Status; Status = ADC_GetSoftwareStartInjectedConvStatus(ADC1);
25 函数ADC_InjectedChannleConfig();
功能描述:设置指定ADC的注入组通道,设置它们的转化顺序和采样时间 例:
ADC_InjectedChannelConfig(ADC1, ADC_Channel_12, 2, ADC_SampleTime_28Cycles5); ADC_InjectedChannelConfig(ADC2, ADC_Channel_4, 11, ADC_SampleTime_71Cycles5);
26 函数ADC_InjectedSequencerLengthConfig();
功能描述:设置注入组通道的转换序列长度 例:
ADC_InjectedSequencerLengthConfig(ADC1, 4);
27 函数ADC_SetinjectedOffset();
功能描述:设置注入组通道的转换偏移值 例:
ADC_SetInjectedOffset(ADC1, ADC_InjectedChannel_3, 0x100);
ADC_InjectedChannel
参数ADC_InjectedChannel指定了必须设置转换偏移值的ADC通道。
ADC_InjectedChannel_1:选择注入通道1 ADC_InjectedChannel_2 选择注入通道2 ADC_InjectedChannel_3:选择注入通道3 ADC_InjectedChannel_4 选择注入通道4
31
28 函数ADC_GetInjectedConversionValue();
功能描述:返回ADC指定注入通道的转换结果 例:
u16InjectedDataValue;InjectedDataValue=ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1);
29 函数ADC_AnalogWatchdogCmd();
功能描述:使能或者失能指定单个/全体,规则/注入组通道上的模拟看门狗 例:
ADC_AnalogWatchdogCmd(ADC2, ADC_AnalogWatchdog_AllRegAllInjecEnable);
30 函数ADC_AnalogWatchdongThresholdsConfig();
功能描述:设置模拟看门狗的高/低阈值 例:
ADC_AnalogWatchdogThresholdsConfig(ADC1, 0x400, 0x100);
31 函数ADC_AnalogWatchdongSingleChannelConfig();
功能描述:对单个ADC通道设置模拟看门狗 例:
ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_1);
32 函数ADC_TampSensorVrefintCmd();
功能描述:使能或者失能温度传感器和内部参考电压通道 例:
ADC_TempSensorVrefintCmd(ENABLE);
33 函数ADC_GetFlagStatus();
功能描述:检查制定ADC标志位置1与否 例:
FlagStatus Status; Status = ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC);
ADC_FLAG
ADC_FLAG_AWD 模拟看门狗标志位 ADC_FLAG_EOC 转换结束标志位 ADC_FLAG_JEOC 注入组转换结束标志位 ADC_FLAG_JSTRT 注入组转换开始标志位 ADC_FLAG_STRT 规则组转换开始标志位
34 函数ADC_ClearFlag();
功能描述:清除ADCx的待处理标志位 例:
ADC_ClearFlag(ADC2, ADC_FLAG_STRT);
35 函数ADC_GetITStatus();
功能描述:检查指定的ADC中断是否发生 例:
ITStatus Status; Status = ADC_GetITStatus(ADC1, ADC_IT_AWD);
32
36 函数ADC_ClearITPendingBit();
功能描述:清除ADCx的中断待处理位 例:
ADC_ClearITPendingBit(ADC2, ADC_IT_JEOC);
五:备份寄存器(BKP)
BKP寄存器结构
BKP_TypeDef,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
u32 RESERVED0; vu16 DR1;
u16 RESERVED1; vu16 DR2;
u16 RESERVED2; vu16 DR3;
u16 RESERVED3; vu16 DR4;
u16 RESERVED4; vu16 DR5;
u16 RESERVED5; vu16 DR6;
u16 RESERVED6; vu16 DR7;
u16 RESERVED7; vu16 DR8;
u16 RESERVED8; vu16 DR9;
u16 RESERVED9; vu16 DR10;
u16 RESERVED10; vu16 RTCCR;
u16 RESERVED11; vu16 CR;
u16 RESERVED12; vu16 CSR;
u16 RESERVED13; }
BKP_TypeDef;
33
BKP库函数
1 函数BKP_DeInit();
功能描述:将外设BKP的全部寄存器重设为缺省值 例:
BKP_DeInit();
2 函数BKP_TamperPinLevelConfig();
功能描述:设置侵入检测管脚的有效电平 例:
BKP_TamperPinLevelConfig(BKP_TamperPinLevel_High);
BKP_TamperPinLevel
参数BKP_TamperPinLevel指定了侵入检测管脚的有效电平。 BKP_TamperPinLevel_High:侵入检测管脚高电平有效 BKP_TamperPinLevel_Low:侵入检测管脚低电平有效
3 函数BKP_TamperPinCmd();
功能描述:使能或者失能管脚的侵入检测功能 例:
BKP_TamperPinCmd(ENABLE);
4 函数BKP_ITConfig();
功能描述:使能或者失能侵入检测中断 例:
BKP_ITConfig(ENABLE);
5 函数BKP_RTCOutputConfig();
功能描述:选择在侵入检测管脚上输出的RTC时钟源 例:
BKP_RTCOutputConfig(BKP_RTCOutputSource_CalibClock);
BKP_RTCOutputSource
参数BKP_RTCOutputSource用来选择RTC输出时钟源
BKP_RTCOutputSource_None 侵入检测管脚上无RTC输出
BKP_RTCOutputSource_CalibClock 侵入检测管脚上输出,其时钟频率为RTC时钟除以64 BKP_RTCOutputSource_Alarm 侵入检测管脚上输出RTC闹钟脉冲 BKP_RTCOutputSource_Second 侵入检测管脚上输出RTC秒脉冲
6 函数BKP_SetRTCCalibrationValue();
功能描述:设置RTC时钟校准值 例:
BKP_SetRTCCalibrationValue(0x7F);
34
7 函数BKP_WriteBackupRegister();
功能描述:向指定的后备寄存器中写入用户程序数据 例:
BKP_WriteBackupRegister(BKP_DR1, 0xA587);
BKP_DR 参数BKP_DR用来选择数据后备寄存器
BKP_DRx:选中数据寄存器x(1—10)
8 函数BKP_ReadBackupRegister();
功能描述:从指定的后备寄存器中读出数据 例:
u16 Data; Data = BKP_ReadBackupRegister(BKP_DR1);
9 函数BKP_GetFlagStatus();
功能描述:检查侵入检测管脚事件的标志位被置位与否 例:
FlagStatus Status;
Status = BKP_GetFlagStatus(); if(Status == RESET) { ... } else { ... }
10 函数BKP_ClearFlag();
功能描述:清除侵入检测管脚事件的待处理标志位 例:
BKP_ClearFlag();
11 函数BKP_GetITStatus();
功能描述:检查侵入检测中断发生与否 例:
ITStatus Status;
Status = BKP_GetITStatus(); if(Status == RESET) { ... } else { ... }
12 函数BKP_ClearITPendingBit();
功能描述:清除侵侵入检测中断的待处理位 例:
BKP_ClearITPendingBit();
35
六、DMA控制器(DMA)
DMA寄存器结构
DMA寄存器结构,DMA_Cannel_TypeDef和DMA_TypeDef,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
vu32 CCR; vu32 CNDTR; vu32 CPAR; vu32 CMAR; }
DMA_Channel_TypeDef;
typedef struct {
vu32 ISR; vu32 IFCR; }
DMA_TypeDef;
DMA库函数
1 函数DMA_DeInit
功能描述:将DMA的通道x寄存器重设为缺省值 例:
DMA_DeInit(DMA_Channel2);
2 函数DMA_Init
功能描述:根据DMA_InitStruct中指定的参数初始化DMA的通道x寄存器
DMA_InitStruct:指向结构DMA_InitTypeDef的指针,包含了DMA通道x的配置信息
DMA_InitTypeDef structure
DMA_InitTypeDef定义于文件“stm32f10x_dma.h”:
typedef struct {
u32 DMA_PeripheralBaseAddr; u32 DMA_MemoryBaseAddr;
u32 DMA_DIR; u32 DMA_BufferSize; u32 DMA_PeripheralInc; u32 DMA_MemoryInc;
u32 DMA_PeripheralDataSize; u32 DMA_MemoryDataSize; u32 DMA_Mode;
u32 DMA_Priority; u32 DMA_M2M; }
DMA_InitTypeDef;
36
DMA_PeripheralBaseAddr
该参数用以定义DMA外设基地址
DMA_MemoryBaseAddr
该参数用以定义DMA内存基地址
DMA_DIR
DMA_DIR规定了外设是作为数据传输的目的地还是来源。 DMA_DIR_PeripheralDST:外设作为数据传输的目的地 DMA_DIR_PeripheralSRC:外设作为数据传输的来源
DMA_BufferSize
DMA_BufferSize用以定义指定DMA通道的DMA缓存的大小,单位为数据单位。根据传输方向,数据单位等于结构中参数DMA_PeripheralDataSize或者参数DMA_MemoryDataSize的值。
DMA_PeripheralInc
DMA_PeripheralInc用来设定外设地址寄存器递增与否 DMA_PeripheralInc_Enable:外设地址寄存器递增 DMA_PeripheralInc_Disable:外设地址寄存器不变
DMA_MemoryInc
DMA_MemoryInc用来设定内存地址寄存器递增与否。 DMA_PeripheralInc_Enable:内存地址寄存器递增 DMA_PeripheralInc_Disable:内存地址寄存器不变
DMA_PeripheralDataSize
DMA_PeripheralDataSize设定了外设数据宽度。 DMA_PeripheralDataSize_Byte:数据宽度为8位
DMA_PeripheralDataSize_HalfWord:数据宽度为16位 DMA_PeripheralDataSize_Word:数据宽度为32位
DMA_MemoryDataSize
DMA_MemoryDataSize设定了外设数据宽度。 DMA_MemoryDataSize_Byte:数据宽度为8位
DMA_MemoryDataSize_HalfWord:数据宽度为16位 DMA_MemoryDataSize_Word:数据宽度为32位
DMA_Mode
DMA_Mode设置了CAN的工作模式,
DMA_Mode_Circular:工作在循环缓存模式 DMA_Mode_Normal:工作在正常缓存模式
DMA_Priority
DMA_Priority设定DMA通道x的软件优先级。
DMA_Priority_VeryHigh:DMA通道x拥有非常高优先级 DMA_Priority_High:DMA通道x拥有高优先级 DMA_Priority_Medium:DMA通道x拥有中优先级 DMA_Priority_Low:DMA通道x拥有低优先级
DMA_M2M
DMA_M2M使能DMA通道的内存到内存传输。
DMA_M2M_Enable:DMA通道x设置为内存到内存传输
DMA_M2M_Disable:DMA通道x没有设置为内存到内存传输
37
例:
DMA_InitTypeDef DMA_InitStructure;
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40005400; DMA_InitStructure.DMA_MemoryBaseAddr = 0x20000100; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 256; DMA_InitStructure. DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA_Channel1, &DMA_InitStructure);
3 函数DMA_StructInit
功能描述:把DMA_InitStruct中的每一个参数按缺省值填入 DMA_InitStruct:指向结构DMA_InitTypeDef的指针,待初始化
结构DMA_InitStruct的各个成员有如下的缺省值: DMA_PeripheralBaseAddr:0 DMA_MemoryBaseAddr:0
DMA_DIR:DMA_DIR_PeripheralSRC DMA_BufferSize:0
DMA_PeripheralInc:DMA_PeripheralInc_Disable DMA_MemoryInc:DMA_MemoryInc_Disable
DMA_PeripheralDataSize:DMA_PeripheralDataSize_Byte DMA_MemoryDataSize:DMA_MemoryDataSize_Byte DMA_Mode:DMA_Mode_Normal DMA_Priority:DMA_Priority_Low DMA_M2M:DMA_M2M_Disable
例:
DMA_InitTypeDef DMA_InitStructure; DMA_StructInit(&DMA_InitStructure);
4 函数DMA_Cmd
功能描述:使能或者失能指定的通道x 例:
DMA_Cmd(DMA_Channel7, ENABLE);
5 函数DMA_ITConfig
功能描述:使能或者失能指定的通道x中断 例:
DMA_ITConfig(DMA_Channel5, DMA_IT_TC, ENABLE);
DMA_IT
输入参数DMA_IT使能或者失能DMA通道x的中断。 DMA_IT_TC:传输完成中断屏蔽 DMA_IT_HT:传输过半中断屏蔽 DMA_IT_TE:传输错误中断屏蔽
38
6 函数DMA_GetCurrDataCounte
功能描述:返回当前DMA通道x剩余的待传输数据数目 例:
u16 CurrDataCount;
CurrDataCount = DMA_GetCurrDataCounter(DMA_Channel2);
7 函数DMA_GetFlagStatus
功能描述:检查指定的DMA通道x标志位设置与否 例:
FlagStatus Status;
Status = DMA_GetFlagStatus(DMA_FLAG_HT6);
DMA_FLAG 参数DMA_FLAG定义了待检察的标志位类型
DMA_FLAG_GLx:通道x全局标志位
DMA_FLAG_TCx:通道x传输完成标志位 DMA_FLAG_HTx:通道x传输过半标志位
DMA_FLAG_TEx:通道x传输错误标志位(1--7)
8 函数DMA_ClearFlag
功能描述:清除DMA通道x待处理标志位 例:
DMA_ClearFlag(DMA_FLAG_TE3);
9 函数DMA_GetITStatus
功能描述:检查指定的DMA通道x中断发生与否 例:
ITStatus Status;
Status = DMA_GetITStatus(DMA_IT_TC7);
DMA_IT
参数DMA_IT定义了待检察的DMA中断。 DMA_IT_GLx:通道x全局中断 DMA_IT_TCx:通道x传输完成中断 DMA_IT_HTx:通道x传输过半中断
DMA_IT_TEx:通道x传输错误中断(1--7)
10 函数DMA_ClearITPendingBit
功能描述:清除DMA通道x中断待处理标志位 例:
DMA_ClearITPendingBit(DMA_IT_GL5);
39
七、复位和时钟设置(RCC)
RCC寄存器结构
RCC寄存器结构,RCC_TypeDeff,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
vu32 CR; vu32 CFGR; vu32 CIR;
vu32 APB2RSTR; vu32 APB1RSTR; vu32 AHBENR; vu32 APB2ENR; vu32 APB1ENR; vu32 BDCR; vu32 CSR; }
RCC_TypeDef;
RCC库函数
1 函数RCC_DeInit
功能描述:将外设RCC寄存器重设为缺省值 例:
RCC_DeInit();
1. 该函数不改动寄存器RCC_CR的HSITRIM[4:0]位。 2. 该函数不重置寄存器RCC_BDCR和寄存器RCC_CSR。
2 函数RCC_HSEConfig
功能描述:设置外部高速晶振(HSE) 例:
RCC_HSEConfig(RCC_HSE_ON);
RCC_HSE
该参数设置了HSE的状态
RCC_HSE_OFF:HSE晶振OFF RCC_HSE_ON:HSE晶振ON
RCC_HSE_Bypass:HSE晶振被外部时钟旁路
3 函数RCC_WaitForHSEStartUp
功能描述:等待HSE起振,该函数将等待直到HSE就绪,或者在超时的情况下退出 例:
ErrorStatus HSEStartUpStatus;
RCC_HSEConfig(RCC_HSE_ON); /* Enable HSE */
HSEStartUpStatus = RCC_WaitForHSEStartUp();/* Wait till HSE is ready and if Time out is reached exit */ if(HSEStartUpStatus == SUCCESS) {
/* Add here PLL ans system clock config */
40
} else {
/* Add here some code to deal with this error */ }
4 函数RCC_AdjustHSICalibrationValue
功能描述:调整内部高速晶振(HSI)校准值 例:
RCC_AdjustHSICalibrationValue(0x1F);
5 函数RCC_HSICmd
功能描述:使能或者失能内部高速晶振(HSI) 例:
RCC_HSICmd(ENABLE);
6 函数RCC_PLLConfig
功能描述:设置PLL时钟源及倍频系数 例:
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
警告:必须正确设置软件,使PLL输出时钟频率不超过72 MHz
RCC_PLLSource
RCC_PLLSource用以设置PLL的输入时钟源。
RCC_PLLSource_HSI_Div2:PLL的输入时钟 = HSI时钟频率除以2 RCC_PLLSource_HSE_Div1:PLL的输入时钟 = HSE时钟频率
RCC_PLLSource_HSE_Div2:PLL的输入时钟 = HSE 时钟频率除以2
RCC_PLLMul
该参数用以设置PLL的倍频系数。
RCC_PLLMul_a:PLL输入时钟 x a;(2--16)
7 函数RCC_PLLCmd
功能描述:使能或者失能PLL 例:
RCC_PLLCmd(ENABLE);
8 函数RCC_SYSCLKConfig
功能描述:设置系统时钟(SYSCLK) 例:
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
RCC_SYSCLKSource
该参数设置了系统时钟
RCC_SYSCLKSource_HSI:选择HSI作为系统时钟 RCC_SYSCLKSource_HSE:选择HSE作为系统时钟
RCC_SYSCLKSource_PLLCLK:选择PLL作为系统时钟
41
9 函数RCC_GetSYSCLKSource
功能描述:返回用作系统时钟的时钟源 例:
if(RCC_GetSYSCLKSource() != 0x04) /* Test if HSE is used as system clock */ { } else { }
返回值
用作系统时钟的时钟源: 0x00:HSI作为系统时钟 0x04:HSE作为系统时钟 0x08:PLL作为系统时钟
10 函数RCC_HCLKConfig
功能描述:设置AHB时钟(HCLK) 例:
/* Configure HCLK such as HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_HCLK
该参数设置了AHB时钟
RCC_SYSCLK_Div1:AHB时钟 = 系统时钟 /1 RCC_SYSCLK_Div2:AHB时钟 = 系统时钟 / 2 RCC_SYSCLK_Div4:AHB时钟 = 系统时钟 / 4 RCC_SYSCLK_Div8:AHB时钟 = 系统时钟 / 8 RCC_SYSCLK_Div16:AHB时钟 = 系统时钟 / 16 RCC_SYSCLK_Div64:AHB时钟 = 系统时钟 / 64 RCC_SYSCLK_Div128:AHB时钟 = 系统时钟 / 128 RCC_SYSCLK_Div256:AHB时钟 = 系统时钟 / 256 RCC_SYSCLK_Div512:AHB时钟 = 系统时钟 / 512
11 函数RCC_PCLK1Config
功能描述:设置低速AHB时钟(PCLK1) 例:
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK1
该参数设置了低速AHB时钟(PCLK1) RCC_HCLK_Div1:APB1时钟 = HCLK /1 RCC_HCLK_Div2:APB1时钟 = HCLK / 2 RCC_HCLK_Div4:APB1时钟 = HCLK / 4 RCC_HCLK_Div8:APB1时钟 = HCLK / 8 RCC_HCLK_Div16:APB1时钟 = HCLK / 16
42
12 函数RCC_PCLK2Config
功能描述:设置高速AHB时钟(PCLK2) 例:
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK2
该参数设置了高速AHB时钟(PCLK2)
RCC_HCLK_Div1:APB2时钟 = HCLK RCC_HCLK_Div2:APB2时钟 = HCLK / 2 RCC_HCLK_Div4:APB2时钟 = HCLK / 4 RCC_HCLK_Div8:APB2时钟 = HCLK / 8 RCC_HCLK_Div16:APB2时钟 = HCLK / 16
13 函数RCC_ITConfig
功能描述:使能或者失能指定的RCC中断 例:
RCC_ITConfig(RCC_IT_PLLRDY, ENABLE);
RCC_IT
输入参数RCC_IT使能或者失能RCC的中断。 RCC_IT_LSIRDY:LSI就绪中断 RCC_IT_LSERDY:LSE就绪中断 RCC_IT_HSIRDY:HSI就绪中断 RCC_IT_HSERDY:HSE就绪中断 RCC_IT_PLLRDY:PLL就绪中断
14 函数RCC_USBCLKConfig
功能描述:设置USB时钟(USBCLK) 例:
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
RCC_USBCLKSource
该参数设置了USB时钟(USBCLK)
RCC_USBCLKSource_PLLCLK_1Div5:USB时钟 = PLL时钟除以1.5 RCC_USBCLKSource_PLLCLK_Div1:USB时钟 = PLL时钟
15 函数RCC_ADCCLKConfig
功能描述:设置ADC时钟(ADCCLK) 例:
RCC_ADCCLKConfig(RCC_PCLK2_Div2);
RCC_ADCCLKSource
该参数设置了ADC时钟(ADCCLK)
RCC_PCLK2_Div2:ADC时钟 = PCLK / 2 RCC_PCLK2_Div4:ADC时钟 = PCLK / 4 RCC_PCLK2_Div6:ADC时钟 = PCLK / 6 RCC_PCLK2_Div8:ADC时钟 = PCLK / 8
43
16 函数RCC_LSEConfig
功能描述:设置外部低速晶振(LSE) 例:
/* Enable the LSE */
RCC_LSEConfig(RCC_LSE_ON);
RCC_LSE
该参数设置了HSE的状态
RCC_LSE_OFF:LSE晶振OFF RCC_LSE_ON:LSE晶振ON
RCC_LSE_Bypass:LSE晶振被外部时钟旁路
17 函数RCC_LSICmd
功能描述:使能或者失能内部低速晶振(LSI) 例:
RCC_LSICmd(ENABLE);
18 函数RCC_RTCCLKConfig
功能描述:设置RTC时钟(RTCCLK) 例:
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RCC_RTCCLKSource
该参数设置了RTC时钟(RTCCLK)
RCC_RTCCLKSource_LSE:选择LSE作为RTC时钟 RCC_RTCCLKSource_LSI:选择LSI作为RTC时钟
RCC_RTCCLKSource_HSE_Div128:选择HSE时钟频率除以128作为RTC时钟
19 函数RCC_RTCCLKCmd
功能描述:使能或者失能RTC时钟 例:
RCC_RTCCLKCmd(ENABLE);
20 函数RCC_GetClocksFreq
功能描述:返回不同片上时钟的频率 例:
RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks);
RCC_Clocks:指向结构RCC_ClocksTypeDef的指针,包含了各个时钟的频率
RCC_ClocksTypeDef structure
RCC_ClocksTypeDef定义于文件“stm32f10x_rcc.h”:
typedef struct {
u32 SYSCLK_Frequency; u32 HCLK_Frequency;
44
u32 PCLK1_Frequency; u32 PCLK2_Frequency; u32 ADCCLK_Frequency; }
RCC_ClocksTypeDef;
SYSCLK_Frequency
该成员返回SYSCLK的频率,单位 Hz
HCLK_Frequency
该成员返回HCLK的频率,单位 Hz
PCLK1_Frequency
该成员返回PCLK1的频率,单位 Hz
PCLK2_Frequency
该成员返回PCLK2的频率,单位 Hz
ADCCLK_Frequency
该成员返回ADCCLK的频率,单位 Hz
21 函数RCC_AHBPeriphClockCmd
功能描述:使能或者失能AHB外设时钟 例:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA);
RCC_AHBPeriph
该参数被门控的AHB外设时钟,可以取下表的一个或者多个取值的组合作为该参数的值。 RCC_AHBPeriph_DMA:DMA时钟 RCC_AHBPeriph_SRAM:SRAM时钟 RCC_AHBPeriph_FLITF:FLITF时钟
22 函数RCC_APB2PeriphClockCmd
功能描述:使能或者失能APB2外设时钟 例:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);
RCC_APB2Periph
该参数被门控的APB2外设时钟,可以取下表的一个或者多个取值的组合作为该参数的值。 RCC_APB2Periph_AFIO:功能复用IO时钟 RCC_APB2Periph_GPIOA:GPIOA时钟 RCC_APB2Periph_GPIOB:GPIOB时钟 RCC_APB2Periph_GPIOC:GPIOC时钟 RCC_APB2Periph_GPIOD:GPIOD时钟 RCC_APB2Periph_GPIOE:GPIOE时钟 RCC_APB2Periph_ADC1:ADC1时钟 RCC_APB2Periph_ADC2:ADC2时钟 RCC_APB2Periph_TIM1:TIM1时钟 RCC_APB2Periph_SPI1:SPI1时钟
RCC_APB2Periph_USART1:USART1时钟 RCC_APB2Periph_ALL:全部APB2外设时钟
45
23 函数RCC_APB1PeriphClockCmd
功能描述:使能或者失能APB1外设时钟 例:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR, ENABLE);
RCC_APB1Periph
该参数被门控的APB1外设时钟,可以取下表的一个或者多个取值的组合作为该参数的值。 RCC_APB1Periph_TIM2:TIM2时钟 RCC_APB1Periph_TIM3:TIM3时钟 RCC_APB1Periph_TIM4:TIM4时钟 RCC_APB1Periph_WWDG:WWDG时钟 RCC_APB1Periph_SPI2:SPI2时钟
RCC_APB1Periph_USART2:USART2时钟 RCC_APB1Periph_USART3:USART3时钟 RCC_APB1Periph_I2C1:I2C1时钟 RCC_APB1Periph_I2C2:I2C2时钟 RCC_APB1Periph_USB:USB时钟 RCC_APB1Periph_CAN:CAN时钟
24 函数RCC_APB2PeriphResetCmd
功能描述:强制或者释放高速APB(APB2)外设复位 例:
/* Enter the SPI1 peripheral to reset */
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); /* Exit the SPI1 peripheral from reset */
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE);
25 函数RCC_APB1PeriphResetCmd
功能描述:强制或者释放低速APB(APB1)外设复位 例:
/* Enter the SPI2 peripheral to reset */
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE); /* Exit the SPI2 peripheral from reset */
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE);
26 函数RCC_BackupResetCmd
功能描述:强制或者释放后备域复位 例:
/* Reset the entire Backup domain */ RCC_BackupResetCmd(ENABLE);
27 函数RCC_ClockSecuritySystemCmd
功能描述:使能或者失能时钟安全系统 例:
/* Enable the Clock Security System */ RCC_ClockSecuritySystemCmd(ENABLE);
46
28 函数RCC_MCOConfig
功能描述:选择在MCO管脚上输出的时钟源 例:
RCC_MCOConfig(RCC_MCO_PLLCLK_Div2);
警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
RCC_MCO
该参数设置了指定输出的时钟源
RCC_MCO_NoClock:无时钟被选中 RCC_MCO_SYSCLK:选中系统时钟 RCC_MCO_HSI:选中HSI RCC_MCO_HSE:选中HSE
RCC_MCO_PLLCLK_Div2:选中PLL时钟除以2
29 函数RCC_GetFlagStatus
功能描述:检查指定的RCC标志位设置与否 例:
/* Test if the PLL clock is ready or not */ FlagStatus Status;
Status = RCC_GetFlagStatus(RCC_FLAG_PLLRDY); if(Status == RESET) { ... } else
RCC_FLAG
给出了所有可以被函数RCC_ GetFlagStatus检查的标志位列表 RCC_FLAG_HSIRDY:HSI晶振就绪 RCC_FLAG_HSERDY:HSE晶振就绪 RCC_FLAG_PLLRDY:PLL就绪 RCC_FLAG_LSERDY:LSI晶振就绪 RCC_FLAG_LSIRDY:LSE晶振就绪 RCC_FLAG_PINRST:管脚复位 RCC_FLAG_PORRST:POR/PDR复位 RCC_FLAG_SFTRST:软件复位 RCC_FLAG_IWDGRST I:WDG复位 RCC_FLAG_WWDGRST:WWDG复位 RCC_FLAG_LPWRRST:低功耗复位
30 函数RCC_ClearFlag
功能描述:清除RCC的复位标志位 例:
RCC_ClearFlag();
31 函数RCC_GetITStatus
功能描述:检查指定的RCC中断发生与否 例:
47
/* Test if the PLL Ready interrupt has occurred or not */ ITStatus Status;
Status = RCC_GetITStatus(RCC_IT_PLLRDY); if(Status == RESET) { ... } else { ... }
RCC_IT
给出了所有可以被函数RCC_ GetITStatus检查的中断标志位列表 RCC_IT_LSIRDY:LSI晶振就绪中断 RCC_IT_LSERDY:LSE晶振就绪中断 RCC_IT_HSIRDY: HSI晶振就绪中断 RCC_IT_HSERDY:HSE晶振就绪中断 RCC_IT_PLLRDY:PLL就绪中断 RCC_IT_CSS:时钟安全系统中断
32 函数RCC_ClearITPendingBit
功能描述:清除RCC的中断待处理位 例:
/* Clear the PLL Ready interrupt pending bit */ RCC_ClearITPendingBit(RCC_IT_PLLRDY);
RCC_IT
给出了所有可以被函数RCC_ ClearITPendingBit清除的中断待处理位列表 RCC_IT_LSIRDY:LSI晶振就绪中断 RCC_IT_LSERDY:LSE晶振就绪中断 RCC_IT_HSIRDY:HSI晶振就绪中断 RCC_IT_HSERDY:HSE晶振就绪中断 RCC_IT_PLLRDY:PLL就绪中断 RCC_IT_CSS:时钟安全系统中断
八、嵌套向量中断控制器(NVIC)
NVIC寄存器结构
NVIC寄存器结构,NVIC_TypeDeff,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
vu32 Enable[2]; u32 RESERVED0[30]; vu32 Disable[2]; u32 RSERVED1[30]; vu32 Set[2];
48
u32 RESERVED2[30]; vu32 Clear[2];
u32 RESERVED3[30]; vu32 Active[2]; u32 RESERVED4[62]; vu32 Priority[11]; }
NVIC_TypeDef;/* NVIC Structure */
typedef struct {
vu32 CPUID;
vu32 IRQControlState;
vu32 ExceptionTableOffset; vu32 AIRC; vu32 SysCtrl; vu32 ConfigCtrl;
vu32 SystemPriority[3]; vu32 SysHandlerCtrl; vu32 ConfigFaultStatus; vu32 HardFaultStatus; vu32 DebugFaultStatus;
vu32 MemoryManageFaultAddr; vu32 BusFaultAddr; }
SCB_TypeDef; /* System Control Block Structure */
NVIC库函数
1 函数NVIC_DeInit
功能描述:将外设NVIC寄存器重设为缺省值 例:
NVIC_DeInit();
2 函数NVIC_SCBDeInit
功能描述:将外设SCB寄存器重设为缺省值 例:
NVIC_SCBDeInit();
3 函数NVIC_PriorityGroupConfig
功能描述:设置优先级分组:先占优先级和从优先级 例:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_PriorityGroup
该参数设置优先级分组位长度
NVIC_PriorityGroup_0:先占优先级0位从优先级4位 NVIC_PriorityGroup_1:先占优先级1位从优先级3位 NVIC_PriorityGroup_2:先占优先级2位从优先级2位
49
NVIC_PriorityGroup_3:先占优先级3位从优先级1位 NVIC_PriorityGroup_4:先占优先级4位从优先级0位
4 函数NVIC_Init
功能描述:根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
NVIC_InitStruct:指向结构NVIC_InitTypeDef的指针,包含了外设GPIO的配置信息
NVIC_InitTypeDef structure
NVIC_InitTypeDef定义于文件“stm32f10x_nvic.h”:
typedef struct {
u8 NVIC_IRQChannel;
u8 NVIC_IRQChannelPreemptionPriority; u8 NVIC_IRQChannelSubPriority;
FunctionalState NVIC_IRQChannelCmd; }
NVIC_InitTypeDef;
例:
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5; NVIC_InitStructure(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7; NVIC_InitStructure(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7; NVIC_InitStructure(&NVIC_InitStructure);
NVIC_IRQChannel
该参数用以使能或者失能指定的IRQ通道。 WWDG_IRQChannel:窗口看门狗中断 PVD_IRQChannel:PVD通过EXTI探测中断 TAMPER_IRQChannel:篡改中断 RTC_IRQChannel:RTC全局中断
FlashItf_IRQChannel:FLASH全局中断 RCC_IRQChannel:RCC全局中断
EXTI0_IRQChannel:外部中断线0中断 EXTI1_IRQChannel:外部中断线1中断 EXTI2_IRQChannel:外部中断线2中断 EXTI3_IRQChannel:外部中断线3中断 EXTI4_IRQChannel:外部中断线4中断
DMAChannel1_IRQChannel:DMA通道1中断 DMAChannel2_IRQChannel:DMA通道2中断
50