STM32f4————蜂鸣器实验代码
/*******************************************************/
beep.c文件下代码:
#include "beep.h"
//初始化PF8为输出口
//BEEP IO 初始化
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能 GPIOF时钟
//初始化蜂鸣器对应引脚 GPIOF8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化 GPIO
GPIO_ResetBits(GPIOF,GPIO_Pin_8); //蜂鸣器对应引脚GPIOF8 拉低,
}
这段代码 仅包含1个函数: void BEEP_Init(void),该函数的作用就是使能PORTF的时钟,然后调用GPIO_Init函数, 配置PF8为推挽输出。 IO口的初始化跟上一讲跑马灯实验非常类似,这里我们就不做过多讲解。
保存 beep.c代码,然后我们按同样的方法,新建一个beep.h 文件,也保存在BEEP 文件夹下面。在 beep.h中输入如下代码:
#ifndef __BEEP_H
#define __BEEP_H
#include "sys.h"
//LED 端口定义
#define BEEP PFout(8) // 蜂鸣器控制 IO
void BEEP_Init(void);//初始化
#endif
和上一章一样,我们这里还是通过位带操作来实现某个 IO 口的输出控制,BEEP 就直接代表了PF8 的输出状态。我们只需要令BEEP=1,就可以让蜂鸣器发声。
回到主界面,在main.c里面编写如下代码:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
int main(void)
{
delay_init(168); //初始化延时函数
LED_Init(); //初始化 LED 端口
BEEP_Init(); //初始化蜂鸣器端口
while(1)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9); // DS0拉低,亮 等同 LED0=0;
GPIO_ResetBits(GPIOF,GPIO_Pin_8); //BEEP引脚拉低, 等同 BEEP=0;
delay_ms(300); //延时300ms
GPIO_SetBits(GPIOF,GPIO_Pin_9); // DS0拉高,灭 等同LED0=1;
GPIO_SetBits(GPIOF,GPIO_Pin_8); //BEEP引脚拉高, 等同BEEP=1;
delay_ms(300); //延时 300ms
}
}
注意要将 BEEP 文件夹加入头文件包含路径,不能少,否则编译的时候会报错。这段代码就是通过库函数GPIO_ResetBits和 GPIO_SetBits两个函数实现前面7.1节所阐述的功能,同时加入了 DS0(LED0)的闪烁来提示程序运行(后面的代码,我们基本都会加入这个) ,整个代码比较简单。
/*******************************************************/
【立创商城】STM32F103CBT6 托盘 https://item.szlcsc.com/8796.html |