软件控制蜂鸣器,风扇,马达【pwm】

1 篇文章 0 订阅

效果:

 

pwm.h

#ifndef __PWM_H__
#define __PWM_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"
//蜂鸣器初始化
void hal_bee_init();
//风扇初始化
void hal_fan_init();
//马达初始化
void hal_monitor_init();


#endif

pwm.c

#include "pwm.h"


//蜂鸣器初始化 TIM4--->CH1 -------PB6
void hal_bee_init()
{
	/*********RCC章节初始化***********/
	RCC->MP_AHB4ENSETR|=0x1<<1;
	RCC->MP_APB1ENSETR|=0x1<<2;

	/*********GPIO章节初始化**********/
	//moder初始化
	GPIOB->MODER&=((~0x3)<<12);
	GPIOB->MODER|=0x1<<13;
	//afrl初始化
	GPIOB->AFRL&=(~(0xf)<<24);
	GPIOB->AFRL|=0x1<<25;

	/*********TIM4章节初始化**********/
	//预分频初始化
	TIM4->PSC=208;
	//计数器初始化
	TIM4->CR1|=0x1<<7;
	TIM4->CR1&=(~0x3)<<5;
	TIM4->CR1|=0x1<<4;
	TIM4->CR1|=0x1<<0;
	//设置自动重载计数器的值
	TIM4->ARR=1000;
	//初始化比较捕获寄存器
	TIM4->CCMR1&=((~0x1)<<16);
	TIM4->CCMR1&=((~0x7)<<4);
	TIM4->CCMR1|=0x3<<5;
	TIM4->CCMR1|=0x1<<3;
	TIM4->CCMR1&=((~0x3)<<0);   

	TIM4->CCER|=0x1<<3;
	TIM4->CCER&=((~0x1)<<1);
	TIM4->CCER|=0x1<<0;    //

	//设置捕获寄存器的值
	TIM4->CCR1=300;






}
//风扇初始化 TIM1----->CH1  --------PE9
void hal_fan_init()
{
	/*********RCC章节初始化***********/
	RCC->MP_AHB4ENSETR|=0x1<<4;
	RCC->MP_APB2ENSETR|=0x1<<0;

	/*********GPIO章节初始化**********/
	//moder初始化
	GPIOE->MODER&=((~0x3)<<18);
	GPIOE->MODER|=0x2<<18;
	//afrl初始化
	GPIOE->AFRH&=(~(0xf)<<4);
	GPIOE->AFRH|=0x1<<4;

	/*********TIM4章节初始化**********/
	//预分频初始化
	TIM1->PSC=208;
	//计数器初始化
	TIM1->CR1|=0x1<<7;
	TIM1->CR1&=(~0x3)<<5;
	TIM1->CR1|=0x1<<4;
	TIM1->CR1|=0x1<<0;
	//设置自动重载计数器的值
	TIM1->ARR=1000;
	//初始化比较捕获寄存器
	TIM1->CCMR1&=((~0x1)<<16);
	TIM1->CCMR1&=((~0x7)<<4);
	TIM1->CCMR1|=0x3<<5;
	TIM1->CCMR1|=0x1<<3;
	TIM1->CCMR1&=((~0x3)<<0);   

	TIM1->CCER|=0x1<<3;
	TIM1->CCER&=((~0x1)<<1);
	TIM1->CCER|=0x1<<0;    //

	//设置捕获寄存器的值
	TIM1->CCR1=700;
	
	TIM1->BDTR|=0x1<<15;

}

//马达初始化 TIM16----->CH1 --------PF6
void hal_monitor_init()
{
	/*********RCC章节初始化***********/
	RCC->MP_AHB4ENSETR|=0x1<<5;
	RCC->MP_APB2ENSETR|=0x1<<3;

	/*********GPIO章节初始化**********/
	//moder初始化
	GPIOF->MODER&=((~0x3)<<12);
	GPIOF->MODER|=0x1<<13;
	//afrl初始化
	GPIOF->AFRL&=(~(0xf)<<24);
	GPIOF->AFRL|=0x1<<24;

	/*********TIM4章节初始化**********/
	//预分频初始化
	TIM16->PSC=208;
	//计数器初始化
	TIM16->CR1|=0x1<<7;
	TIM16->CR1&=((~0x3))<<5;
	TIM16->CR1|=0x1<<4;
	TIM16->CR1|=0x1<<0;
	//设置自动重载计数器的值
	TIM16->ARR=1000;
	//初始化比较捕获寄存器
	TIM16->CCMR1&=((~0x1)<<16);
	TIM16->CCMR1&=((~0x7)<<4);
	TIM16->CCMR1|=0x3<<5;
	TIM16->CCMR1|=0x1<<3;
	TIM16->CCMR1&=((~0x3)<<0);   

	TIM16->CCER|=0x1<<3;
	TIM16->CCER&=((~0x1)<<1);
	TIM16->CCER|=0x1<<0;    //

	//设置捕获寄存器的值
	TIM16->CCR1=300;


	TIM16->BDTR|=0x1<<15;

}

main.c

#include "pwm.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}

int main()
{
	//调用蜂鸣器初始化
	hal_bee_init();
	hal_fan_init();
	hal_monitor_init();
	while(1)
	{

	}
	return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值