#include"stm32mp1xx_gpio.h" #include"stm32mp1xx_tim.h" #include"stm32mp1xx_rcc.h" #include"../include/beep.h" //初始化 void hal_init() { ?? ?RCC->MP_AHB4ENSETR|=(0x1<<1);//将rcc时钟使能GPIOB引脚 ?? ?//0X50000A28 ?? ?RCC->MP_APB1ENSETR|=(0x1<<2);//将TIM4使能//0x5000A000 ?? ?GPIOB->MODER&=(~(0X3<<12));//设置PB6为服用模式 ?? ?GPIOB->MODER|=(0x1<<13); ?? ?GPIOB->AFRL&=(~(0xf<<24)); ?? ?GPIOB->AFRL|=(0x1<<25);//设为复用功能 ?? ?//设置分频寄存器 ?? ?TIM4->PSC=208; ?? ?//设置PWMS方波最终为1000HZ ?? ?TIM4->ARR=1000; ?? ?//对捕获寄存器进行赋值300 ?? ?TIM4->CCR1=300; ?? ?//设置为pwm1模式 ?? ?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->CR1|=(0x1<<7); ?? ?//设置通道采用边沿对其方式 ?? ?TIM4->CR1&=(~(0x3<<5));?? ? ?? ?//设置ch1通道采用递减计数方式 ?? ?TIM4->CR1|=(0x1<<4); ?? ?//通道计数器使能 ?? ?TIM4->CR1|=(0x1<<0); ?? ? }
主函数
#include"./include/pwms.h" void buzz();
int main(int argc, const char *argv[]) { ?? ?hal_init();?? ? ?? ?return 0; } ?
头文件代码
#ifndef _PWMS_H #define _PWMS_H //初始化 void hal_init(); //功能代码 void buzz();
#endif
|