ARM蜂鸣器,风扇,马达

#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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值