0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MCU单片机GPIO初始化该按什么顺序配置?为什么初始化时有电平跳变?

聚沃科技 2024-02-22 11:07 次阅读

GPIO初始化时有时钟配置、模式配置、输出配置、复用配置,那么在编写初始化代码时,到底该按什么顺序执行呢?如果顺序不当那初始化过程可能会出现短暂的电平跳变。

第一步,初始化MCU外设时,一般都需要先打开对应寄存器接口时钟,所以GPIO时钟使能一定是第一步,否则后面执行的初始化配置无法写入到寄存器中。

wKgZomXWuhOAfLXzAAAGPeiUtSA151.png

第二步,

对于外设复用的GPIO,则需要先配置好GPIO的重映射或者复用选择器,让这个GPIO先内部连接到外设上;

如果我们先初始化GPIO复用模式那么可能默认的复用不是我们想要的外设功能,此时IO按默认外设的默认电平输出,接着软件又配置复用选择器连接到想要的外设,输出电平再次发生变化,就会出现这个短暂的电平变化。

wKgaomXWuheAN1ChAAAIwCjFxkk707.png

对于普通输出IO,则需要先配置好输出状态。

wKgaomXWuhyAVaxuAAAIGfWwVOg637.png

因为寄存器里默认输出值是0,如果GPIO想要默认状态高,那初始化完GPIO后再配置IO输出高也会出现短暂的低电平导致电平变化。

wKgaomWp4AyAM7YPAABZRh7pnjE665.png

第三步,

初始化GPIO模式,其中一般有输出、输入、复用、模拟等几种模式,有的芯片也可以配置内部的上下拉电阻是否开启,在输出模式时还有GPIO驱动能力配置。

wKgZomXWuiaANRjNAAAGjb4uhxY775.png

当然也有特殊情况,以TIMER PWM输出为例,不同的PWM模式默认电平有高和低两种情况,和TIMER配置有关,此时我们按标准顺序配置好GPIO后再配置TIMER,则也可能出现电平变化,如果PWM用于控制功率开关,则可能对电路带来不良影响。所以对于这类外设默认电平可配的外设,想要启动外设工作前保持默认电平的话,我们就可以先初始化好外设,再按标准的顺序配置GPIO。

wKgZomXWuiuAbiRGAAAvRbsiErs176.png

所以GPIO虽然简单,但实际也有很多细节,想要让软硬件更加可靠,需要抓住这些细节优化软硬件设计。

这里推荐大家购买我们红枫派开发版,其中的例程和驱动程序就是考虑到细节设计的,可以方便大家二次开发产品

wKgaomXWujCAOzfuAALFcXgsaKA003.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620825
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343607
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50570
收藏 人收藏

    评论

    相关推荐

    RT-Thread自动初始化详解

    是指初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行,非常的方便。 1 普通初始化 前面也讲了,我们在写单片机的程序时,需要对硬件进行初始化
    的头像 发表于 06-25 21:38 9561次阅读
    RT-Thread自动<b class='flag-5'>初始化</b>详解

    单片机初始化

    各位大虾:如定义变量为全局变量,单片机初始化时,会自动赋初值为0不?谢谢
    发表于 11-22 15:10

    控制FPGA上电、配置以及初始化时

    config_done信号,pin被外部10K欧姆电阻上拉到高,FPGA是检测到CONFIG_DONE为高电平后进入到初始化过程。FPGA的初始化时钟源有两种选择,一种是FPGA内部
    发表于 01-20 17:37

    【FPGA干货分享一】控制FPGA上电、配置以及初始化时

    ,FPGA释放config_done信号,pin被外部10K欧姆电阻上拉到高,FPGA是检测到CONFIG_DONE为高电平后进入到初始化过程。FPGA的初始化时钟源有两种选择,一种
    发表于 01-22 14:41

    GPIO怎么初始化

    大佬经验一、想快速入门进阶,面向工作时先把工作中需要的东西学会,一项一项的来,比如先把GPIO弄清楚,怎么初始化,怎么输入输出,然后定时器、串口、ADC、DAC、DMA、SPI等等先把用得着
    发表于 08-03 06:03

    USART初始化时配置

    蓝桥杯嵌入式组开发——USART初始化时钟,中断对RX(A3),TX(A2)口进行配置USART配置中断使能打开总开关1.初始化代码void USART_INIT(void
    发表于 02-28 06:15

    51单片机对SAA7113初始化和控制的程序

      用51单片机对7113初始化和控制   SAA7113的初始化就是对寄存器配置合适的参数,使其能够有符合要求的输出。寄存器配置通过I2
    发表于 09-08 11:50 1963次阅读

    UCOS_III_配置初始化

    UCOS_III_配置初始化
    发表于 12-20 22:53 5次下载

    解析内核初始化时根内存盘的加载过程

    2006-12-12 13:54:41 来源:Linux 宝库 分享到:标签:loadlin gzip 作者:opera 概述 ==== 1)当内核配置了内存盘时, 内核在初始化时可以将软盘加载
    发表于 11-08 10:40 0次下载

    浅析GEL文件在ARM初始化时的作用和修改.pdf

    浅析GEL文件在ARM初始化时的作用和修改
    发表于 04-22 10:39 1次下载

    解决ds1302外置时钟模块重复初始化时间问题(单片机掉电,模块电池供电)

    ,物美价廉。一、问题描述DS1302时钟模块,通过单片机设置好时间后,由纽扣电池供电应当一直正常工作。但是单片机掉电再重新上电后,会导致模块重复初始化,使时间回到起点,与实际需求不符。单片机
    发表于 01-17 12:39 5次下载
    解决ds1302外置时钟模块重复<b class='flag-5'>初始化时</b>间问题(<b class='flag-5'>单片机</b>掉电,模块电池供电)

    C语言指定初始化器解析及其应用

    C90 标准要求初始化程序中的元素以固定的顺序出现,与要初始化的数组或结构体中的元素顺序相同。但是在新标准 C99 中,增加了一个新的特...
    发表于 02-07 11:28 2次下载
    C语言指定<b class='flag-5'>初始化</b>器解析及其应用

    RT-Thread自动初始化机制

    共使用了 6 中顺序初始化,本文以其中的一个 INIT_APP_EXPORT(fn) 为例进行自动初始化的原理分析,其他顺序初始化的原理
    的头像 发表于 06-17 08:52 1897次阅读
    RT-Thread自动<b class='flag-5'>初始化</b>机制

    ADC初始化测定方法

    测试ADC初始化时间的方法
    发表于 12-05 14:45 1次下载