#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);
}
ARM蜂鸣器,风扇,马达
最新推荐文章于 2025-05-03 12:32:50 发布