Posted
: 2020-08-21
Status
:
Completed
Previous
:
STM32底层LL库高级定时器PWM输出LL篇8
Next
:
STM32底层LL库TIM输入捕获LL篇10
LL
库tim.c
文件添加函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* USER CODE BEGIN 1 */
/**
* @brief 控制PWM频率
* @param freq 频率
* @param duty1 通道1占空比
* @param duty2 通道2占空比
* @param duty3 通道3占空比
* @param duty4 通道4占空比
* @retval 无
*/
void Set_General_PWM_FREQ(uint16_t freq,uint8_t duty1,uint8_t duty2,uint8_t duty3,uint8_t duty4)
{
uint16_t count=__LL_TIM_CALC_ARR(72000000,LL_TIM_GetPrescaler(TIM3),freq);
LL_TIM_SetAutoReload(TIM3,count);
LL_TIM_OC_SetCompareCH1(TIM3,(count+1)*duty1/100);
LL_TIM_OC_SetCompareCH2(TIM3,(count+1)*duty2/100);
LL_TIM_OC_SetCompareCH3(TIM3,(count+1)*duty3/100);
LL_TIM_OC_SetCompareCH4(TIM3,(count+1)*duty4/100);
}
/* USER CODE END 1 */
tim.h
文件添加函数定义1
2
3
/* USER CODE BEGIN Prototypes */
void Set_General_PWM_FREQ(uint16_t freq,uint8_t duty1,uint8_t duty2,uint8_t duty3,uint8_t duty4);
/* USER CODE END Prototypes */
main.c
文件添加变量1
2
uint32_t freq;
uint8_t duty1,duty2,duty3,duty4;
1
2
3
4
5
6
7
8
9
TIM_CCxChannelCmd(TIM3,TIM_CHANNEL_1,TIM_CCx_ENABLE);//使能通道1
TIM_CCxChannelCmd(TIM3,TIM_CHANNEL_2,TIM_CCx_ENABLE);//使能通道2
TIM_CCxChannelCmd(TIM3,TIM_CHANNEL_3,TIM_CCx_ENABLE);//使能通道3
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);//使能通道4,并开启定时器
freq=10000;
duty1=50;
duty2=40;
duty3=30;
duty4=20;
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
freq-=1000;
if(freq<=1000)
{
freq=10000;
}
duty1+=10;
duty2-=10;
duty3+=5;
duty4-=5;
if(duty1>=100)
{
duty1=10;
}
if(duty2<=10)
{
duty2=100;
}
if(duty3>=100)
{
duty3=5;
}
if(duty4<=5)
{
duty4=100;
}
Set_General_PWM_FREQ(freq,duty1,duty2,duty3,duty4);