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

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

    关注

    6035

    文章

    44554

    浏览量

    634594
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17123

    浏览量

    350973
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52051
收藏 人收藏

    评论

    相关推荐

    RT-Thread自动初始化详解

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

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

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

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

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

    UCOS_III_配置初始化

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

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

    到内存盘中作为根盘。 当同时配置初始化内存盘(Initail RAM Disk)时, 内核在初始化时可以在安装主盘之前, 通过引导程序所加载的initrd文件建立一个内存初始化盘,
    发表于 11-08 10:40 0次下载

    Linux内核初始化过程中的调用顺序

    所有的__init函数在区段.initcall.init中还保存了一份函数指针,在初始化时内核会通过这些函数指针调用这些__init函数指针,并在整个初始化完成后,释放整个init区段(包括.init.text,.initcall.init等)。
    发表于 05-12 08:40 1613次阅读

    51单片机定时器的初始化步骤详细说明

    本文档的主要内容详细介绍的是51单片机定时器的初始化步骤详细说明。
    发表于 07-03 17:42 6次下载
    51<b class='flag-5'>单片机</b>定时器的<b class='flag-5'>初始化</b>步骤详细说明

    51单片机各中断初始化及子程序模板的详细资料说明

    本文档的主要内容详细介绍的是51单片机各中断初始化及子程序模板的详细资料说明。
    发表于 06-18 17:44 10次下载
    51<b class='flag-5'>单片机</b>各中断<b class='flag-5'>初始化</b>及子程序模板的详细资料说明

    蓝桥杯单片机初始化原理和蜂鸣器关闭学习

    之前看视频什么学习什么的,我总是靓仔疑惑哈,为什么P0等于什么什么,然后P2等于什么什么,然后就初始化好了,什么玩意,现在,我知道了原理蓝桥杯的单片机和别的单片机不同之处就是在于这个初始化
    发表于 11-11 09:21 2次下载
    蓝桥杯<b class='flag-5'>单片机</b>的<b class='flag-5'>初始化</b>原理和蜂鸣器关闭学习

    关于stm8l05x系列单片机rtc初始化问题

    关于stm8l05x系列单片机rtc初始化问题在开始项目时,用到的单片机是stm8l052的单片机,为了降低功耗就要在活跃停止模式和正常运行模式之间切换,即每隔一段时间用rtc唤醒,在
    发表于 11-26 14:36 10次下载
    关于stm8l05x系列<b class='flag-5'>单片机</b>rtc<b class='flag-5'>初始化</b>问题

    单片机问题总结:MPU6050的DMP模块初始化放在线程启动之前

    单片机问题总结:MPU6050的DMP模块初始化放在RTOS线程启动之前文章目录单片机问题总结:MPU6050的DMP模块初始化放在RTOS线程启动之前问题复现问题总结问题解决问题复现
    发表于 12-06 14:06 10次下载
    <b class='flag-5'>单片机</b>问题总结:MPU6050的DMP模块<b class='flag-5'>初始化</b>放在线程启动之前

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

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

    RT-Thread自动初始化机制

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

    ADC初始化测定方法

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