普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 927|回复: 2

STM32F103ZET6 PZ6806L PWM驱动蜂鸣器

[复制链接]

1

主题

2

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2023-7-3 23:15:41 | 显示全部楼层 |阅读模式
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
回复

使用道具 举报

1

主题

2

帖子

27

积分

新手上路

Rank: 1

积分
27
 楼主| 发表于 2023-7-3 23:20:59 | 显示全部楼层
来个大手子看看,正常PWM运行蜂鸣器都是OK的,就复位过程中蜂鸣器有很小声的声音响一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-29 22:12 , Processed in 0.104560 second(s), 34 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表