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µÄº¯Êý£¬Æä¹¦ÄÜΪʹÄÜ»òÕßʧÄÜÀ´×ÔÍâÉèPPPijÖжÏÔ´£¬ÀýÈ磺 RCC_ITConfig.
ÃûΪPPP_DMAConfigµÄº¯Êý£¬Æä¹¦ÄÜΪʹÄÜ»òÕßʧÄÜÍâÉèPPPµÄDMA½Ó¿Ú£¬ÀýÈ磺TIM1_DMAConfig. ÓÃÒÔÅäÖÃÍâÉ蹦Äܵĺ¯Êý£¬×ÜÊÇÒÔ×Ö·û´®¡°Config¡±½á⣬ÀýÈçGPIO_PinRemapConfig.
ÃûΪPPP_GetFlagStatusµÄº¯Êý£¬Æä¹¦ÄÜΪ¼ì²éÍâÉèPPPij±ê־λ±»ÉèÖÃÓë·ñ£¬ÀýÈ磺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ÓµÓзdz£¸ßÓÅÏȼ¶ 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