1 | void vInitPWM(void) {
|
2 | GPIO_InitTypeDef GPIO_InitStructure;
|
3 | TIM_TimeBaseInitTypeDef TimerInitStructure;
|
4 | TIM_OCInitTypeDef OutputChannelInit;
|
5 | NVIC_InitTypeDef NVIC_InitStructure;
|
6 |
|
7 | // GPIO
|
8 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
|
9 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
|
10 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
11 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
12 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
13 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
|
14 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
15 | GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_TIM2);
|
16 |
|
17 | // TIMER
|
18 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
|
19 | TimerInitStructure.TIM_Prescaler = 0;
|
20 | TimerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
21 | TimerInitStructure.TIM_Period = 0xFFFF;
|
22 | TimerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
23 | TIM_TimeBaseInit(TIM2, &TimerInitStructure);
|
24 |
|
25 | //PWM CHANNEL
|
26 |
|
27 | OutputChannelInit.TIM_OCMode = TIM_OCMode_PWM1;
|
28 | OutputChannelInit.TIM_Pulse = 0;
|
29 | OutputChannelInit.TIM_OutputState = TIM_OutputState_Enable;
|
30 | OutputChannelInit.TIM_OCPolarity = TIM_OCPolarity_Low;
|
31 |
|
32 | TIM_OC4Init(TIM2, &OutputChannelInit);
|
33 | TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
|
34 |
|
35 | TIM_ARRPreloadConfig(TIM2, ENABLE);
|
36 |
|
37 | TIM_CCxCmd(TIM2, TIM_Channel_4, TIM_CCx_Enable);
|
38 | TIM_Cmd(TIM2, ENABLE);
|
39 |
|
40 | // DMA
|
41 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
|
42 | TIM_DMACmd(TIM2, TIM_DMA_CC4, ENABLE);
|
43 | DMA_ITConfig(DMA1_Channel7, DMA_IT_TC, ENABLE);
|
44 |
|
45 | // NVIC for DMA
|
46 | NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn;
|
47 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
48 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
49 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
50 | NVIC_Init(&NVIC_InitStructure);
|
51 | }
|