stm32 TIM定时器[操作寄存器+库函数](6)
- UID
- 1029342
- 性别
- 男
|
stm32 TIM定时器[操作寄存器+库函数](6)
main.c
001 | #include "stm32f10x.h" |
003 | vu16 CCR1_Val = 40000; |
004 | vu16 CCR2_Val = 20000; |
005 | vu16 CCR3_Val = 10000; |
008 | void RCC_Configuration(void); |
009 | void GPIO_Configuration(void); |
010 | void NVIC_Configuration(void); |
011 | void TIM_Configuration(void); |
017 | GPIO_Configuration(); |
018 | NVIC_Configuration(); |
023 | void TIM_Configuration(void) |
025 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; |
026 | TIM_OCInitTypeDef TIM_OCInitStructure; |
027 | TIM_TimeBaseStructure.TIM_Period = 65535; |
028 | TIM_TimeBaseStructure.TIM_Prescaler = 7199; |
029 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; |
030 | TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); |
032 | //TIM_PrescalerConfig(TIM2,7199,TIM_PSCReloadMode_Immediate); |
034 | TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; |
035 | TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; |
036 | TIM_OCInitStructure.TIM_Pulse = CCR1_Val; |
037 | TIM_OC1Init(TIM2,&TIM_OCInitStructure); |
038 | TIM_OCInitStructure.TIM_Pulse = CCR2_Val; |
039 | TIM_OC2Init(TIM2,&TIM_OCInitStructure); |
040 | TIM_OCInitStructure.TIM_Pulse = CCR3_Val; |
041 | TIM_OC3Init(TIM2,&TIM_OCInitStructure); |
042 | TIM_OCInitStructure.TIM_Pulse = CCR4_Val; |
043 | TIM_OC4Init(TIM2,&TIM_OCInitStructure); |
045 | TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable); |
046 | TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable); |
047 | TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable); |
048 | TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable); |
050 | TIM_ITConfig(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE); |
052 | TIM_Cmd(TIM2,ENABLE); |
056 | void NVIC_Configuration(void) |
058 | NVIC_InitTypeDef NVIC_InitStructure; |
061 | NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0); |
063 | NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); |
066 | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); |
067 | NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; |
068 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; |
069 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; |
070 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; |
071 | NVIC_Init(&NVIC_InitStructure); |
076 | void GPIO_Configuration(void) |
078 | GPIO_InitTypeDef GPIO_InitStructure; |
080 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; |
081 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; |
082 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; |
083 | GPIO_Init(GPIOA , &GPIO_InitStructure); |
087 | void RCC_Configuration(void) |
089 | /* 定义枚举类型变量 HSEStartUpStatus */ |
090 | ErrorStatus HSEStartUpStatus; |
095 | RCC_HSEConfig(RCC_HSE_ON); |
097 | HSEStartUpStatus = RCC_WaitForHSEStartUp(); |
098 | /* 判断HSE起是否振成功,是则进入if()内部 */ |
099 | if(HSEStartUpStatus == SUCCESS) |
101 | /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */ |
102 | RCC_HCLKConfig(RCC_SYSCLK_Div1); |
103 | /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */ |
104 | RCC_PCLK2Config(RCC_HCLK_Div1); |
105 | /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */ |
106 | RCC_PCLK1Config(RCC_HCLK_Div2); |
108 | FLASH_SetLatency(FLASH_Latency_2); |
110 | FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); |
111 | /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */ |
112 | RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); |
116 | while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); |
117 | /* 选择SYSCLK时钟源为PLL */ |
118 | RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); |
119 | /* 等待PLL成为SYSCLK时钟源 */ |
120 | while(RCC_GetSYSCLKSource() != 0x08); |
122 | /* 打开APB2总线上的GPIOA时钟*/ |
123 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); |
125 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); |
|
|
|
|
|
|