开发者学堂课程【嵌入式之RFID开发与应用2020版:根据LED修改峰鸣器驱动程序】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/665/detail/11152
根据LED修改峰鸣器驱动程序
回去看 LED的初始化,为什么要把它配置成推广输出?为了让灯变得更亮,推动能力更强,为什么不选择其他的输入输出方式?不同的配置带来不同的效果。
把程序简单修改一下,让它不再是驱动一个LED灯,而是让它去驱动一个蜂鸣器。如原理图所示,把蜂鸣器接到了B11上面。
Void led-int(void)
{
GPIO-InitTypeDef GPIO-InitStructure;
RCC-APB2PeriphclockCmd(RCC-XXX-LED, ENABLE);
GPIO-InitStructure,GPIO-Pin=GPIO-XXX-LED;
GPIO-InitStructure,GPIO-Mode=GPIO-Mode-Out-PP;
GPIO-InitStructure,GPIO-Speed=GPIO-Speed-2MHZ;
GPIO-Init(GPIO-XXX-LED-PORT,& GPIO-InitStructure);
GPIO-XXX-LED-OFF():
}
操作B11复制上面的代码,将LED改为beep,多了一个输出beeo_init()并且操作的这些广角也重新复制一份:
/*LED*/
#define RCC-XXX-LED RCC-APB2Periph-GPIOC
#define GPIO-XXX-LED-PORT GPIOC
#define GPIO-XXX-LED GIO-Pin-13
将LED统一改为BEEP,并且真正的BEEP的广角不再是c了,而是B11,所以要把GPIOC首先改GPIOB, GIO-Pin-13改成GIO-Pin-11。这些值在stm32f10x文件里面, 把所有的io所有的计算机定义个变,官方的,直接用。
#define
BEEP
_xxx_ON()
GPIO_ResetBits(GPIO_XxXx_LED_PORT,GPIO_xXx_LED)
//点亮
#define
BEEP
_xxx_OFF()
GPIO_SetBits(GPIo_xxx_LED_PORT,GPIO_xxx_LED)
//熄灭
改一下LED为BEEP的开关,点亮和熄灭删掉,是发声和不发声。其余也是改LED为BEEP。但是风鸣器不知道是高电频的时候响还是低电频的时候响。
按上图所示电路来看,它是低电平的时候会响,刚好跟这个灯匹配的,但如果不是这个电路,可能就反过来了,b11就完成。
Main函数改为下面所示,让这个灯和蜂鸣器一起一个在闪,一个在响:
Int main(void)
{
Led-int();
Beep-init();
Whie(1){
LED-XXX-ON();
BEEP-XXX-ON();
delay-ms(300);
LED-XXX-ON();
BEEP-XXX-ON();
delay-ms(300);
}
重新编一下程序,直接下载,复位。听到声音。这个是根据GPIO改出来的封鸣器,掌握了基本原理,改成另一个功能的程序非常容易的。还可以去做一个按键。以上是根据LED修改蜂鸣器的驱动程序。