STM32F103RB 实作笔记(二)- Beep/Buzzer蜂鸣器(正点原子 STM32F103 nano开发板)程式解析

延续上一篇 ”STM32F103RB 实作笔记(一)- 跑马灯(正点原子 STM32F103 nano开发板)程式解析“,我们今天进行第二个程式解析。

和上一篇一样,进入找到 USER 的档案夹,直接点开 BEEP 项目档,并且进行编译和执行。
在这里插入图片描述

硬件配置

先看一下 线路图,可以知道

  1. 选择 PB8 来控制这个蜂鸣器。
  2. BEEP 要用低电平 来驱动。
  3. 从原厂附上的资源配置图片,表明左下角的 BEEP 是”有源“型式的。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    有源型式的 BEEP 在百度查得的说明如下图,就是”给他电力就会直接叫“。
    在这里插入图片描述

主程式 Main.c

主程式 Main.c 的内容如下:

#include "sys.h"	
#include "delay.h"	
#include "led.h" 
#include "beep.h" 

/************************************************
************************************************/

int main(void)
{
	Stm32_Clock_Init(9); 	// 
	delay_init(72);	     	//
	LED_Init();		  	    //
	BEEP_Init();            // 
	while(1)
	{
		LED0=0;
		BEEP=0;		  
		delay_ms(300);// 
		LED0=1;	  
		BEEP=1;  
		delay_ms(300);// 
	}
 }

程式很单纯,就是 LED0、BEEP 开 300ms, 然后 关 300ms。比较需要的是了解 LED_Init()、BEEP_Init() 这两个副程式;

先看看 LED_Init(),是在 LED.c 里面

#include "led.h"

//	 									  
//    
void LED_Init(void)
{
	 RCC->APB2ENR|=1<<4;    // 
	 GPIOC->CRL&=0X00000000; //清除PC0~7设定
	 GPIOC->CRL|=0X33333333;//设定 PC0~7  的 CNFy=00,MODEy=11· 		
   GPIOC->ODR|=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7);//PC.0~7  
}

上一篇文章没有对 LED_Init() 做解析,这一次就追以下是怎么写的。
第一个是 APB2ENR,把第四 bit 设成 ”1“,就是把 GPIOC 打开。
在这里插入图片描述
再过来是把GPIO 的 CRL/CHL 做个设定。
在这里插入图片描述
GPIO是用 16 bits脚位 做资料的输出入,CRL/CHL 是控制这些脚位的设定,每个脚位用 4 个 bit 就要 16 * 2 * 2个 bit 来控制,CRL 是低 8 个脚位的控制, CRH 是高 8 个脚位的控制。
CRL/CHL 的设定又分 两种 CNFy[1:0] 和MODEy[1:0]
在这里插入图片描述
在这里插入图片描述
从程式里面可以看到 GPIOC的输出被设定为:

MODE=11:输出模式,最大速度50MHz 
CNF=00:通用推挽输出模式-- ”在输出模式(MODE[1:0]>00)“

然后输出在高电平’1‘。

再看看 BEEP_Init(),是在 BEEP.c 里面

#include "beep.h"
//	 						  
//   
void BEEP_Init(void)
{
  RCC->APB2ENR|=1<<3;    // 选择 GPIOB   
  GPIOB->CRH&=0XFFFFFFF0; //清除 bit 0~3.其他 bit 不变
  GPIOB->CRH|=0X00000003;//PB8 设定成 ’0011‘  		
  GPIOB->ODR|=1<<8;//PB8 再设定在高电平输出
}

前面解释完 LED.c 后 再看 BEEP.c 就简单多了。
OK ! 这个程式说明完了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值