OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8260|回复: 6

STM32F103ZET6用PWM驱动蜂鸣器

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-6-7
在线时间
1 小时
发表于 2018-6-7 09:09:20 | 显示全部楼层 |阅读模式
本帖最后由 617854651 于 2018-6-7 09:31 编辑

QQ图片20180607093034.png
#define BEEP_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_8);  //将蜂鸣器关闭,PB8引脚复位设为低电平。
#define BEEP_ON  GPIO_SetBits(GPIOB,GPIO_Pin_8);    //将蜂鸣器打开,PB8引脚设置为高电平。
void beep(void);








头文件:beep.h

#define BEEP_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_8);  //将蜂鸣器关闭,PB8引脚复位设为低电平。
#define BEEP_ON  GPIO_SetBits(GPIOB,GPIO_Pin_8);    //将蜂鸣器打开,PB8引脚设置为高电平。
void beep(void);



工程文件:beep.c



#include <beep.h>
#include <stm32f10x.h>

void beep(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

}





#include <stm32f10x.h>
#include <beep.h>

int main(void)
{
BEEP_ON;


}

然后它就响了,后面我想用用PWM来驱动这个蜂鸣器,控制蜂鸣器的是PB8刚好有个定时器。

1

1


TIM4通道3

然后我又写了一个pwm的文件。

头文件pwm.h
#include <stm32f10x.h>
void timer4_CH3_pwm(u16 arr,u16 psc);





pwm.c:


#include <pwm.h>


void timer4_CH3_pwm(u16 arr43,u16 psc43)
{


        GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef tim_struct;
        TIM_OCInitTypeDef tim_ocstruct;
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
        
        //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
        
        tim_struct.TIM_Period=arr43;
  tim_struct.TIM_Prescaler=psc43;
  tim_struct.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM4,&tim_struct);
        
        tim_ocstruct.TIM_OCMode=TIM_OCMode_PWM2;
        tim_ocstruct.TIM_OutputState=TIM_OutputState_Enable;
        tim_ocstruct.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OC2Init(TIM4,&tim_ocstruct);
        
        TIM_OC2PolarityConfig(TIM4,TIM_OCPreload_Enable);
        
        TIM_Cmd(TIM4,ENABLE);
        
}


main.c:


#include <stm32f10x.h>
#include <beep.h>
#include <delay.h>
#include <pwm.h>






int main(void)
{
        
        beep();
        delay();        
        u16 beeppwm=0;
   u8  dir=1;
        timer4_CH3_pwm(14399,1000);


  while(1)
   {
    delay_ms(50);
    if(dir==1)beeppwm++;
    else if(dir==0) beeppwm--;
          TIM_SetCompare3(TIM4,beeppwm);
    if(beeppwm>100)dir=0;
    else if(beeppwm==0)dir=1;               
     }
}




然后一点声音都没有,我是学软件的,第一次玩硬件什么都不懂,求教
[img]file:///C:\Users\13036\AppData\Roaming\Tencent\Users\617854651\QQ\WinTemp\RichOle\1RTHDA2[7ISOQYD0IN$8Y9F.png[/img]





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1159
金钱
1159
注册时间
2018-5-30
在线时间
151 小时
发表于 2018-6-7 09:43:28 | 显示全部楼层
用PWM驱动蜂鸣器,这个蜂鸣器必须是无源的,而开发板上的蜂鸣器是有源的。
无源蜂鸣器,就是直接一个线圈,PWM可控制音量,控制频率就要改变时钟。
有源蜂鸣器,内部有振荡电路,加上电压后振荡电路控制线圈通断,你如果把PWM调到最大,还可以响。
回复 支持 1 反对 0

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-6-7
在线时间
1 小时
 楼主| 发表于 2018-6-7 15:07:57 | 显示全部楼层
大个之 发表于 2018-6-7 09:43
用PWM驱动蜂鸣器,这个蜂鸣器必须是无源的,而开发板上的蜂鸣器是有源的。
无源蜂鸣器,就是直接一个线圈 ...

谢谢哦!我这个pwm没有写错吧
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-6-7
在线时间
1 小时
 楼主| 发表于 2018-6-7 19:04:29 | 显示全部楼层
我想知道我的PWM,用定时器4通道三控制PB8的代码写对没第一次玩硬件
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2020-1-27
在线时间
13 小时
发表于 2020-4-28 21:13:49 | 显示全部楼层
程序没问题 亲测可以响
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2022-2-14
在线时间
0 小时
发表于 2022-2-14 21:07:34 | 显示全部楼层
LiiAuuXee 发表于 2020-4-28 21:13
程序没问题 亲测可以响

这这个不是定时器四通道三的吗?他设置成通道二的
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2021-6-3
在线时间
8 小时
发表于 2022-2-25 15:03:00 | 显示全部楼层
加油啊兄弟,我一开始也是玩这个,改变震动频率可以让无源蜂鸣器唱歌
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 03:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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