新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2018-6-7
- 在线时间
- 1 小时
|
本帖最后由 617854651 于 2018-6-7 09:31 编辑
#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
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]
|
|
|