- #include "pwm.h"
-
-
- //蜂鸣器
- void hal_pwm_init(void)
- {
- //设置gpiob使能
- RCC->MP_AHB4ENSETR = (0x1 << 1);
- //设置TIM4使能
- RCC->MP_APB1ENSETR = (0x1 << 2);
-
- //设置pb6引脚为复用功能
- GPIOB->MODER &= (~(0x3<<12));
- GPIOB->MODER |= (0x2 << 12);
-
- //设置pb6引脚为TIM4_CH1功能
- GPIOB->AFRL &= (~(0xf << 24));
- GPIOB->AFRL |= (0x2 << 24);
-
- //设置预分频寄存器
- TIM4->PSC = 209 - 1;
-
- //设置PWM方波的最终的周期
- TIM4->ARR = 1000;
-
- //设置PWM方波的占空比
- TIM4->CCR1 = 700;
-
- //设置TIM4_CH1通道为PWM1模式
- TIM4->CCMR1 &= ~((0x1 << 16) | (0x7 << 4));
- TIM4->CCMR1 |= (0x6 << 4);
-
- //设置TIM4_CH1通道使能TIMx_CCR1预加载使能寄存器
- TIM4->CCMR1 |= (0x1 << 3);
-
- //设置TIM4_CH1通道输出PWM方波的极性,
- TIM4->CCER &= ~(0x1 << 1);
-
- //设置TIM4_CH1通道的输出使能位,输出PWM方波
- TIM4->CCER |= (0x1 << 0);
-
- //设置TIM4_CH1通道的TIMx_ARR预装载寄存器的缓冲区的使能
- TIM4->CR1 |= (0x1 << 7);
-
- //设置定时器的计数方式,边沿对齐
- TIM4->CR1 &= ~(0x3 << 5);
-
- //设置定时器计数的方向,采用递减计数/递增计数
- TIM4->CR1 &= ~(0x1 << 4);
-
- // 使能TIM4_CH1计数器
- TIM4->CR1 |= (0x1 << 0);
-
- }
-
- //风扇PE9
- void hal_fan_init(void)
- {
- //设置gpiob使能
- RCC->MP_AHB4ENSETR = (0x1 << 4);
- //设置TIM1使能
- RCC->MP_APB2ENSETR = (0x1 << 0);
-
- //设置PE9引脚为复用功能
- GPIOE->MODER &= (~(0x3<<18));
- GPIOE->MODER |= (0x2 << 18);
-
- //设置pe9引脚为TIM4_CH1功能
- GPIOE->AFRH &= (~(0xf << 4));
- GPIOE->AFRH |= (0x1 << 4);
-
- //设置预分频寄存器
- TIM1->PSC = 209 - 1;
-
- //设置PWM方波的最终的周期
- TIM1->ARR = 1000;
-
- //设置PWM方波的占空比
- TIM1->CCR1 = 700;
-
- //设置TIM1_CH1通道为PWM1模式
- TIM1->CCMR1 &= ~((0x1 << 16) | (0x7 << 4));
- TIM1->CCMR1 |= (0x6 << 4);
-
- //设置TIM1_CH1通道使能TIMx_CCR1预加载使能寄存器
- TIM1->CCMR1 |= (0x1 << 3);
-
- //设置TIM1_CH1通道输出PWM方波的极性,
- TIM1->CCER &= ~(0x1 << 1);
-
- //设置TIM1_CH1通道的输出使能位,输出PWM方波
- TIM1->CCER |= (0x1 << 0);
-
- //设置TIM1_CH1通道的TIMx_ARR预装载寄存器的缓冲区的使能
- TIM1->CR1 |= (0x1 << 7);
-
- //设置定时器的计数方式,边沿对齐
- TIM1->CR1 &= ~(0x3 << 5);
-
- //设置定时器计数的方向,采用递减计数/递增计数
- TIM1->CR1 &= ~(0x1 << 4);
-
- // 使能TIM1_CH1计数器
- TIM1->CR1 |= (0x1 << 0);
-
- //风扇寄存器
- TIM1->BDTR |= (0x1 << 15);
- }
-
- //马达
- void hal_monitor_init(void)
- {
- //设置gpiob使能
- RCC->MP_AHB4ENSETR = (0x1 << 5);
- //设置TIM4使能
- RCC->MP_APB2ENSETR = (0x1 << 3);
-
- //设置pf6引脚为复用功能
- GPIOF->MODER &= (~(0x3<<12));
- GPIOF->MODER |= (0x2 << 12);
-
- //设置pf6引脚为TIM4_CH1功能
- GPIOF->AFRL &= (~(0xf << 24));
- GPIOF->AFRL |= (0x1 << 24);
-
- //设置预分频寄存器
- TIM16->PSC = 209 - 1;
-
- //设置PWM方波的最终的周期
- TIM16->ARR = 1000;
-
- //设置PWM方波的占空比
- TIM16->CCR1 = 700;
-
- //设置TIM16_CH1通道为PWM1模式
- TIM16->CCMR1 &= ~((0x1 << 16) | (0x7 << 4));
- TIM16->CCMR1 |= (0x6 << 4);
-
- //设置TIM16_CH1通道使能TIMx_CCR1预加载使能寄存器
- TIM16->CCMR1 |= (0x1 << 3);
-
- //设置TIM16_CH1通道输出PWM方波的极性,
- TIM16->CCER &= ~(0x1 << 1);
-
- //设置TIM16_CH1通道的输出使能位,输出PWM方波
- TIM16->CCER |= (0x1 << 0);
-
- //设置TIM16_CH1通道的TIMx_ARR预装载寄存器的缓冲区的使能
- TIM16->CR1 |= (0x1 << 7);
-
- //设置定时器的计数方式,边沿对齐
- TIM16->CR1 &= ~(0x3 << 5);
-
- //设置定时器计数的方向,采用递减计数/递增计数
- TIM16->CR1 &= ~(0x1 << 4);
-
- // 使能TIM16_CH1计数器
- TIM16->CR1 |= (0x1 << 0);
-
- //马达寄存器
- TIM16->BDTR |= (0x1 << 15);
- }