2025年gip电路原理(电路中gpio是什么意思)

gip电路原理(电路中gpio是什么意思)浮空输入 p style margin left 0 text align justify span style color 333333 上下拉都关闭 span p

大家好,我是讯享网,很高兴认识大家。



浮空输入


讯享网

<p style="margin-left:0;text-align:justify;"><span style="color:#;">上下拉都关闭</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">好处&#xff1a;其电平完全由外部决定</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">不好:当引脚没有外接电路的时候&#xff0c;其电平信号是不确定的,不确定的信号会影响程序的正常判断</span></p> 

讯享网

上拉输入

讯享网<p style="margin-left:0;text-align:justify;"><span style="color:#;">打开上拉&#xff0c;关闭下拉</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">好处&#xff1a;提供了一个默认电平&#xff0c;当外部电路不确定的时候&#xff0c;提供了一个默认的高电平。</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">当外部输入低电平时&#xff0c;输入的还是低电平</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">当外部输入高电平时&#xff0c;输入的是高电平</span></p> 

下拉输入

<p style="margin-left:0;text-align:justify;"><span style="color:#;">打开下拉&#xff0c;关闭上拉</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">好处&#xff1a;提供了一个默认电平&#xff0c;当外部电路不确定的时候&#xff0c;提供了一个默认的低电平。</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">当外部输入低电平时&#xff0c;输入的还是低电平</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">当外部输入高电平时&#xff0c;输入的是高电平</span></p> 

模拟输入

推挽输出

P-MOS、N-MOS都能用

输出高电平

在输出数据寄存器对应引脚位置写1—&gt;数据选择器选择上路—&gt;输出控制器给P-MOS和N-MOS都输出高电平—&gt;P-MOS导通,N-MOS截止—&gt;高电平由Vdd提供

输出低电平

在输出数据寄存器对应引脚位置写0—&gt;数据选择器选择上路—&gt;输出控制器给P-MOS和N-MOS都输出低电平—&gt;N-MOS导通,P-MOS截止—&gt;低电平由Vss提供

开漏输出

P-MOS关闭

输出低电平

在输出数据寄存器对应引脚位置写0—&gt;数据选择器选择上路—&gt;输出控制器给P-MOS和N-MOS都输出低电平—&gt;N-MOS导通,P-MOS截止—&gt;低电平由Vss提供

本身无法输出高电平

在输出数据寄存器对应引脚位置写1—&gt;数据选择器选择上路—&gt;输出控制器给P-MOS和N-MOS都输出高电平—&gt;P-MOS关闭,N-MOS关闭—&gt;电路处于高阻态

由上可得:开漏本身无法输出高电平

如何让开漏输出高电平?

  1. 打开内部上拉电阻

    2.外接上拉电阻

好处:提供的电压由用户决定,想提供高电压,把外界上拉电阻的电压源提高即可。

寄存器定义与作用

为什么要学习寄存器,寄存器的作用是什么?

答:

  1. 寄存器是单片机内部的一些存储单元
  2. 单片机的设置和寄存器直接关联,比如输出模式,比如输入输出的电压,比如上下拉电阻是否打开,所以,想要对单片机进行设置就是对寄存器进行改写的过程。

控制某一引脚输出电压来点灯所需要控制的寄存器

  1. 时钟开关,总开关
  2. 端口模式寄存器–输出模式
  3. 输出类型寄存器–推挽
  4. 输出速度寄存器–非常慢
  5. 上下拉寄存器 –既不上拉也不下拉
  6. 输出数据寄存器 –1

配置时钟使能寄存器

思路:

我们的目的是使用PC13,所以要先打开C引脚组时钟。

通过寻找内存架构找到了RCC相关的寄存器组,RCC寄存器组里的寄存器太多了。

找到控制引脚组的RCC寄存器需要找到GPIO属于哪个总线上的(AHB1APB1APB2PHB2等),通过查内存分配架构图可知,GPIO在AHB2总线上,所以,我们定位到了RCC_AHB2ENR1

RCC AHB2 peripheral clock enable register 1 (RCC_AHB2ENR1)

打开C组,就可以使用PC13

RCC_AHB2ENR1第2位写1

端口模式寄存器

GPIO port mode register (GPIOx_MODER) (x = A to J)

PC13为输出模式

GPIOC_MODER第27、26位写0,1

输出类型寄存器

GPIO port output type register (GPIOx_OTYPER) (x = A to J)

PC13推挽模式

GPIOC_OTYPER 第13位写0

输出速度寄存器

GPIO port output speed register (GPIOx_OSPEEDR) (x = A to J)

PC13低速输出

GPIOC_OSPEEDR 第27、26位写 0 0

上下拉寄存器

GPIO port pull-up/pull-down register (GPIOx_PUPDR) (x = A to J)

PC13都不拉

GPIOC_PUPDR 第27、26位写 0 0

输入数据寄存器

GPIO port input data register (GPIOx_IDR) (x = A to J)

输出数据寄存器

GPIO port output data register (GPIOx_ODR) (x = A to J)

PC13输出高电平

GPIOC_ODR第13位写1

  1. 打开时钟:RCC_AHB2ENR1 给第2位写1
  2. 配置端口模式寄存器 配置为输出模式 GPIOC_MODER 第27、26位写 0 1
  3. 配置输出类型寄存器 配置为推挽输出 GPIOC_OTYPER 第13位写0
  4. 配置输出速度数据寄存器 配置为很低 GPIOC_OSPEEDR 第 27、26位写 0 0
  5. 配置上下拉寄存器 配置为既不用上拉也不下拉 GPIOC_PUPDR 第27、26位写0 0
  6. 配置输出数据寄存器 给PC13引脚写1 GPIOC_ODR 第13位写1

0x56020C00是RCC寄存器组的基地址

偏移地址,相对于基地址–RCC寄存器组的起始地址

RCC_AHB2ENR1地址为:0x56020C00+0x08C=0X56020C8C

GPIOC寄存器组的基地址为0x5202 0800

GPIOC_MODER : 0x5202 0800+0X00=0x5202 0800

GPIOC_OTYPER : 0x5202 0800+0X04=0x5202 0804

GPIOC_OSPEEDR : 0x5202 0800+0X08=0x5202 0808

GPIOC_PUPDR :0x5202 0800+0X0C=0x5202 080C

GPIOc_ODR :0x5202 0800+0X14=0x5202 0814

C语言点灯

讯享网 

记得使用微型C库,不勾的话可能会影响效果

如果报了两个未知错误,可尝试调整优化

烧录前一定将烧写器调成STLINK

位操作

精准置1

x|1=1;

x|0=x;

故将不希望改变的位和0相或,将希望置1的位和1相或即可。

使第26位置1,可通过让整个寄存器和1&lt;&lt;26相或再赋值得到,寄存器 |= (1&lt;&lt;26);

精准置0

x&1=x;

x&0=0;

故将不希望改变的位和1相与,将希望置0的位和0相与即可。

上图可知,使第27位置0,可通过让整个寄存器和蓝色框中的数进行与运算并赋值得到,但这个数并不好得出,我们可以曲线救国,先1&lt;&lt;27位,再进行取反得到该数

寄存器 &= ~(1&lt;&lt;27)

讯享网

库函数点灯

新建项目

引脚配置

打开烧录口

生成项目

代码分析

双击main.c文件,找到,我们可以查看MX_GPIO_Init();的内容以了解CubeMX帮我们生成了的初始化内容,选中MX_GPIO_Init();后按下F12或鼠标右键,选择Go To Definition of…

库函数分析

<p style="margin-left:0;text-align:justify;"><strong><span style="color:#;">void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)</span></strong></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">功能&#xff1a; 设置或清除指定的端口位</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">参数&#xff1a;GPIO_TypeDef *GPIOx 端口号</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">uint16_t GPIO_Pin 引脚号</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">GPIO_PinState PinState 电平状态</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">GPIO_PIN_SET 1 </span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">GPIO_PIN_RESET 0</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">返回值&#xff1a;无</span></p> 

讯享网<p style="margin-left:0;text-align:justify;"><strong><span style="color:#;">void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) </span></strong></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">功能&#xff1a; 切换指定的引脚电平状态</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">参数&#xff1a;GPIO_TypeDef * GPIOx 端口号</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">uint16_t GPIO_Pin 引脚号</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">返回值&#xff1a;无</span></p> 

<p style="margin-left:0;text-align:justify;"><strong><span style="color:#;">GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) </span></strong></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">功能&#xff1a; 读取指定的引脚电平状态</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">参数&#xff1a;GPIO_TypeDef * GPIOx 端口号</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">uint16_t GPIO_Pin 引脚号</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">返回值&#xff1a;GPIO_PinState 电平状态</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">GPIO_PIN_RESET 0</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">GPIO_PIN_SET 1</span></p> 

讯享网<p style="margin-left:0;text-align:justify;"><strong><span style="color:#;">HAL_Delay()单位毫秒</span></strong></p> 

点灯

闪灯实验

底板与拓展板

底板

STM32 开发板底板,支持 5V 电源适配器与 TypeC 供电。

提供 RTC 时钟电源,提供三轴加速度与角速度传感器,用于姿态感知。

板载 ESP-12F 无线模组,用于物联网云平台项目开发。

提供 1 路五向按键,采用中断与 A/D 模式采样。

提供 1 路有源蜂鸣器,1 路 2*17P 扩展接口,用于资源扩展板的接入。

核心板接口通过 2.54mm 间距的插针引出,方便用户外接其它设备

显示屏与资源拓展板

显示屏

电容触摸显示屏在很多智能设备上得到应用,提升了设备的交互感。

在开发板套件中使用方型显示屏用来模拟圆形的一个手表项目。显示屏尺寸为 2.8寸,分辨率 320*240(RGB)。

驱动 IC采用 ILI9341,自带 172,800 字节的 GRAM 存储。电容触摸屏采用 I2C 接口,驱动 IC 采用 FT6336G。

资源拓展板

资源扩展板提供基于 I2C 总线的温湿度传感器、环境光感知、心率/脉搏测量。基于模数转换接口的电压/电流采集。

基于 EXTI 事件/中断控制类型的人体红外、光电开关、火焰感知传感器。

基于 SPI 总线的数码管驱动电路。

基于 PWM 控制的风扇、蜂鸣器、震动马达。

基于 GPIO 的按键、LED 指示灯。

基于异步串行通信的 485 总线电平转换。基于控制器局域网总线的 CAN 电平转换等外设。

资源扩展板主要用于微控制器入门外设的使用,硬件图纸原理以及项目案例的应用开发学习。

原理图

LD1这个灯连到了哪个引脚?

  1. 先找到想要点的灯是谁,确定丝印为LD1

        2.打开拓展原理图,根据丝印LD1找到等的所在处,LED1线控制着LD1灯的亮灭

LED1为高电平灯亮,反之,灯灭

LED1肯定连到了芯片引脚上,顺线继续找LED1

3.LED1想要连到芯片引脚,必走如图所在处,其丝印为J1(空间有限,板子上并未标注)

4.打开拓展板原理图J1所在处,能够找到老熟人,LED1,其位于J1的4号口

5.拓展板通过J1连到了底板的J6口

6.打开底板原理图找J6的4号口,就找到了LED1的连接处

7.底板通过地板上的槽J1和J2连到了核心板,所以,LED1想连到芯片上肯定会走这个槽,所以去底板上找这个槽有没有叫LED1的,槽是J1和J2

8.在J2的15号口又看到了老熟人LED1,为了方便,这里直接标注上了最后连到核心板的PC14上了

底板的J2口,连到了核心板的J3口,可知15号口确实连到了芯片PC4引脚

结论:PC4最终连到了LED1,所以,控制PC4的电平高低就可以实现对灯的控制了,至此,此次原理图线路追踪结束,并得出结论

PC4高电平LD1灯亮,反之灯灭

驱动风扇、蜂鸣器、马达隔一段时间切换一次状态

将演示视频发群里

依次方法可知:风扇连到了PC6引脚,高电平驱动

马达连到了PC7引脚,高电平驱动

底板蜂鸣器连到了PA15引脚,高电平驱动

  1. 按键

当按键未按下,PC9为高电平

当按键被按下,PC9为低电平

所以,检测PC9是否为低电平就可以直到PC9是否按下了

<p style="margin-left:0;text-align:justify;"><span style="color:#;">抖动原因&#xff1a;</span></p> <p style="margin-left:0;text-align:justify;"><span style="color:#;">任何的机械按键都会有抖动&#xff0c;而且人手按下抬起并不是一瞬间的&#xff0c;人抬手是需要反应时间的&#xff0c;所以会导致按下的低电平时间过长&#xff0c;导致多次误进if判断语句&#xff0c;所以会多次切换状态&#xff0c;导致误判。</span></p> 

延时消抖

此处建议观看录课中的延时消抖讲解

抬手检测

检测到抬手动作后再进行灯的电平翻转

光电开关(任务分析)

原理

遮挡–&gt;PE15输出高电平—&gt;PB2输入高电平

无遮挡–&gt;PE15输出低电平—&gt;PB2输入低电平

​​​​​​​光电开关控制风扇

num测试

使用调试查看变量内容

最终实现代码

小讯
上一篇 2025-04-18 19:24
下一篇 2025-05-26 13:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/188910.html