pwm.c
1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**********************************
APB2 ==> 84MHZ ==>APB2 timer clock = 84*2 = 168MHz TIM1
APB1 ==> 42MHZ ==>APB1 timer clock = 42*2 = 84MHz D
LED1 ==> PB15 ==> TIM12_CH2
LED2 ==> PB14 ==> TIM12_CH1
Servo ==> PB3 ==> TIM4_CH2
Fan PB13 ==> TIM1_CH1N
***********************************/
#include "pwm.h"
TIM_HandleTypeDef h_tim3; //T30爆闪
TIM_OC_InitTypeDef s_ConfigOC;
//led的pwm初始化函数
void PWM_Init(void)
{
//爆闪配置
h_tim3.Instance = TIM3;
h_tim3.Init.Prescaler = 1;
h_tim3.Init.Period = 49;
h_tim3.Init.CounterMode = TIM_COUNTERMODE_UP;
h_tim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
h_tim3.Channel = HAL_TIM_ACTIVE_CHANNEL_1;
HAL_TIM_PWM_Init(&h_tim3);
s_ConfigOC.OCMode = TIM_OCMODE_PWM1;
s_ConfigOC.Pulse = 0;
s_ConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
//爆闪通道配置
HAL_TIM_PWM_ConfigChannel(&h_tim3, &s_ConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&h_tim3,TIM_CHANNEL_1);
__HAL_TIM_SetCompare(&h_tim3,TIM_CHANNEL_1,0);
}
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(htim->Instance==TIM3)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_TIM3_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
}
void Set_Laser_Value(uint16_t value)
{
__HAL_TIM_SetCompare(&h_tim3,TIM_CHANNEL_1,value);
}
void Is_Laser_Enable(uint8_t val)
{
if(val==1)
Set_Laser_Value(0);
else if(val==0)
Set_Laser_Value(300);
return;
}