STM32/GD32学习指南-踩坑之(四)GPIO作为简单IO,配置为输出模式时初始状态的注意事项

6 篇文章 0 订阅
2 篇文章 0 订阅

无论是GD32还是STM32,当GPIO配置为输出模式时,初始化完成后,都有一个初始的输出状态,有的可能时高电平,有的可能是低电平,不配置的话,可能初始化后一瞬间的上升或下降沿信号的输出,会对一些外围器件产生期望之外的操作等

例如如下的GPIO初始化的操作代码

当初始化只配置了时钟和输出参数时,用示波器查看波形,初始化一瞬间会有一个2ms的低电平,然后变为高电平,如果有哪个外设连接到该GPIO并且为低电平或下降沿复位的话,很有可能该外设就被复位掉了。

/**
  *功能:初始化GPIO参数
  *入参1:GPIO号
  *返回值:无
  */
void gd_gpio_init (uint32_t gpioNum, uint32_t gpio_mode, uint32_t gpio_pupd)
{
    /* 初始化GPIO时钟 */
    rcu_periph_clock_enable(GPIO_CLK[gpioNum]);

    /* 配置GPIO模式和输出选项 */ 
    gpio_mode_set(GPIO_PORT[gpioNum], gpio_mode, gpio_pupd,GPIO_PIN[gpioNum]);
    gpio_output_options_set(GPIO_PORT[gpioNum], GPIO_OTYPE_PP,                   
          GPIO_OSPEED_50MHZ,GPIO_PIN[gpioNum]);
}

 所有GPIO配置为输出模式时,初始化后需要给一个确定的输出状态,GPIO_BOP为置高,GPIO_BC为置低

/**
  *功能:GPIO输出置1
  *入参1:GPIO号
  *返回值:无
  */
void gd_gpio_on(uint32_t gpioNum)
{
    GPIO_BOP(GPIO_PORT[gpioNum]) = GPIO_PIN[gpioNum];
}

/**
  *功能:GPIO输出置0
  *入参1:GPIO号
  *返回值:无
  */
void gd_gpio_off(uint32_t gpioNum)
{
    GPIO_BC(GPIO_PORT[gpioNum]) = GPIO_PIN[gpioNum];
}

过程中还这样试过:

在初始化代码前,先将GPIO的输出寄存器置高,再对GPIO初始化,用示波器测量,低电平的时间从2ms变成了1ms,时间缩短了,对应控制的外设确实没有被复位,但是还是有风险

所以建议,对与控制外设低电平复位的GPIO,如果不想上电被再复位一次,建议哪里用到复位功能,再进行初始化,然后通过GPIO_BC置低,再延时即可,不要上电就初始化对应的GPIO

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

披着假发的程序唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值