| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include "fan_pwm.h"
- void fan_pwm_init(void){
- uint16_t chno = FAN_PWM_CHAN;
- TIM_TimeBaseInitType TIM_TimeBaseStructure;
- OCInitType TIM_OCInitStructure;
- TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
- /* Time base configuration */
- TIM_TimeBaseStructure.Period = FAN_MAX_DUTY_COUNT;
- TIM_TimeBaseStructure.Prescaler = TIM_CLOCK_MHz - 1;
- TIM_TimeBaseStructure.ClkDiv = 0;
- TIM_TimeBaseStructure.CntMode = TIM_CNT_MODE_UP;
- TIM_InitTimeBase(FAN_PWM_TIMER, &TIM_TimeBaseStructure);
- /* PWM1 Mode configuration: Channel1 */
- TIM_OCInitStructure.OcMode = TIM_OCMODE_PWM1;
- TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
- TIM_OCInitStructure.Pulse = FAN_MAX_DUTY_COUNT-1;
- TIM_OCInitStructure.OcPolarity = TIM_OC_POLARITY_HIGH;
- if (chno == TIM_CH_1) {
- TIM_InitOc1(FAN_PWM_TIMER, &TIM_OCInitStructure);
- }else if (chno == TIM_CH_2) {
- TIM_InitOc2(FAN_PWM_TIMER, &TIM_OCInitStructure);
- }else if (chno == TIM_CH_3) {
- TIM_InitOc3(FAN_PWM_TIMER, &TIM_OCInitStructure);
- }else if (chno == TIM_CH_4) {
- TIM_InitOc4(FAN_PWM_TIMER, &TIM_OCInitStructure);
- }
- TIM_ConfigOc1Preload(FAN_PWM_TIMER, TIM_OC_PRE_LOAD_ENABLE);
- TIM_ConfigArPreload(FAN_PWM_TIMER, ENABLE);
- /* TIM3 enable counter */
- TIM_Enable(FAN_PWM_TIMER, ENABLE);
- }
- void fan_stop(void) {
- TIM_Enable(FAN_PWM_TIMER, DISABLE);
- }
- void fan_set_duty(u8 duty) {
- uint16_t chno = FAN_PWM_CHAN;
- if (duty > 100) {
- duty = 100;
- }else if (duty > 0 && duty < 30) {
- duty = 30;
- }
- u32 count = (float)duty * (float)FAN_MAX_DUTY_COUNT / 100.0f;
- if (chno == TIM_CH_1) {
- TIM_SetCmp1(FAN_PWM_TIMER, count);
- }else if (chno == TIM_CH_2) {
- TIM_SetCmp2(FAN_PWM_TIMER, count);
- }else if (chno == TIM_CH_3) {
- TIM_SetCmp3(FAN_PWM_TIMER, count);
- }else if (chno == TIM_CH_4) {
- TIM_SetCmp4(FAN_PWM_TIMER, count);
- }
- if (FAN_PWM_TIMER == TIM8) {
- if (count == 0) {
- TIM_EnableCtrlPwmOutputs(FAN_PWM_TIMER, DISABLE);
- }else {
- TIM_EnableCtrlPwmOutputs(FAN_PWM_TIMER, ENABLE);
- }
- }
- }
- bool fan_pwm_is_running(void) {
- uint16_t chno = FAN_PWM_CHAN;
- u32 count = 0;
- if (chno == TIM_CH_1) {
- count = TIM_GetCap1(FAN_PWM_TIMER);
- }else if (chno == TIM_CH_2) {
- count = TIM_GetCap2(FAN_PWM_TIMER);
- }else if (chno == TIM_CH_3) {
- count = TIM_GetCap3(FAN_PWM_TIMER);
- }else if (chno == TIM_CH_4) {
- count = TIM_GetCap4(FAN_PWM_TIMER);
- }
- return (count != 0);
- }
|