Cortex-A7核PWM实验

作业要求:实现蜂鸣器,风扇,马达功能

 测试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()
{
	//初始化
	beep_init();
	fan_init();
	monitor_init();
	
    while(1)
	{

	}
	
    return 0;
} 

 头文件:

#ifndef __PWM_H__
#define __PWM_H__

#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_tim.h"


//蜂鸣器初始化
void beep_init();
//风扇初始化
void fan_init();
//马达初始化
void monitor_init();


#endif  

 

 源文件:

#include "pwm.h"

//蜂鸣器初始化
void beep_init()
{
	//RCC GPIOB组控制器使能
	RCC->MP_AHB4ENSETR |= (0x1 << 1);
	//TIM4使能
	RCC->MP_APB1ENSETR |= (0x1 << 2);

	//GOIPB6->MODER复用功模式 12:13 10
	GPIOB->MODER &= (~(0x1 << 12));
	GPIOB->MODER |= (0x1 << 13);

	//PB6引脚复用功能设置为TIM4_CH1 0010
	GPIOB->AFRL &= (~(0x3 << 26));
	GPIOB->AFRL |= (0x1 << 25);
	GPIOB->AFRL &= (~(0x1 << 24));

	//TIM4   1000HZ ~ 2000HZ
	TIM4->PSC = 208;

	TIM4->ARR = 1000;

	TIM4->CCR1 = 700; 

	//[16][6:4] 0110
	TIM4->CCMR1 &= (~(0x1 << 16)) ;
	TIM4->CCMR1 |= (0x3 << 5) ;
	TIM4->CCMR1 &= (~(0x1 << 4)) ;

	//[3][1:0] 100
	TIM4->CCMR1 |= (0x1 << 3) ;
	TIM4->CCMR1 &= (~(0x3 << 0)) ;

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

	//[7][6:4][0] 10011
	TIM4->CR1 |= (0x1 << 7);
	TIM4->CR1 &= (~(0x3 << 5));
	TIM4->CR1 |= (0x1 << 4);
	TIM4->CR1 |= (0x1 << 0);

	
}

//风扇初始化
void fan_init()
{
	//RCC GPIOE组控制器使能
	RCC->MP_AHB4ENSETR |= (0x1 << 4);
	//TIM1使能
	RCC->MP_APB2ENSETR |= (0x1 << 0);

	//GOIPE9->MODER复用功模式  18:19 10
	GPIOE->MODER &= (~(0x1 << 18));
	GPIOE->MODER |= (0x1 << 19);

	//PE9引脚复用功能设置为TIM1_CH1 0001
	GPIOE->AFRH &= (~(0x3 << 5));
	GPIOE->AFRH |= (0x1 << 4);

	//TIM4   1000HZ ~ 2000HZ
	TIM1->PSC = 208;

	TIM1->ARR = 1000;

	TIM1->CCR1 = 700; 

	//[16][6:4] 0110
	TIM1->CCMR1 &= (~(0x1 << 16)) ;
	TIM1->CCMR1 |= (0x3 << 5) ;
	TIM1->CCMR1 &= (~(0x1 << 4)) ;

	//[3][1:0] 100
	TIM1->CCMR1 |= (0x1 << 3) ;
	TIM1->CCMR1 &= (~(0x3 << 0)) ;

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

	//[7][6:4][0] 10011
	TIM1->CR1 |= (0x1 << 7);
	TIM1->CR1 &= (~(0x3 << 5));
	TIM1->CR1 |= (0x1 << 4);
	TIM1->CR1 |= (0x1 << 0);

	TIM1->BDTR |= (0x1 << 15);

}

//马达初始化
void monitor_init()
{
	//RCC GPIOF组控制器使能
	RCC->MP_AHB4ENSETR |= (0x1 << 5);
	//TIM16使能
	RCC->MP_APB2ENSETR |= (0x1 << 3);

	//GOIPF6->MODER复用功模式  18:19  10
	GPIOF->MODER &= (~(0x1 << 12)); 
	GPIOF->MODER |= (0x1 << 13);

	//PB6引脚复用功能设置为TIM16_CH1  0001
	GPIOF->AFRL &= (~(0x7 << 25));
	GPIOF->AFRL |= (0x1 << 24);

	//TIM16   1000HZ ~ 2000HZ
	TIM16->PSC = 208;

	TIM16->ARR = 1000;

	TIM16->CCR1 = 700; 

	//[16][6:4] 0110
	TIM16->CCMR1 &= (~(0x1 << 16)) ;
	TIM16->CCMR1 |= (0x3 << 5) ;
	TIM16->CCMR1 &= (~(0x1 << 4)) ;

	//[3][1:0] 100
	TIM16->CCMR1 |= (0x1 << 3) ;
	TIM16->CCMR1 &= (~(0x3 << 0)) ;

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

	//[7][6:4][0] 10011
	TIM16->CR1 |= (0x1 << 7);
	TIM16->CR1 |= (0x1 << 0);

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


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值