一、PWM驱动蜂鸣器程序
#include "gpio.h"
/*初始化 **************/
void hal_init(gpio_t* GPIOx,tim2_3_4_5_t* TIMx)
{
//RCC使能初始化
RCC->MP_AHB4ENSETR |= 0x01<<1;
RCC->MP_APB1ENSETR |= 0x01<<2;
//GPIO初始化
GPIOx->MODER &= ~(0x3<<12);
GPIOx->MODER |= 0x1<<13;
GPIOx->AFRL &= ~(0xf<<24);
GPIOx->AFRL |= 0x1<<25;
//TIM4初始化
TIMx->CR1 &= ~(0xf<<4);
TIMx->CR1 |=0x1<<7;
TIMx->CR1 |=0x1<<4;
TIMx->CR1 |=0x1;
TIMx->CCMR1 &= ~(0x1<<16);
TIMx->CCMR1 &= ~(0x7<<4);
TIMx->CCMR1 |=0x3<<5;
TIMx->CCMR1 |=0x1<<3;
TIMx->CCMR1 &=~(0x3);
TIMx->CCER |=0x1<<3;
TIMx->CCER &= ~(0x3);
TIMx->CCER |= 0x1;
TIMx->PSC = 208;
TIMx->ARR = 1000;
TIMx->CCR1 = 300;
}
#ifndef __GPIO_H__
#define __GPIO_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"
#include "stm32mp1xx_rcc.h"
void hal_init(gpio_t* GPIOx,tim2_3_4_5_t* TIMx);
#endif
#include "gpio.h"
extern void printf(const char *fmt, ...);
int main()
{
hal_init(GPIOB,TIM4);
while(1);
return 0;
}
二、PWM驱动风扇
#ifndef __GPIO_H__
#define __GPIO_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"
#include "stm32mp1xx_rcc.h"
void hal_init(gpio_t* GPIOx,tim1_t* TIMx);
#endif
#include "gpio.h"
/*初始化 **************/
void hal_init(gpio_t* GPIOx,tim1_t* TIMx)
{
//RCC使能初始化
RCC->MP_AHB4ENSETR |= 0x01<<4;
RCC->MP_APB2ENSETR |= 0x01;
//GPIO初始化
GPIOx->MODER &= ~(0x3<<18);
GPIOx->MODER |= 0x1<<19;//复用模式
GPIOx->AFRH &= ~(0xf<<4);
GPIOx->AFRH |= 0x1<<4;//和tim1复用 0001 af1
//TIM1初始化
TIMx->CR1 &= ~(0xf<<4);
TIMx->CR1 |=0x1<<7;
TIMx->CR1 |=0x1<<4;
TIMx->CR1 |=0x1;
TIMx->CCMR1 &= ~(0x1<<16);
TIMx->CCMR1 &= ~(0x7<<4);
TIMx->CCMR1 |=0x3<<5;
TIMx->CCMR1 |=0x1<<3;
TIMx->CCMR1 &=~(0x3);
TIMx->CCER |=0x1<<3;
TIMx->CCER &= ~(0x3);
TIMx->CCER |= 0x1;
TIMx->BDTR |= 0x1<<15;
TIMx->PSC = 208;
TIMx->ARR = 1000;
TIMx->CCR1 = 800;
}
#include "gpio.h"
extern void printf(const char *fmt, ...);
int main()
{
hal_init(GPIOE,TIM1);
while(1);
return 0;
}
三、PWM驱动马达
#ifndef __GPIO_H__
#define __GPIO_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"
#include "stm32mp1xx_rcc.h"
void hal_init(gpio_t* GPIOx,volatile tim16_17_t* TIMx);
#endif
#include "gpio.h"
/*初始化 **************/
void hal_init(gpio_t* GPIOx,volatile tim16_17_t* TIMx)
{
//RCC使能初始化
RCC->MP_AHB4ENSETR |= 0x01<<5;
RCC->MP_APB2ENSETR |= 0x01<<3;
//GPIO初始化
GPIOx->MODER &= ~(0x3<<12);
GPIOx->MODER |= 0x1<<13;//复用模式
GPIOx->AFRL &= ~(0xf<<24);
GPIOx->AFRL |= 0x1<<24;//和tim16复用 0001 af1
//TIM1初始化
TIMx->CR1 &= ~(0xf<<4);
TIMx->CR1 |=0x1<<7;
TIMx->CR1 |=0x1<<4;
TIMx->CR1 |=0x1;
TIMx->CCMR1 &= ~(0x1<<16);
TIMx->CCMR1 &= ~(0x7<<4);
TIMx->CCMR1 |=0x3<<5;
TIMx->CCMR1 |=0x1<<3;
TIMx->CCMR1 &=~(0x3);
TIMx->CCER |=0x1<<3;
TIMx->CCER &= ~(0x3);
TIMx->CCER |= 0x1;
TIMx->BDTR |= 0x1<<15;
TIMx->PSC = 208;
TIMx->ARR = 1000;
TIMx->CCR1 = 800;
}
#include "gpio.h"
extern void printf(const char *fmt, ...);
int main()
{
hal_init(GPIOF,TIM16);
while(1);
return 0;
}