IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F103RB 实作笔记(二)- Buzzer蜂鸣器(正点原子 STM32F103 nano开发板)程式解析 -> 正文阅读

[嵌入式]STM32F103RB 实作笔记(二)- 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 ! 这个程式说明完了!

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:47:09  更:2021-11-19 17:48:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:25:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码