当前位置:文档之家› stm32库函数详解

stm32库函数详解

stm32库函数详解
stm32库函数详解

STM32库函数简介

一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3

二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7

三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9四:ADC寄存器------------------------------------------------------------------------25 五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33

六、DMA控制器(DMA)---------------------------------------------------------------37

七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41

八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49

命名规则

在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。

名为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)

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_InitTypeDef structure

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

例:

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

功能描述:选择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管脚用作外部中断线路

二、外部中断/事件控制器(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_Line

EXTI_Line选择了待使能或者失能的外部线路。

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线路触发请求发生与否

例:

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;

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:T DTS = T ck_tim

TIM_CKD_DIV2:T DTS = 2T ck_tim

TIM_CKD_DIV4:T DTS = 4T ck_tim

TIM_CounterMode

TIM_CounterMode选择了计数器模式。

TIM_CounterMode_Up:TIM向上计数模式

TIM_CounterMode_Down:TIM向下计数模式

TIM_CounterMode_CenterAligned1:TIM中央对齐模式1计数模式

TIM_CounterMode_CenterAligned2:TIM中央对齐模式2计数模式

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_ICStructInit(&TIM_ICInitStructure);

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

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

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_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_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计数器模式

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_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);

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

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:生成重复的脉冲:在更新事件时计数器不停止

STM32固件库的学习(重要,要常看)

1. stm32的编程中,在stdperiph_drive中添加的misc.c文件是干什么用的啊? 因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。 2. STM32F10XXX V 3.5标准外设库文件夹描述 标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。 STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。Project 文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。Utilities包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。 3.文件功能说明

4.CMSIS文件夹结构

在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库

(StdPeriph_Lib): (1)使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。用户只需要配置文件”stm32f10x_conf.h”,并使用相应的文件”stm32f10x_ppp.h/.c”即可。 (2) 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。 5. STM32F10XXX标准外设库的使用 标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学习可以更加灵活的使用固件库,同时也将极大增强程序的规范性和易读性,同时标准外设库中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。 a.缩写定义 标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。

stm32入门C语言详解

阅读flash:芯片内部存储器flash操作函数我的理解——对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。 基础应用1,FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2); 位置:RCC初始化子函数里面,时钟起振之后。 基础应用2,开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的 用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 位置:RCC初始化子函数里面,时钟起振之后。 3、阅读lib:调试所有外设初始化的函数。 我的理解——不理解,也不需要理解。只要知道所有外设在调试的时候,EWRAM需要从这个函数里面获得调试所需信息的地址或者指针之类的信息。 基础应用1,只有一个函数debug。所有程序中必须的。 用法:#ifdef DEBUG debug(); #endif 位置:main函数开头,声明变量之后。 4、阅读nvic:系统中断管理。 我的理解——管理系统内部的中断,负责打开和关闭中断。 基础应用1,中断的初始化函数,包括设置中断向量表位置,和开启所需的中断两部分。所有程序中必须的。 用法:void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; //中断管理恢复默认参数 #ifdef VECT_TAB_RAM //如果C/C++ Compiler\Preprocessor\Defined symbols中的定义了 VECT_TAB_RAM(见程序库更改内容的表格) NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //则在RAM调试 #else //如果没有定义VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);//则在Flash里调试 #endif //结束判断语句 //以下为中断的开启过程,不是所有程序必须的。 //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC优先级分组,方式。 //注:一共16个优先级,分为抢占式和响应式。两种优先级所占的数量由此代码确定, NVIC_PriorityGroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个和响应优先级有16、8、4、2、1个。规定两种优先级的数量后,所有的中断级别必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。 //NVIC_InitStructure.NVIC_IRQChannel = 中断通道名; //开中断,中断名称见函数库 //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级 //NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //启动此通道的中断 //NVIC_Init(&NVIC_InitStructure); 中断初始化

stm32库函数解释

部分库函数简介 一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3 二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7 三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9四:ADC寄存器------------------------------------------------------------------------25 五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33 六、DMA控制器(DMA)---------------------------------------------------------------37 七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41 八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49

理解__STM32__GPIO初始化__库函数

使用库函数进行STM32的产品开发无疑可以节省大量时间。下面将介绍GPIO 初始化所用到的库函数 以最常用的GPIO设备的初始化函数为例,如下程序段一: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOA,&GPIO_InitStructure) 这是一个在STM32的程序开发中经常使用到的GPIO初始化程序段,其功能是将GPIOA.4口初始化为推挽输出状态,并最大翻转速率为50MHz。下面逐一分解:l 首先是1,该语句显然定义了一个GPIO_InitTypeDef类型的变量,名为 GPIO_InitStructure,则找出GPIO_InitTypeDef的原型位于 “stm32f10x_gpio.h”文件,原型如下: typedef struct { u16GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }GPIO_InitTypeDef; 由此可知GPIO_InitTypeDef是一个结构体类型同义字,其功能是定义一个结构体,该结构体有三个成员分别是u16类型的GPIO_Pin、 GPIOSpeed_TypeDef类型的GPIO_Speed和GPIOMode_TypeDef类型的 GPIO_Mode。继续探查GPIOSpeed_TypeDef和GPIOMode_TypeDef类型,在“stm32f10x_gpio.h”文件中找到对GPIOSpeed_TypeDef的定义: typedef enum { GPIO_Speed_10MHz=1, GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef; 则可知GPIOSpeed_TypeDef枚举类型同一只,其功能是定义一个枚举类型变量,该变量可表示GPIO_Speed_10MHz、GPIO_Speed_2MHz和 GPIO_Speed_50MHz三个含义(其中GPIO_Speed_10MHz已经定义为1,读者必须知道GPIO_Speed_2MHz则依次被编译器赋予2,而GPIO_Speed_50MHz 为3)。 同样也在“stm32f10x_gpio.h”文件中找到对GPIOMode_TypeDef的定义: typedef enum

STM32固件库详解42324

STM32固件库详解 最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很大的局限性,具体不足欢迎指正。基于标准外设库的软件开发 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

ST公司2007年10月发布了版本的固件库,MDK 之前的版本均支持该库。2008年6月发布了版的固件库,从2008年9月推出的MDK 版本至今均使用版本的固件库。以后的版本相对之前的版本改动较大,本书使用目前较新的版本。 使用标准外设库开发的优势 简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC 等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。 STM32F10XXX标准外设库结构与文件描述 1. 标准外设库的文件结构 在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的版本,开发环境中自带的标准外设库为版本,本书中以比较稳定而且较新的版本为基础介绍标准外设库的结构。

献给新手:解析STM32的库函数

意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是ST推出这样一个开发包的初衷。 但这对于许多从51/AVR这类单片机的开发转到STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但STM32微控制器的寄存器规模可不是常见的8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的维护,升级来说也会增加资源的消耗。对于当前“时间就是金钱”的行业竞争环境,无疑使用库函数进行STM32的产品开发是更好的选择。本文将通过一个简单的例子对STM32的库函数做一个简单的剖析。 以最常用的GPIO设备的初始化函数为例,如下程序段一: GPIO_InitTypeDef GPIO_InitStructure; 1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 2 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 4 GPIO_Init(GPIOA , &GPIO_InitStructure 5 这是一个在STM32的程序开发中经常使用到的GPIO初始化程序段,其功能是将GPIOA.4口初始化为推挽输出状态,并最大翻转速率为50MHz。下面逐一分解: 首先是1,该语句显然定义了一个GPIO_InitTypeDef类型的变量,名为GPIO_InitStructure,则找出GPIO_InitTypeDef的原型位于“stm32f10x_gpio.h” 文件,原型如下: typedef struct { u16 GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }GPIO_InitTypeDef; 由此可知GPIO_InitTypeDef是一个结构体类型同义字,其功能是定义一个结构体,该结构体有三个成员分别是u16类型的GPIO_Pin、 GPIOSpeed_TypeDef 类型的GPIO_Speed和GPIOMode_TypeDef 类型的 GPIO_Mode。继续探查GPIOSpeed_TypeDef和GPIOMode_TypeDef类型,在“stm32f10x_gpio.h”文件中找到对GPIOSpeed_TypeDef的定义: typedef enum { GPIO_Speed_10MHz = 1,

STM32F4库函数笔记

(1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种 推挽输出:可以输出高,低电平,连接数字器件; 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行,一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。 浮空输入:由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。 GPIO GPIO_Init函数初始化 { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟 //GPIOF9,F10初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1对应IO口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF9,F10 } 2个读取输入电平函数: uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。 例如: GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); 作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。 例如: GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有io口输入电平 2个读取输出电平函数: uint8_t GPIO_ReadOutputDataBit (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。 例如:

STM32固件库详解

STM32固件库详解 https://www.doczj.com/doc/9112895785.html,/emouse/archive/2011/11/29/2268441.html 1.1 基于标准外设库的软件开发 1.1.1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。 ST公司2007年10月发布了V1.0版本的固件库,MDK ARM3.22之前的版本均支持该库。2008年6月发布了V2.0版的固件库,从2008年9月推出的MDK ARM3.23版本至今均使用V2.0版本的固件库。V3.0以后的版本相对之前的版本改动较大,本书使用目前较新的V3.4版本。 1.1.2 使用标准外设库开发的优势 简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。对应的C源代

stm32启动文件详解

STM32启动文件详解 一、启动文件的作用 1.初始化堆栈指针SP; 2.初始化程序计数器指针PC; 3.设置堆、栈的大小; 4.设置异常向量表的入口地址; 5.配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM); 6.设置C库的分支入口__main(最终用来调用main函数); 7.在版的启动文件还调用了在文件中的SystemIni()函数配置系统时钟。

二、汇编指令

三、启动代码 ----- 栈 Stack_Size EQU 0x00000400 ; 栈的大小 AREA STACK, NOINIT, READWRITE,ALIGN=3 Stack_Mem SPACE Stack_Size ; 分配栈空间 __initial_sp ; 栈的结束地址(栈顶地址) 分配名为STACK,不初始化,可读可写,8(2^3)字节对齐的1KB空间。 栈:局部变量,函数形参等。栈的大小不能超过内部SRAM大小。 AREA:汇编一个新的代码段或者数据段。STACK段名,任意命名;NOINIT表示不初始化;READWRITE可读可写;ALIGN=3(2^3= 8字节对齐)。 __initial_sp紧挨了SPACE放置,表示栈的结束地址,栈是从高往低生长,结束地址就是栈顶地址。

----- 堆 Heap_Size EQU 0x00000200 ; 堆的大小(512Bytes) AREA HEAP, NOINIT, READWRITE,ALIGN=3 __heap_base ; 堆的起始地址 Heap_Mem SPACE Heap_Size ; 分配堆空间 __heap_limit ; 堆的结束地址 分配名为HEAP,不初始化,可读可写,8(2^3)字节对齐的512字节空间。__heap_base堆的起始地址,__heap_limit堆的结束地址。堆由低向高生长。动态分配内存用到堆。 PRESERVE8 -- 指定当前文件的堆/栈按照8 字节对齐。 THUMB-- 表示后面指令兼容THUMB 指令。THUBM 是ARM 以前的指令集,16bit;现在Cortex-M 系列的都使用THUMB-2 指令集,THUMB-2 是32 位的,兼容16 位和32 位的指令,是THUMB 的超级。 3.向量表 AREA RESET, DATA, READONLY EXPORT __Vectors E XPORT __Vectors_End E XPORT __Vectors_Size 定义一个名为RESET,可读的数据段。并声明__Vectors、__Vectors_End 和__Vectors_Size 这三个标号可被外部的文件使用。 __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler

STM32库函数功能详解

STM32库函数简介 一、通用输入/输出(GPIO)--------------------------------------------------------------------------------------------3 二、外部中断/事件控制器(EXTI)-----------------------------------------------------------------------------------7 三、通用定时器(TIM)-------------------------------------------------------------------------------------------------9 四:ADC寄存器------------------------------------------------------------------------25 五:备份寄存器(BKP)-------------------------------------------------------------------------------------------------33 六、DMA控制器(DMA)---------------------------------------------------------------37 七、复位和时钟设置(RCC)------------------------------------------------------------------------------------------41 八、嵌套向量中断控制器(NVIC)-----------------------------------------------------------------------------------49

STM32固件库详解

STM32固件库详解基于标准外设库的软件开发 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。 ST公司2007年10月发布了版本的固件库,MDK 之前的版本均支持该库。2008年6月发布了版的固件库,从2008年9月推出的MDK 版本至今均使用版本的固件库。以后的版本相对之前的版本改动较大,本书使用目前较新的版本。 使用标准外设库开发的优势 简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。 STM32F10XXX标准外设库结构与文件描述 1. 标准外设库的文件结构 在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的版本,开发环境中自带的标准外设库为版本,本书中以比较稳定而且较新的版本为基础介绍标准外设库的结构。

STM32固件库使用手册的中文翻译

UM0427用户手册 32位基于ARM微控制器STM32F101xx与STM32F103xx 固件函数库介绍 本手册介绍了32位基于ARM微控制器STM32F101xx与STM32F103xx的固件函数库。 该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。因此,使用本固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。 每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。 所有的驱动源代码都符合“Strict ANSI-C”标准(项目于范例文件符合扩充ANSI-C标准)。我们已经把驱动源代码文档化,他们同时兼容MISRA-C 2004标准(根据需要,我们可以提供兼容矩阵)。由于整个固态函数库按照“Strict ANSI-C”标准编写,它不受不同开发环境的影响。仅对话启动文件取决于开发环境。 该固态函数库通过校验所有库函数的输入值来实现实时错误检测。该动态校验提高了软件的鲁棒性。实时检测适合于用户应用程序的开发和调试。但这会增加了成本,可以在最终应用程序代码中移去,以优化代码大小和执行速度。想要了解更多细节,请参阅Section 2.5。 因为该固件库是通用的,并且包括了所有外设的功能,所以应用程序代码的大小和执行速度可能不是最优的。对大多数应用程序来说,用户可以直接使用之,对于那些在代码大小和执行速度方面有严格要求的应用程序,该固件库驱动程序可以作为如何设置外设的一份参考资料,根据实际需求对其进行调整。 此份固件库用户手册的整体架构如下: ?定义,文档约定和固态函数库规则。 ?固态函数库概述(包的内容,库的架构),安装指南,库使用实例。 ?固件库具体描述:设置架构和每个外设的函数。 STM32F101xx和STM32F103xx在整个文档中被写作STM32F101x。

STM32函数库的调用

STM32函数库的调用 一·时钟配置.c void RCC_Configuration(void) { /*将外设RCC寄存器重设为缺省值*/ RCC_DeInit(); /*设置外部高速晶振(HSE)*/ RCC_HSEConfig(RCC_HSE_ON); //RCC_HSE_ON——HSE晶振打开(ON) /*等待HSE起振*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪 { /*设置AHB时钟(HCLK)*/ RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB时钟= 系统时钟 /* 设置高速AHB时钟(PCLK2)*/ RCC_PCLK2Config(RCC_HCLK_Div1); //RCC_HCLK_Div1——APB2时钟= HCLK /*设置低速AHB时钟(PCLK1)*/ RCC_PCLK1Config(RCC_HCLK_Div2); //RCC_HCLK_Div2——APB1时钟= HCLK / 2 /*设置FLASH存储器延时时钟周期数*/ FLASH_SetLatency(FLASH_Latency_2); //FLASH_Latency_2??2延时周期 /*选择FLASH预取指缓存的模式*/ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 预取指缓存使能/*设置PLL时钟源及倍频系数*/ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // PLL的输入时钟= HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x 9 /*使能PLL */ RCC_PLLCmd(ENABLE); /*检查指定的RCC标志位(PLL准备好标志)设置与否*/ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /*设置系统时钟(SYSCLK)*/ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//RCC_SYSCLKSource_PLLCLK ——选择PLL作为系统时钟 /* PLL返回用作系统时钟的时钟源*/ while(RCC_GetSYSCLKSource() != 0x08) //0x08:PLL作为系统时钟 {

STM32单片机ADC库函数的定义和使用方法

STM32单片机ADC库函数的定义和使用方法 ADC的基本概念希望各位网友查阅相应的手册,上面对ADC有比较详尽的介绍,包括误差的分析和消除。这里主要介绍ADC的基本库函数的定义和使用。 1.ADC_DeInit函数的功能是将外设ADCx的全部寄存器重设为默认值。 ADC_DeInit(ADC2); 2.ADC_Init函数的功能是根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器。其中ADC_InitTypeDef定义在stm32f10x_adc.h中。其结构体如下所示: typedef struct { u32 ADC_Mode;//可以设置ADC_Mode FunctionalState ADC_ScanConvMode;//规定了模数转换工作在扫描模式还是单次模式,参数可以是ENABLE和DISENABLE FuncTIonalState ADC_CinTInuousConvMode;//规定了模数转换工作在连续还是单次模式,参数可以是ENABLE和DISENABLE u32 ADC_ExternalTrigConv;//定义了使用外部触发来启动规则通道的模数转换 u32 ADC_DataAlign;//规定了ADC数据向左边对齐还是右边对齐参数可以是right和left u8 ADC_NbrOfChannel;//规定了顺序进行规则转换的ADC通道的数目。参数可以是1~16 }ADC_InitTypeDef 例:初始化ADC1(可以按照自己的需要来初始化,这里只是一个例) ADC_InitTypeDef ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_CinTInuousConvMode = DISENABLE; ADC_InitStructure.ADC_ExternalTrigconv = ADC_ExternalTrigconv_T1_CC1; ADC_InitStructure.ADC_Data_Align = ADC_DataAlign_RIGHT; ADC_InitStructure.ADC_NbrOfChannel = 16;

stm32DAC函数库详解

DAC固件库函数 DAC固件库函数 函数名描述 void DAC_DeInit(void) DAC外围寄存器默认复位值。VoidDAC_Init(uint32_tDAC_Channel,DAC_InitTypeDef* DAC_InitStruct) 根据外围初始化指定的DAC void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct) 把DAC_StructInit 中的每一个参 数按缺省值填入 voidDAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState) 使能或使能指定的DAC通道。 void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState) 使能或者失能指定的DAC 的中断 voidDAC_DMACmd(uint32_tDAC_Channel,FunctionalState NewState) 使能或者失能指定的DAC通道DMA请求。 void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState) 使能或者失能用选定的DAC通道软件触发 voidDAC_DualSoftwareTriggerCmd(FunctionalState NewState) 使能或者使能双软件触发命令 void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState) 使能或者使能选定的DAC通道波的产生。 void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data) 设置通道1 的数据 void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data) 设置通道2 的数据 void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1) 设置双通道的数据 uint16_tDAC_GetDataOutputValue(uint32_t DAC_Channel) 返回选定DAC通道最后的数据输出值。 FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG) 检查指定的DAC标志位设置与否。 void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG) 清除指定的DAC标志位。 ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT) 检查指定的DAC 中断是否发生 void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT) 清除DACx 的中断待处理位

移植stm32函数库笔记

USE_STDPERIPH_DRIVER, STM32F10X_HD compiling stm32f10x_usart.c... .\CMSIS\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" .\CMSIS\stm32f10x.h: #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" .\CMSIS\stm32f10x.h: ^ .\CMSIS\stm32f10x.h: FWlib\src\stm32f10x_usart.c: 0 warnings, 1 error compiling stm32f10x_wwdg.c... .\CMSIS\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" .\CMSIS\stm32f10x.h: #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" .\CMSIS\stm32f10x.h: ^ .\CMSIS\stm32f10x.h: FWlib\src\stm32f10x_wwdg.c: 0 warnings, 1 error compiling SetClock.c... .\CMSIS\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" .\CMSIS\stm32f10x.h: #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" .\CMSIS\stm32f10x.h: ^ 在这里添加USE_STDPERIPH_DRIVER, STM32F10X_HD 问题解决

STM32库函数说明及示例

STM32库函数说明及示例(版本V1.4.0) ----第一篇:GPIO库 相关术语说明: gpio:通用输入输出接口 gpio管脚:一个io管脚,这个管脚可以有多个配置。在库函数中用GPIO_Pin_1这样的宏定义表示 gpio端口(gpio分组):一组gpio管脚的信息。在库函数中用宏定义GPIOA GPIOB等表示 1 gpio库说明 库文件名:stm32f4xx_gpio.c 文档提示翻译: 如何使用这个驱动 (1)使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE)函数使能GPIO的AHB总线时钟。 (2)使用GPIO_Init()函数对每个引脚进行四种可能的配置 《1》输入状态:Floating(浮空), Pull-up(上拉), Pull-down(下拉) 《2》输出状态:Push-Pull (上拉下拉)(Pull-up(上拉), Pull-down(下拉)or no Pull(不上拉也不下拉)),Open Drain(开漏)(Pull-up(上拉), Pull-down(下拉)or no Pull(不上拉也不下拉)),在输出模式,速度配置成2MHZ,25MHZ,50MHZ和100MHZ. 《3》第二功能:上拉下拉和开漏 《4》模拟:当一个管脚被用作ADC通道或者DAC输出的时候,需要配置成此模式(3)外设的第二功能: 《1》在ADC和DAC模式,使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN 把需要的管脚配置成模拟模式 《2》对于其它的管脚(定时器,串口等): l 使用GPIO_PinAFConfig()函数把管脚和需要的第二功能进行连接 l 使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF把需要的管脚配置成第二功能模式l 通过成员变量GPIO_PuPd, GPIO_OType and GPIO_Speed选择类型,上拉下拉和输出速度 l 调用函数GPIO_Init() (4)在输入模式,使用函数GPIO_ReadInputDataBit()得到配置好管脚的电平 (5)在输出模式,使用函数GPIO_SetBits()/GPIO_ResetBits()设置配置好IO的高低电平 (6)在复位过程和刚刚复位后,第二功能是无效的,GPIO被配置成了输入浮空模式(JTAG管脚除外) (7)当LSE振荡器关闭的时候,LSE振荡器管脚OSC32_IN和OSC32_OUT可以作为通过IO来使用(分别用PC14和PC15表示)。LSE的优先级高于GPIO函数 (8)当HSE振荡器关闭的时候,HSE振荡器管脚OSC_IN和OSC_OUT可以作为通用IO(PH0,PH1)来使用。HSE的优先级高于GPIO函数。 2 具体函数说明

相关主题
文本预览
相关文档 最新文档