|
PWM蜂鸣器试验,无源蜂鸣器,频率4K的样子。根据PWM呼吸灯更改,但是程序在复位时,蜂鸣器有很小的声音响一下(就像是非常低频率驱动一样),实际运行这个程序后,再执行下载程序过程中也有这种情况。
硬件:STM32F103ZET6 PZ6806L开发板,使用PB5端口,IO口三极管驱动蜂鸣器,高电平有效
头文件中的定义
#define BUZ_PORT GPIOB // PB
#define BUZ_PIN GPIO_Pin_5 // PB5
/*************************************************************
功能:蜂鸣器PWM模式IO口初始化
形参: arr(自动重装值),psc(时钟预分频数)
返回:无
详解:无
作者:/
定时器定时时间计算公式如下:
Tout= ((per)*(psc+1))/Tclk;TCLK为72M
**************************************************************/
void BUZ_PWM_Init(u16 per,u16 psc)//蜂鸣器PWM初始化
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器TIM3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能GPIO复用时钟
RCC_APB2PeriphClockCmd(BUZ_PWM_RCC,ENABLE);//使能GPIOB时钟
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); //TIM3时钟部分映射,其中通道1映射到PB4,通道2映射到PB5
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = BUZ_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(BUZ_PORT,&GPIO_InitStruct);
//将GPIOB5设置为复用推挽输出,速率为50MHZ
//GPIO_ResetBits(BUZ_PORT,BUZ_PIN);//将BUZ_PIN输出低电平,默认不点亮蜂鸣器
TIM_TimeBaseInitStructure.TIM_Period = per; //设置在自动重装载周期值
TIM_TimeBaseInitStructure.TIM_Prescaler =psc; //设置预分频值,不能超过65535
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频,设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); //③初始化 TIMx
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能,将PWM输出到IO上
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高 TIM_OCPolarity_Low TIM_OCPolarity_High
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //④初始化外设 TIM3 通道2
TIM_Cmd(TIM3, ENABLE); //⑤开启 TIM3定时器
//TIM_SetCompare2(TIM3,0);//修改TIMx_CCRx的值控制占空比,值最大可以取per,因为ARR最大值是per
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM2在CCR2的预装载寄存器
TIM_ARRPreloadConfig(TIM3,ENABLE); //使能 TIM3 在 ARR 上的预装载寄存器允许位
}
只要运行这个初始化函数,复位过程中蜂鸣器就会很小声的响一下。
已尝试方式:在配置IO口后配置了低电平也无效,GPIO_ResetBits(BUZ_PORT,BUZ_PIN);
这个问题是哪里的问题能看出来吗
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|