本篇文章依旧是按照之前的stm32f10x系列单片机进行开发,但博主会教大家如何去看电路原理图以及如何去看开发手册,并且本系列文章不使用stm32提供的库函数,完全从0开始编写,这样能带大家更好的认识底层知识。

其次本篇文章不在解释关于RCC和GPIO口的设置与分析,具体内容可以在我的这篇文章里看一下:详细介绍如何读懂STM32开发板电路原理图以及芯片文档和开发手册,并编写一个测试程序:点亮一个LED灯

好了言归正传,首先打开你的电路原理图:

做单片机开发如果你要实现什么功能,那么一定要先看电路原理图,找到这些元器件的连接位置,然后在根据开发手册进行着手开发。

这次我们想要让蜂鸣器发声,蜂鸣器在电路中的符号是BEEP,所以我们要在电路原理图中找到BEEP。

我的是在这个位置,你们的可以跟着电路原理图找一下。

我们放打看一下:

找到了之后快于看到这个电路的设计图,在学习的过程中也要知道这些符号以及线路代表什么意思,这里我来给大家解释一下。

这个电路是从这里开始看的

不是从这里开始看的,要切记,我来解释一下为什么。

首先PG属于电源电流检测模块,当你的电流不达标时,PG不会流通,前面的VCC3.3意味着我们至少要给3.3v的电压才能让PG通过

下面的Q2代表开关管,当PG有效时Q2会驱动S8050放大电流,S8050是三极管,用于放大电频,如果不通的情况下不会放大电流,而是转向GND。

最后可以看到下面还接了一个GND

GND代表接地,这个地是指你开发板上的板子铜皮,或者塑料,真正的地都可以,它属于电源的负极,当电源不同时PG模块会报出错误信号,Q2会使能让它往下走,走到GND这个负极地,这样这个电源就无法驱动后面的电路工作。

这样做的方法是为了保证在电流不达标的情况下不会去流通到后面的电流,防止破坏器件,当然如果电流过大那直接就烧掉了。

首先R37是什么意思?

在电路中R代表电阻的意思,用来限电流的,防止电流过大烧掉器件,37代表第几个电阻,代表第37个电阻,别的电路可能会叫37R,但是没关系我们只要记住,在电路中R代表电阻。

下面的1k代表多少欧姆的电流,1k=1千欧姆,这个代表电阻阻值,也就是说至少一千欧姆以上的电流才能流过电阻,符号为Ω。

这里的R38和10K相信就不用我多说了吧,就是第38个电阻,阻值为1万Ω(欧姆)

最后这里,就是通向BEEP蜂鸣器的电路,一旦R37通过那么蜂鸣器电路就会驱动。

从上面可以得知,我们的电源需要给至少3.3v的电压才能驱动器件工作,如果电流不够会流向GND,够的话会通向BEEP电路,过程中电阻会吸收一部分电流,这个没关系,因为这是为了保护电路,只要保证达到3.3v就可以了。

那么通过ttl电路得知,我们需要向其发送高电平,电压我们不用担心,多少伏的电压我们选择对应的数据线就好了,数据线到时候会把电脑输出的电流通过一些电压转换模块进行转换成对应的电流,一般采用购买开发板自带的数据线就可以了。

那么接下来我们在看看CPU这边,看看BEEP接在CPU哪儿。

可以看到BEEP接在这里

CPU周围分了很多端口,PB,PA等等,我们的BEEP对应PB这组引脚上面,且引脚号为8,我们可以通过芯片手册去看一下PB这组引脚是接在哪个端口上的

可以看到我们的PB这组引脚是接在GPIOB端口上的,而GPIO端口是挂设在AHB2总线上的,我们在去看一下AHB总线的介绍。

AHB总线上有RCC时钟,本篇文章跟上一篇文章其实都是一样的步骤

我们可以在芯片手册里找到内存映射,可以看到端口A得内存映射,基本步骤都和上一篇文章一样。

一般单片机开发得基本步骤:

1.看电路原理图,找到自己想要开发功能得模块,并看懂它得工作模式

2.看下接在哪个引脚上,被哪个端口管理

3.看下这个端口得使用方法

4.找到映射地址,在让我们CPU通过地址总线去找PCB版的引脚路径,然后向不同得引脚发送电流,驱动器件工作。

那么我们目前得知的情况是:BEEP被PB8连接着,而PB8属于GPIO B端口组,而GPIO B端口组挂设在APB2地址总线上而APB2地址总线挂设在AHB2系统总线上,同时总线上带有RCC时钟,如果要驱动总线工作需要开启RCC时钟。

上手实践吧~

1.先将基地址定义出来

#define PERIPH_BASE           0x40000000
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
#define GPIO_Pin_5            ((uint16_t)0x0020)
#define RCC                   0x40021000
#define RCC_KZ                *(unsigned int*)(RCC+0x18)
#define GPIOB_RR              *(unsigned int*)(GPIOB_BASE+0x00)
#define GPIOB_CC              *(unsigned int*)(GPIOB_BASE+0x10)

2.还是老样子需要把SystemInit函数定义出来

void SystemInit()
{}

3.在main函数里开启rcc与设置GPIOB端口

int main(){RCC_KZ |= 1 << 3;  GPIOB_RR |= (2 << 4 * 0);
}

那么GPIOB已经可以正常驱动了,我们向CC发送电平就可以让蜂鸣器发声啦

while(1){GPIOB_CC = (1 << (16 + 0));
}

完整代码:

#define PERIPH_BASE           0x40000000
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
#define GPIO_Pin_5            ((uint16_t)0x0020)
#define RCC                   0x40021000
#define RCC_KZ                *(unsigned int*)(RCC+0x18)
#define GPIOB_RR              *(unsigned int*)(GPIOB_BASE+0x00)
#define GPIOB_CC              *(unsigned int*)(GPIOB_BASE+0x10)void SystemInit()
{}int main(){RCC_KZ |= 1 << 3;   GPIOB_RR |= (2 << 4 * 0);    while(1){GPIOB_CC = (1 << (16 + 0));    }
}

STM32单片机开发之让蜂鸣器发声相关推荐

  1. VSCode搭建STM32单片机开发环境

    前言 由于之前的学习过程中使用过了VSCode.Source Insight这类强大的代码编辑器,感觉实在是太好用了.但是最近自己要用到Keil进行STM32单片机的开发,因为使用过了VSCode这类 ...

  2. 使用vscode + gcc进行 STM32 单片机开发(三)DMA读写SD卡,移植FATFS文件系统

    背景 在本系列的前两篇文章( 使用vscode + gcc进行 STM32 单片机开发(一)编译及调试 使用vscode + gcc进行 STM32 单片机开发(二)gcc环境 移植rtthread) ...

  3. STM32单片机开发初识

    因工作需要,接触STM32单片机开发,过程中主要参考百度和自己实际经验,作为总结和以后参考,写此博客 一.开发环境准备 用到的开发环境和开发软件主要有 Keil for ARM,STM32CubeMX ...

  4. 有没有兼职做STM32单片机开发

    湛江地区:有没有人想兼职做STM32单片机开发,主要Lora点对多的透传,4G网络传输...硬软件熟悉的

  5. 【单片机】【让蜂鸣器发声】认识蜂鸣器,让蜂鸣器发出你想要的声音

    单片机中的蜂鸣器 1. 三极管 三极管是一种控制电流的半导体器件,作用是把微弱信号放大成幅度值较大的电信号(射频方法),也用作无触点开关(用作开关).放大的原理参考:三极管原理-导通条件_坚持努力,冲 ...

  6. STM32 使用STM32F103控制无源蜂鸣器发声播放音乐

    使用STM32控制无源蜂鸣器发声播放音乐 [注:学习STM32总结做的笔记,大神勿喷.有不足之处还望不吝赐教. -----本篇大部分转载而来,有侵权请联系作者,谢谢.] 原博客地址: https:// ...

  7. STM32单片机开发环境搭建

    学习过程中不能追求大而全,掌握大部分就可以. 注册ST账号 进入ST官网:意法半导体STM | STM32/STM8微控制器 | MCU单片机 点击注册: 进入注册界面: 登录: 账号:1848712 ...

  8. STM32单片机开发实例 基于STM32单片机的温室大棚监测系统

    一.系统设计 通过STM32单片机进行主控,通过光敏电阻模块进行大棚内的光照强度的采集,通过DHT11数字温湿度传感器进行温湿度的采集,通过气压模块进行大棚气压强度的采集,通过水滴模块进行土壤湿度的采 ...

  9. STM32单片机开发实例 基于STM32单片机的智能行李箱

    一.系统设计 本次设计的是基于STM32F103C8T6单片机设计的一款智能行李箱,系统内使用HX711压力传感器模块采集行李箱内的重量数据,使用ULN2003电机驱动模块来驱动两个步进电机 以此来模 ...

最新文章

  1. 化工原理各章知识点汇总
  2. centos7下安装低版本mysql_centos7下使用yum安装制定版本mysql
  3. 【收集】11款Linux数据恢复工具
  4. unicode 转换
  5. COCOS2D-X编译成android的项目
  6. 【一些细节问题】5种神经网络常见的求导!
  7. 190623每日一句
  8. Atitit.软件开发的几大规则,法则,与原则Principle v3
  9. getData 函数
  10. c3p0连接池配置模板,SSM中使用c3p0连接池配置属性
  11. aceAdmin框架依赖
  12. vue 日历插件ele-calendar
  13. 微信UnionId 部分开放
  14. maven 问题解决(Failed to look for file: http://)
  15. CentOS离线 + 在线安装telnet(rpm包安装)
  16. 【166】VS2022调试通过海康人脸抓拍SDK的C++代码
  17. JAVA访问HDFS(满满干货!基础操作入门)
  18. 蓝图(blueprint)的理解和用法
  19. background-position,有逗号和没逗号:截然不同的结果
  20. 国密算法:利用python进行sm3 hash算法,计算hash值,国密算法库gmssl的使用

热门文章

  1. android webview打印,javascript - 如何在Android Webview中使网站上的打印按钮工作? - 堆栈内存溢出...
  2. 语言题库安装包312mb_大学为什么要考取计算机二级,以后很需要,附二级Msoffice题库...
  3. 代码证年审 年报 附文档 短消息类服务接入代码 电信业务资源综合管理系统用户手册-码号年报 (码号使用单位)
  4. 夏天这四件事会耗干你的阳气,尤其是第三件!
  5. 恭喜宿主获得鸿蒙,第四十章大殿讲道,十连抽获得鸿蒙至宝!
  6. geitee仓库项目拉到(克隆到)本地
  7. unity 斥力_基于绝对能量守恒原理的基础物理理论-国家科技图书文献中心.PDF
  8. c语言答案知码,C语言笔试习题集答案和解析.doc
  9. win7搭建oracle,win7下安装Oracle即时客户端搭建
  10. 查找窗口隐藏了怎么办_百度地图这些不为人知的隐藏功能