在MCU的GPIO配置中我们经常需要预置某一 IO 上电后为某一固定电平, 如果恰好我们需要上电后的某IO为高电平, 那么在配置GPIO的流程上面需要特别注意。

配置如下: (以下问题仅在STM8 / STM32上测试获得, 其它MCU未知)。

不合理(或者说有bug)的代码初始化流程:

/* GPIO 初始化
---------------------------
* DDR : 0-输入, 1-输出
---------------------------
* DDR CR1 CR2
---------------------------
0 0 0 悬浮输入
0 1 0 上拉输入
0 0 1 中断悬浮输入
0 1 1 中断上拉输入
---------------------------
1 0 0 开漏输出
1 1 0 推挽输出
1 X 1 输出最快10MHZ
*/ void bsp_io_init(void)
{
/* PIN0 PIN1 */
1. PB_DDR = 1 << 0 | 1 << 1 ; //设置方向
2. PB_CR1 = 1 << 0 | 1 << 1 ; //
3. PB_CR2 = 0 << 0 | 0 << 1 ; //设置推挽输出
4.
5. PB_ODR = 1 << 0 | 1 << 1 ; //设置输出电平为 1
}

如上代码的用意是配置PB0 / PB1为推挽输出,并且默认输出为高电平。 但实际的上电效果如下图所示:

MCU 上电瞬间会有一个微小的低脉冲输出, 这是我们不想看到的。 正确的配置应该是先配置 ODR 寄存器, 即输出状态寄存器.然后在配置方向和控制寄存器

正确的代码初始化流程如下:

void bsp_io_init(void)
{
PB_ODR = 1 << 0 | 1 << 1 ; //设置输出电平为 1 PB_DDR = 1 << 0 | 1 << 1 ; //设置方向
PB_CR1 = 1 << 0 | 1 << 1 ; //
PB_CR2 = 0 << 0 | 0 << 1 ; //设置推挽输出 }

STM8 STM32 GPIO 细节配置问题的更多相关文章

  1. 基于STM8的GPIO操作---STM8-第一章

    1. 综诉 也许单片机在你看来是一件不太容易的事,但据我所知,单片机,无非就是控制它的GPIO口,所以可以看出,学会如何操作控制GPIO口对使用单片机来说是很重要的一件事. 在装载STM8的单片机中, ...

  2. STM8|STM32 看门狗使用

    源:STM8|STM32 看门狗使用 STM8和STM32都配备了独立看门狗,其作用之大不言而喻.以下为STM8及STM32的独立看门狗使用例: 对于STM32单片机: #define SYS_IWD ...

  3. STM8的GPIO驱动

    芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写 首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO ...

  4. STM32 GPIO 配置之ODR, BSRR, BRR 详解

    STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...

  5. STM32 GPIO外部中断总结

    一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...

  6. [stm32] GPIO及最小框架

    1.GPIO硬件结构图: 2.GPIO程序结构: 3.框架介绍: 这里的ASM是固定启动文件夹,startup_stm32f10x_hd.s表示当前stm32类型为高容量设备,当然还有md.s等. C ...

  7. 【STM32】STM32 GPIO模式理解

    stm32的GPIO的配置模式有好几种,包括: 1. 模拟输入: 2. 浮空输入: 3. 上拉输入: 4. 下拉输入: 5. 开漏输出: 6. 推挽输出: 7. 复用开漏输出: 8. 复用推挽输出 如 ...

  8. STM32 GPIO相关

    1. STM32 的 IO 作为输入的时候,可以程序设置上下拉电阻(可以不用外接上下拉电阻). 2.GPIO有四种输入模式:浮空输入.上拉输入.下拉输入.模拟输入: 3.GPIO有四种输出模式:开漏输 ...

  9. STM32 GPIO输入输出(基于HAL库)

    一.基础认识 GPIO全名为General Purpose Input Output,即通用输入输出.有时候简称为"IO口".通用,说明它是常见的.输入输出,就是说既能当输入口使用 ...

  10. 明解STM32—GPIO理论基础知识篇之基本结构

    ​ 一.前言 万物皆有源头,大家学习单片机的源头操作就是通过GPIO口点灯,GPIO作为STM32最基础的外设,也是大家最先接触的外设.当然,看似基础的GPIO,不仅仅是简单的设置好IO口,让灯亮起就 ...

随机推荐

  1. netstat 某连接的 Recv-Q(接收队列)达到500多万字节的内核参数排查

    思路: cat proc文件系统下的 sys/net 目录下所有文件,根据结果降序排序(如果打印前xx,可能会漏掉关键信息,在定位问题时需要注意,慎用过滤),根据结果使用 grep -rn xxx 找 ...

  2. ChatGPT 助力开发人员改进代码的5个方式

    近年来,在软件开发中使用人工智能和机器学习变得越来越普遍.因此,开发人员开始转向像 OpenAI 的 ChatGPT 这样的工具来简化他们的工作,提高他们的工作效率.ChatGPT是一个由 OpenA ...

  3. 洛谷 P1122 最大子树和 题解

    一道入门的树形DP. 首先我们对于数据进行有序化处理,这便于我们利用数据结构特点(可排序性)来发觉数据性质(有序.单调.子问题等等性质),以便于后续的转化.推理和处理.有序化可以"转化和创造 ...

  4. spring多数据源动态切换的实现原理及读写分离的应用

    简介 AbstractRoutingDataSource是Spring框架中的一个抽象类,可以实现多数据源的动态切换和路由,以满足复杂的业务需求和提高系统的性能.可扩展性.灵活性. 应用场景 多租户支 ...

  5. [Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势

    原文:https://www.freebuf.com/sectool/366854.html 存自己这里方便看. 0x00 前言 如何修改本地pwn文件和题目所给环境一致,从而进行调试,这是从学习堆开 ...

  6. arthas的安装及使用

    arthas的安装及使用 官方文档 安装 #1.下载 https://arthas.aliyun.com/download/latest_version?mirror=aliyun #2.将下载文件上 ...

  7. 三维模型OSGB格式轻量化压缩点云处理技术探讨

    三维模型OSGB格式轻量化压缩点云处理技术探讨 点云是一种常用的三维模型表示方法,由于其具有高精度.高保真度.易处理等优点,因此在很多领域都得到了广泛应用.但是,点云数据的存储量通常比较大,为了使点云 ...

  8. Mybatis plus配置MetaObjectHandler无效

    项目环境 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-b ...

  9. linux上搭建Nacos集群(步骤详细,linux小白也能搞定)

    (1)nacos官网:https://github.com/alibaba/nacos/releases/tag/1.2.1下载nacos安装包到window本地(后缀为tar.zip) (2)在li ...

  10. Node.js vs. Spring Boot:Hello World 性能对决,谁更快一点?

    前言: Spring Boot 在 Java 生态中备受欢迎,它是一款基于 Java 构建的轻量级服务端框架,主要用于 Web 服务.Spring Boot 的应用使得创建各类基于 Spring 的企 ...