漫谈STM32的GPIO

发布者:BoldDreamer最新更新时间:2021-03-19 来源: eefocus关键字:STM32  配置  GPIO 手机看文章 扫描二维码
随时随地手机看文章

简介:单片的输入输出不叫GPIO,仅仅是个io,稍微复杂点的就是串口,至于后面那些增强的1t的带da的单片机,都不属于入门学习范围.那些东西都是为了低成本而存在,对学习没有任何作用.只要初学者入门了,所有片内外设都非常简单的搞定.本文是一片基础学习文章.入门者的精神食粮.


理解gpio不仅仅是会配置寄存器,因为好多人根本不知道寄存器如何配置.如果不信的话那回答我这个问题,stm32的io频率到底该配置成多少Mhz?

上面这张图是来自stm32的中文版手册.我对这些模块进行了简单的标注.下面我就从外到内进行分析信号的流向以及每一部分存在/屏蔽的意义.


先看上半部分,就是io的I,input,输入功能.信号从io引脚流入,首先被保护二极管q/r进行钳位.那就举一个例子,假定vdd是3.3v,那么二极管有0.7v的压降,那么io引脚的高电平就不能超过3.3+0.7v=4v只要超过4v那么就会有很大的电流从保护二极管流过,信号的内阻就会承担比较大的电压,使io引脚的电压最高钳位到4v.上面分析的是对于过高的电平.q二极管导通.r二极管关闭,所以不用分析.对于io出现负电压,这个时候q二极管是关闭的需要分析下面的r二极管.r二极管保持io引脚电平不低于vss-0.7v.至于为什么会出现这种情况,暂时不做分析,如果你看过示波器的振铃信号.就明白了.给大家留一个问题,如何消除振铃信号?


对于正常的数字信号,就进入了o/p电阻的控制范围.上下拉电阻的作用又是什么,什么时候需要上下拉? 上拉电阻就是在信号和vdd直接接引ig电阻,经验值在10k左右.对于一个5v的信号,能够最大提供0.5ma的电流.首先聊一个开漏输出,就是iic使用的信号.这种信号的两个状态是Z高阻态和0低电平,无法提供高电平的.加入一个上拉电阻,就能在z态的时候,信号线为高电平vdd, 0态的时候信号线为0.上拉电阻承担整个vdd电压.也就是说z态的时候上拉电阻无电流通过,功耗基本为0,而0态的时候上拉电阻功率为vdd*vdd/r,在低功耗设计的时候这一个电阻的功耗需要考虑.默认状态需要保持电阻在功耗0的状态.当然对于stm32这种片内控制的上下拉,直接关掉,让其浮空.就会降低功耗.但是有可能信号也失去了意义无法唤醒cpu.慎重严肃考虑.上拉电阻的意义就是给总线灌入一定电流,提高总线从0到1跳变的速度.有些信号驱动能力不足的时候,会提供信号的高电平驱动能力.包括电压和电流.相反,减缓了下降沿的速度,降低了低电平的驱动能力.在设计的时候多用欧姆定律计算.包括功耗.电阻究竟该用多大.


K元件,呵呵.这个是个很有意思的东西.其实这里的每一个元件都有意思,否则 2个电阻2个二极管就不需要写上面的两大段了.首先名称是ttl肖特基触发器,不就是个带门限的触发器嘛.首先ttl是指他的参考是ttl电平不是cmos电平,这里写详细了大家也会混乱.ttl电平我解释一下,TTL输出高电平>2.4V,输出低电平<0.4V。最小输入高电平和最大输入低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是0.4V。也就是说b模拟输入,是直接从io引入,并且与c数字部分进行了隔离.数字部分使用ttl电平的触发器进行了缓冲,这个缓冲有时候也被称为buff,但是buff并不全是触发器.触发器的延时在5-10ns之间.当然i和c会同时获取ttl肖特基触发器的输出,触发器也对信号的驱动能力进行了提高,至于是c还是d来消费掉这个信号,就看你io配置成什么功能了.


对于GPIO的o, output,就从左向右进行分析.首先是信号的生成,其一是寄存器,由cpu来操作.e和f共两种操作,e是单次操作只能设置寄存器的某些位为1,或者清除某些位为0,影响部分bit,而f是直接将输出寄存器改变,影响 全部bit.对于j是硬件控制器自动生成信号流,这里就不用详述了.控制输出前面的梯形是选择器,选择其中的一路有效.无效的一路cpu也可以操作.但是毫无意义.很多人都是在这个坑里出不来,我做了一些操作,但是io不听话.对于控制输出和m/n两个管子共同生成高低电平的切换.当然,这里会有一个死区控制.别看这芯片原理图这么画,就认为是这么简单设计.如果用桥电路控制电机就会掉坑里.因为图上的控制框是有死区控制的.并且能控制好.控制不好就会出现跳变的时候io功率很大.对于电机桥电路来说.就是直接烧坏驱动芯片.做输出的时候,上下拉电阻都是断开的.但是保护二极管没有断开.这里提出一个问题,虽然是输出,信号会过充吗?大家自己去考虑.


写道这里,图解gpio就结束了.把中间的两个复杂的问题总结一下答案.


1. 振铃信号 2.gpio的频率


振铃信号是因为电路的阻抗匹配出问题导致.也就是信号线上的电感和电容导致了信号的震荡.这个震荡与信号的跳变间隔基本无关.但跳变间隔长的信号,对振铃不敏感而已.因为他们有更多的采样时间.在工业级总线上可以多次采样求平均值来扛干扰.震荡信号与跳变的边沿有关.跳变边沿的频率约为信号反转频率的10倍.就是一个1k的串口信号,跳变频率大约在10k级别.所以2.gpio的频率是1振铃信号的产生原因之一.既然是之一,那么,就可以通过修改它来减少振铃信号.提高信号的稳定程度.并且减少干扰.那么对于小于200K的时钟来说,设置2M时钟即可.对于小于1M的信号,设置10M输出即可.对于5M以下的信号,设置50Mhz,对于5M以上的信号,也只能设置50Mhz,这时候,你要去考虑信号边沿的斜率是不是能满足你的需要了.例如io频率在48M的时候,波形可能已经不是漂亮的方波了.但是不代表这个信号是不能用的.要看你的接收方是不是认可这种信号.当然,这里我也不用多说了,遇到这种问题的人,都知道如何解决.只不过没法找到万能的解决办法.

关键字:STM32  配置  GPIO 引用地址:漫谈STM32的GPIO

上一篇:基于TFTP协议实现STM32的IAP
下一篇:STM32微控制器的可靠串口通信技术研究

推荐阅读最新更新时间:2024-11-08 15:15

stm32在rt-thread上的SysTick(系统定时器)
在rt-thread的board.c里面已经配置了systick -- SysTick_Config( SystemCoreClock / RT_TICK_PER_SECOND ); 10ms = (72M/100) * (1/72M)s systick的中断函数 SysTick_Handler()调用了 rt_tick_increase(), 自增rt_tick值 clock.c里面有几个接口函数 rt_tick_t rt_tick_get(void) 返回当前的rt_tick void rt_tick_set(rt_tick_t tick) 设置rt_tick rt_tick_t rt_tick_fro
[单片机]
STM32开发笔记80: 在构造函数中调用延时函数应注意的问题
单片机型号:STM32L053R8T6 W5500驱动程序完成后,运行时,单片机死机。W5500驱动程序先前已经在项目中具体应用过,运行的比较稳定。这次移植后,没有做改动,但是单片机运行时死机。 此项目与先前项目的不同点在于,项目中有FreeRTOS操作系统运行,原先的项目没有,最后将问题聚焦于W5500的构造函数上,如下程序所示: CW5500::CW5500(void):CSpi() { //uint8_t memsize = {{2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}}; //注册相关的函数 reg_wizchip_cris_cbfunc(w5500_cris_enter
[单片机]
stm32的唯一ID编码
产品唯一的身份标识非常适合: ● 用来作为序列号(例如USB字符序列号或者其他的终端应用) ● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。 ● 用来激活带安全机制的自举过程 96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。 这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。 基地址:0x1FFF F7E8 每个CPU 出厂的时候都 配置的一个ID,96 位的.这个唯一码可以利用作软件加密....... stati
[单片机]
基于STM32单片机的电子称设计
摘要 电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。 电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。 本系统的设计主要从硬件电路设计,软件编程调试,实物焊接调试三部分进行详细阐述。硬件电路主要是基于单片机为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集,电子秤专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到单片机进行处理显示,数据显示由LCD160
[单片机]
基于<font color='red'>STM32</font>单片机的电子称设计
STM32 Flash
1:Flash简介 FLASH存储器是闪速存储器,它的主要特点是在不加电的情况下能长期保持存储的信息。就其本质而言,Flash Memory属于EEPROM(电擦除可编程只读存储器)类型。它既有ROM的特点,又有很高的存取速度,而且易于擦除和重写, 功耗很小。 2:嵌入式Flash特性 对于 STM32F40x 和 STM32F41x,容量高达 1 MB;对于 STM32F42x 和 STM32F43x,容量高达 2 MB 128 位宽数据读取 字节、半字、字和双字数据写入 扇区擦除与全部擦除 低功耗模式 STM32F40x和STM32F41x Flash 模块构成 可以看到 主存储器 该部分用来存放代码和数据常数(如
[单片机]
<font color='red'>STM32</font> Flash
STM32之串口例程
[单片机]
<font color='red'>STM32</font>之串口例程
零基础入门stm32你的学习思路对了吗
  我想说,为了学习单片机而去学习单片机的思路不对。   你问,如何系统地入门学习STM32?   本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。   你要考虑的是, 我可以用STM32实现什么?   为什么使用STM32而不是8051? 是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO? 是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 是51的内存太小而你要存储的东西太多?   当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方
[单片机]
GD32单片机STM32远程下载手机程序升级固件下载局域网网页升级工具
GD32、STM32单片机,是我们最常见的一种MCU。通常我们在使用STM32单片机都会遇到程序在线升级下载的问题。 GD32/STM32单片机的在线下载通常需要以下几种方式完成: 1、使用ST/GD提供的串口下载工具,本地完成固件的升级下载。 2、自行完成系统BootLoader的编写,将系统程序分为BootLoader和APP两个部分,BootLoader完成固件升级。 3、使用STM32/GD固件服务器,完成固件的升级,固件服务器https://simplewifi.taobao.com/ 几种方式各有优缺点: 使用ST提供的方法进行固件升级,方法简单,不需要额外的开发。但是,只能本地完成STM32单片机的升级。
[单片机]
GD32单片机<font color='red'>STM32</font>远程下载手机程序升级固件下载局域网网页升级工具
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved