正点原子STM32F103(精英版) 您所在的位置:网站首页 蜂鸣器接口电路图 正点原子STM32F103(精英版)

正点原子STM32F103(精英版)

2024-07-02 12:16| 来源: 网络整理| 查看: 265

配合正点原子视频(工程新建与路径加入省略)

蜂鸣器硬件连接:

图中我们用到一个 NPN 三极管( S8050 )来驱动蜂鸣器 R33 主要用于防止蜂鸣器的误发声。

当 PB.8 输出 高电平的时候,蜂鸣器将发声, 当 PB.8 输出低电平的时候,蜂鸣器停止发声。

一.库函数版本  1.蜂鸣器实验步骤 使能IO口时钟。调用函数 RCC_APB2PeriphColckCmd();

     不同的IO组,调用的时钟使能函数不一样。

初始化IO口模式。 调用函数 BEEP_Init (); 操作IO口, 输出高低电平。 2.软件设计

beep.h

#ifndef __BEEP_H #define __BEEP_H #include"sys.h" //蜂鸣器端口定义 #define BEEP PBout(8) //BEEP,蜂鸣器接口 void BEEP_Init(void); #endif

beep.c

#include"beep.h" void BEEP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能 GPIOB 端口时钟 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//BEEP GPIOB .8 端口配置 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度为 50MHz GPIO_Init(GPIOB,&GPIO_InitStructure);//根据参数初始化 GPIOB.8 GPIO_ResetBits(GPIOB,GPIO_Pin_8);//输出 0 ,关闭蜂鸣器输出 }

main.c

#include "sys.h" #include "delay.h" #include "beep.h" int main(void) { delay_init(); //延时函数初始化 BEEP_Init(); //初始化与LED连接的硬件接口 while(1) { BEEP =0; delay_ms(300); BEEP=1; delay_ms(300); } } 二.寄存器版本

1) 使能 IO 口时钟。配置寄存器 RCC_APB2ENR。

2) 初始化 IO 参数。配置寄存器 GPIOx_CRH/CRL

3) 操作 IO。配置寄存器 GPIOX_ODR或者BSRR/BRR。

软件设计

beep.h

#ifndef __BEEP_H #define __BEEP_H #include "sys.h" #define BEEP PBout(8) //BEEP蜂鸣器接口 void BEEP_Init(void); //初始化 #endif

beep.c

#include "beep.h" void BEEP_Init(void) { RCC->APB2ENR |= 1CRH |= 0x00000003; //PB.8推挽输出 BEEP=0; //关闭蜂鸣器输出 }

APB2外设时钟使能寄存器(RCC_APB2ENR)

 端口配置高寄存器(GPIOx_CRH) (x=A..E)

 因PB8属于GPIO8~15之间,所以,需通过GPIOB_CRH寄存器才能实现对PB8的设置。因GPIOB_CRH寄存器中每4位决定一个GPIO工作模式,所以,需通过设置GPIOB_CRL的第0~3位。因PB5引脚“输出模式”,从图中2可以看出须把GPIOB_CRH寄存器的MODE5[1:0]设置为11(50MHz)。根据MODE[1:0]的值为11可知,CNF11[1:0]需要选择“在输出模式(MODE[1:0]>00)”中选择需要设置的值。因PB8须设置为“通用推挽输出模式”,故CNF11[1:0]需设置为00。(0011 = 3)最终设置指令为: GPIOB->CRH &=0xFFFFFFF0; GPIOB->CRH |= 0x00000003; //PB.8推挽输出

main.c

#include "sys.h" #include "beep.h" #include "delay.h" int main (void) { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 BEEP_Init(); //初始化蜂鸣器端口 while(1) { BEEP = 0;//关闭蜂鸣器 delay_ms(300); BEEP =1; //打开蜂鸣器 delay_ms(300); } }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有