如何读懂STM32开发板电路原理图以及芯片文档和开发手册

这次我们想要让蜂鸣器发声,蜂鸣器在电路中的符号是BEEP,所以我们要在电路原理图中找到BEEP。,就是通向BEEP蜂鸣器的电路,一旦R37通过那么蜂鸣器电路就会驱动。那么GPIOB已经可以正常驱动了,我们向CC发送电平就可以让蜂鸣器发声啦

其次,本文不解释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千欧,这代表了电阻的阻值,也就是说至少有1千欧的电流可以流过电阻,符号是Ω。

R38和10K相信在这里就不用我多说了。 它们是第 38 个电阻,电阻值为 10,000 Ω(欧姆)。

终于来了

,这是导致 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));	
    }
}
单片机

树莓派、Arduino、单片机职业方向的区别:单片机和树莓

2024-3-2 19:04:25

单片机

STC8989CC5252STM3232ff103103vetvet6内核

2024-3-2 20:06:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索