1 | #include "stm32f0xx.h"
|
2 | #include "stm32f0xx_gpio.h"
|
3 | #include "stm32f0xx_tim.h"
|
4 | #include "stm32f0xx_misc.h"
|
5 |
|
6 | void ur_sh_pwm_init(void){
|
7 |
|
8 | GPIO_InitTypeDef GPIO_InitStructure;
|
9 | TIM_OCInitTypeDef TIM_OC_InitStructure;
|
10 | TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure;
|
11 | NVIC_InitTypeDef NVIC_InitStructure;
|
12 |
|
13 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
|
14 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
|
15 |
|
16 | GPIO_StructInit(&GPIO_InitStructure);
|
17 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_7;
|
18 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
19 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
20 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
21 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
|
22 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
23 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2);
|
24 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_2);
|
25 |
|
26 | TIM_TimeBaseStructInit(&TIM_TimeBase_InitStructure);
|
27 | TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
28 | TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
29 | TIM_TimeBase_InitStructure.TIM_Period = 49;
|
30 | TIM_TimeBase_InitStructure.TIM_Prescaler = 23;
|
31 | //TIM_TimeBase_InitStructure.TIM_RepetitionCounter = 49;
|
32 | TIM_TimeBaseInit(TIM1, &TIM_TimeBase_InitStructure);
|
33 |
|
34 | TIM_OCStructInit(&TIM_OC_InitStructure);
|
35 | TIM_OC_InitStructure.TIM_OCMode = TIM_OCMode_PWM1;
|
36 | TIM_OC_InitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
|
37 | TIM_OC_InitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
38 | TIM_OC_InitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
|
39 | TIM_OC_InitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
40 | TIM_OC_InitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
|
41 | TIM_OC_InitStructure.TIM_Pulse = 25;
|
42 | TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
|
43 | TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
|
44 | TIM_OC1Init(TIM1, &TIM_OC_InitStructure);
|
45 | TIM_OC2Init(TIM1, &TIM_OC_InitStructure);
|
46 |
|
47 | TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
|
48 |
|
49 | NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
|
50 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
51 | NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
|
52 | NVIC_Init(&NVIC_InitStructure);
|
53 | //TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
|
54 | //TIM_ClearFlag(TIM1, TIM_FLAG_Update);
|
55 |
|
56 | TIM_CtrlPWMOutputs(TIM1, ENABLE);
|
57 | TIM_Cmd(TIM1, ENABLE);
|
58 | }
|
59 |
|
60 |
|
61 | void TIM1_CC_IRQHandler(void){
|
62 | TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
|
63 | LED_An();
|
64 | LED_Aus();
|
65 | }
|