首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

STM32G070CBT6上的GPIO出现奇怪的问题-寄存器显示ODR寄存器中的输出值,但管脚电平不切换

STM32G070CBT6是一款基于ARM Cortex-M0+内核的微控制器,它具有丰富的外设资源,包括通用输入输出(GPIO)端口。在使用GPIO时,有时可能会遇到一些奇怪的问题,比如寄存器显示ODR寄存器中的输出值,但是管脚电平却没有切换的情况。

这种问题可能有多种原因,下面我将从硬件和软件两个方面给出一些可能的解释和解决方法。

硬件方面:

  1. 电源问题:检查供电电压是否稳定,确保电源电压符合芯片的工作要求。
  2. 连接问题:检查GPIO引脚的连接是否正确,确保引脚与外部电路连接良好。
  3. 外部电路问题:检查外部电路是否存在短路、开路等问题,确保外部电路正常工作。

软件方面:

  1. GPIO配置错误:检查GPIO的配置是否正确,包括引脚模式、速度、上下拉等设置。
  2. 中断配置错误:如果使用了中断功能,检查中断配置是否正确,包括中断使能、优先级等设置。
  3. 软件逻辑错误:检查代码逻辑是否正确,是否有其他地方对GPIO进行了修改,导致出现奇怪的问题。
  4. 软件延时问题:在对GPIO进行操作时,可能需要适当的延时,以确保操作完成。检查是否存在延时不足或过长的情况。

对于STM32G070CBT6上的GPIO问题,腾讯云提供了一系列与物联网相关的产品和服务,可以帮助开发者快速构建物联网应用。其中,物联网开发平台(IoT Hub)可以用于连接和管理物联网设备,物联网边缘计算(IoT Edge)可以实现设备数据的本地处理和分析,物联网操作系统(IoT OS)可以提供轻量级的操作系统支持等。具体产品介绍和相关链接如下:

  1. 物联网开发平台(IoT Hub):提供设备连接、数据传输、设备管理等功能。了解更多:物联网开发平台
  2. 物联网边缘计算(IoT Edge):支持在设备端进行数据处理和分析,减少数据传输和云端计算的压力。了解更多:物联网边缘计算
  3. 物联网操作系统(IoT OS):提供轻量级的操作系统支持,适用于资源受限的物联网设备。了解更多:物联网操作系统

希望以上解答对您有帮助,如果还有其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

流水灯(标准库函数

输出模式(推挽/开漏) 在输出模式,推挽模式时双 MOS 管以轮流方式工作,输出数据寄存器 GPIOx_ODR可控制 I/O 输出高低电平。...此处输出速度即 I/O 支持高低电平状态最高切换频率,支持频率越高,功耗越大,如果功耗要求不严格,把速度设置成最大即可。...复用功能(推挽/开漏) 复用功能模式输出使能,输出速度可配置,可工作在开漏及推挽模式,但是输出信号源于其它外设,输出数据寄存器GPIOx_ODR 无效;输入可用,通过输入数据寄存器可获取 I/O 实际状态...,一般直接用外设寄存器来获取该数据信号。...GPIO_Init()函数就是配置引脚四个位,再将四个位写入到对应引脚寄存器。 库函数此函数代码如下图。 ? 函数分析: 确定currentmode

62730
  • GPIO基本知识

    开漏输出模式一般应用在 I2C、SMBUS 通讯等需要“线与”功能总线电路。还可以用在电平匹配场合,就如上面说输出 5V 一样。...推挽输出模式一般应用在输出电平为 0-3.3V 而且需要高速切换开关状态场合。除了必须要用开漏输出模式场合,我们一般选择推挽输出模式。...(4)、输出数据寄存器双 MOS 管结构电路输入信号,是由 GPIO输出数据寄存器GPIOx_ODR”提供,因此我们通过修改输出数据寄存器就可以修改 GPIO 引脚输出电平。...而“置位/复位寄存器 GPIOx_BSRR”可以通过修改输出数据寄存器从而影响电路输出。...四种最大输出速度:2MHZ25MHZ50MHZ1000MHZ五、GPIO8种模式含义输入浮空:浮空就是逻辑器件与引脚即接高电平,也接低电平

    1.2K30

    STM32-GPIO模式+寄存器点灯

    除此之外,还用在电平匹配场合,如需要输出5 伏电平,就可以在外部接一个拉电阻,拉电源为5 伏,并且把GPIO 设置为开漏模式,当输出高阻态时,由拉电阻和电源向外输出5 伏电平,具体见图STM32...拉了 前面提到双MOS 管结构电路输入信号,是由GPIO输出数据寄存器GPIOx_ODR”提供,因此我们通过修改输出数据寄存器就可以修改GPIO 引脚输出电平。...“输入数据寄存器GPIOx_IDR”,通过读取该寄存器就可以了解GPIO 引脚电平状态。...输出模式(推挽/开漏) 在输出模式,推挽模式时双MOS 管以轮流方式工作,输出数据寄存器GPIOx_ODR 可控制I/O输出高低电平。...为了一步到位,我们在这里直接操作ODR 寄存器来控制GPIO 电平

    66530

    stm32学习笔记之GPIO功能框图分析

    除此之外,还用在电平匹配场合,如需要输出5 伏电平,就可以在外部接一个拉电阻,拉电源为5 伏,并且把GPIO 设置为开漏模式,当输出高阻态时,由拉电阻和电源向外输出5 伏电平。   ...输出数据寄存器   前面提到双MOS 管结构电路输入信号, 是由GPIO输出数据寄存器GPIOx_ODR”提供,因此我们通过修改输出数据寄存器就可以修改GPIO 引脚输出电平。...从其它外设引出来“复用功能输出信号”与GPIO本身数据据寄存器都连接到双MOS 管结构输入,通过图中梯形结构作为开关切换选择。   ...输出模式(推挽/开漏)   在输出模式,推挽模式时双MOS 管以轮流方式工作,输出数据寄存器GPIOx_ODR可控制I/O 输出高低电平。...实际状态,一般直接用外设寄存器来获取该数据信号。

    1.5K20

    详细介绍如何读懂STM32开发板电路原理图以及芯片文档和开发手册,并编写一个测试程序:点亮一个LED灯「建议收藏」

    注意这个挂设怎么区分,首先GPIO端口C实则是一组GPIO管脚组成,只不过该管脚负责PC特殊功能寄存器I/操作,其他GPIO管脚负责其它特殊功能寄存器,列如PE,PB等,ARM为了加以区分,让开发人员更易读...,但是同时也给开发人员带来了研究电路原理图和代码量增长问题,其他开发板一般都是找到物理地址,发送电平使其芯片工作,也就写成了一个简单硬件驱动!...(图4.0) 那么在工作情况GPIO端口会不停向这些芯片发送低电平(取决于二极管极性),就出现了即使这个模块不用还是一直通电,浪费功耗情况。...答:PC寄存器有8个bit位,有GPIO端口CI/P管脚来控制,那么GPIO端口C总共有8个管脚对应着,GPIO端口向PC寄存器写入某个电平都会改变LED芯片工作。...注意STM32推挽输出只需要设置一个bit位即可,上面介绍也说了。推挽输出三极管一个工作则另外一个就会导通,另外一个导通则另一个就会工作!

    2.3K51

    【STM32】HAL库 STM32CubeMX教程三—-外部中断(HAL库GPIO讲解)

    1 点击RCC 2高速时钟(HSE)选择外部晶振 3 软件自动配置管脚 1.3GPIO初始化 LED:4个GPIO_OUTPUT (输出模式) 按键:2个GPIO_EXITx(外部中断模式) 1 点击对应管脚...2 设置对应模式 GPIO各种模式设置 GPIO output level 引脚电平设置 高/低 GPIO mode GPIO模式 推挽输出/开漏输出 GPIO Pull-up...GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 功能:读取引脚电平状态、函数返回为0或1 实例:HAL_GPIO_ReadPin...HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 功能:锁住引脚电平,比如说一个管脚的当前状态是1,当这个管脚电平变化时保持锁定时...这7个寄存器分别为: GPIOx_CRL:端口配置低寄存器(32位) GPIOx_CRH:端口配置高寄存器(32位) GPIOx_IDR:端口输入寄存器(32位) GPIOx_ODR:端口输出寄存器(32

    1.5K10

    【STM32H7教程】第15章 STM32H7GPIO基础知识(重要)

    通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。   GPIO速度等级设置。   输入状态:浮空,拉/下拉,模拟。  ...通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。   通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR位操作。  ...所以如果对延时有要求,则建议用下降沿输出。 可以将多个开漏输出连接到一条线上。通过一只拉电阻,在增加任何器件情况下,形成“与逻辑”关系,即“线与”。...此电流消耗可通过使用静态特性给出拉 / 下拉电阻值简单算出。   对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。  ...任何浮空输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关电流消耗,它们必须配置为模拟模式,或内部强制为确定数字

    1.2K30

    STM32寄存器讲解

    GPIO 外设为例,GPIO是通用输入输出端口简称,简单来说就是 STM32 可控制引脚,基本功能是控制引脚输出电平或者低电平。...这里“复位”是将该位设置为 0 意思,而“置位”表示将该位设置为1;说明 ODRx是另一个寄存器寄存器位,我们只需要知道 ODRx位为 1时候,对应引脚 x 输出电平,为 0 时候对应引脚输出电平即可...所以,如果对 BR0 写入“1”的话,那么 GPIOx 第 0 个引脚就会输出“低电平”,但是对 BR0 写入“0”的话,却不会影响 ODR0 位,所以引脚电平不会改变。...->ODR =0xFFFF; //修改 GPIOB_ODR 寄存器 int32_t temp; temp = GPIOB->IDR; //读取 GPIOB_IDR 寄存器到变量 temp *访问...GPIOA->IDR; //读取 GPIOA_IDR 寄存器到变量 temp 这里我们仅是以 GPIO 这个外设为例,给大家讲解了 C 语言对寄存器封装。

    1.6K22

    单片机使用汇编开发简单介绍

    B起始地址为0x4001 0800,再仔细查看《参考手册》GPIO寄存器部分,可知寄存器GPIOx_CRL(偏移地址:0x00)第0:1位(MODEy),设置为1则GPIO B0为输出寄存器GPIOx_ODR...RCC_APB2ENR第3位(IOPBEN)为1,使能GPIO B组时钟; (1)5行:将0x40021018(RCC_APB2ENR基地址+偏移地址)放入内部寄存器R0; (2)6行:将0x40021018...地址(此时RCCC_APB2ENR寄存器),放入内部寄存器R1; (3)7行:将R1Bit3设置为1,并将设置后结果放入R1; (4)8行:将R1内容,放入R0所指向地址,也就是将修改后数据放入...RCCC_APB2ENR寄存器; 10~14行:设置外部寄存器GPIOB_ CRL第0:1位(MODE)为1,让GPIO B0为输出模式; 16~30行:设置外部寄存器GPIOB_ODR第0位(ODR...)先后为1和0,让GPIO B0为输出高、低电平; 32~40行:循环减R0实现延时效果; 以上汇编代码就实现了对开发板三色灯红色灯交替闪烁效果,读者可以打开配套资料“5_程序源码\0_单片机开发模式发展

    38720

    单片机STM32学习笔记之寄存器映射详解

    1 // GPIOB 端口全部输出电平   2 #define GPIOB_ODR (unsigned int*)(GPIOB_BASE+0x0C)   3 * GPIOB_ODR = 0xFF;...以GPIO 外设为例,GPIO是通用输入输出端口简称,简单来说就是STM32 可控制引脚,基本功能是控制引脚输出电平或者低电平。...其他GPIO端口以此类推即可。   ③寄存器位表   紧接着是本寄存器位表,表列出它0-31 位名称及权限。...这里“复位”是将该位设置为0 意思,而“置位”表示将该位设置为1;说明ODRx 是另一个寄存器寄存器位,我们只需要知道ODRx 位为1 时候,对应引脚x 输出电平,为0 时候对应引脚输出电平即可...所以,如果对BR0 写入“1”的话,那么GPIOx 第0 个引脚就会输出“低电平”,但是对BR0 写入“0”的话,却不会影响ODR0 位,所以引   脚电平不会改变。

    2K50

    RISCV 汇编语言程序设计 (1) 跑马灯设计

    知识点回顾: RISC-V 通用寄存器部分:CPU一共有32个通用寄存器,每个通用寄存器宽为32位。 因为LED在开发板采用共阳极方式设计,所以FPGA管脚为低电平时LED点亮。...当方向寄存器为0时(IO_dir),地址0xF000_0000保存32bit就是GPIO管脚输出。 更改0xF000_0000等于更改了GPIO输出。...该每一位都对应一个gpio管脚输出。...理论上一个地址可以控制32个gpio管脚,但是实际在开发板只能控制8个管脚,因为硬件只给cpu留了8个管脚资源,在该cpu0xf000_0000地址只有低8位是有用。...理论输出模式下我们依然可以读取一个gpio端口,但是因为是输出模式,读取会是刚才输出

    1.2K30

    嵌入式 C 语言(下)

    位运算 位运算是指二进制位之间运算。在嵌入式系统设计,常常要处理二进制问题,例如将某个寄存器某一个位置1或者0,将数据左移5位等,常用位运算符如表 5.3.1 所示。...清零或置1 在嵌入式,经常使用位预算符实现清零或置1。 例如,MCUODR寄存器控制引脚输出电平高低,寄存器为32位,每位控制一个引脚电平。...假设需要控制GPIOB1号引脚输出电平高低,设置该寄存器第0位为1,输出电平,设置该寄存器第0位为0,输出电平。...这就实现了,只将GPIO_ODR第0位清0,其它位保持不变效果,实现了单独控制对应引脚电平输出低。...这就实现了,只将GPIO_ODR第0位置1,其它位保持不变效果,实现了单独控制对应引脚电平输出高。

    1.1K20

    GPIO 概述

    GPIO 概述 GPIO(General-purpose input/output)即通用型输入输出,用于控制芯片引脚数字输入和数字输出。...通常,GPIO 控制器通过分组方式管理所有 GPIO 管脚,每组 GPIO 有一个或多个寄存器与之关联,通过读写寄存器完成对 GPIO 管脚操作。...GPIO 是芯片一根能完成多种功能管脚,用户可以通过 GPIO 口和硬件进行数据交互(如UART),控制硬件工作(如 LED,蜂鸣器等),读取硬件工作状态信号(如中断信号)等。...GPIO 接口定义了操作 GPIO 管脚标准方法集合,包括: 设置管脚方向:方向可以是输入或者输出(暂不支持高阻态) 读写管脚电平电平可以是低电平或高电平 设置管脚中断服务函数:设置一个管脚中断响应函数...代码功能:定义 GPIO_00 号口为输出模式且输出电平

    1.2K40

    OpenHarmony驱动子系统开发—GPIO接口

    通常,GPIO控制器通过分组方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚操作。...GPIO接口定义了操作GPIO管脚标准方法集合,包括:设置管脚方向: 方向可以是输入或者输出(暂不支持高阻态)读写管脚电平电平可以是低电平或高电平设置管脚中断服务函数:设置一个管脚中断响应函数...,以及中断触发方式使能和禁止管脚中断:禁止或使能管脚中断GPIO接口定义在base/iot_hardware/peripheral/interfaces/kits/iot_gpio.h文件接口说明功能分类...IoTGpioSetOutputVal 设置管脚输出电平 GPIO读写 IoTGpioGetOutputVal 读取管脚输出电平...设置管脚使能 配置GPIO电阻拉/下拉IotIoGetPull 获取管脚上拉/下拉 配置GPIO电阻拉/下拉IotIoSetPull

    6300

    东芝MCU实现位带操作

    即如果要改写某个寄存器某一位,通过改写这一位映射地址即可。东芝TT_M3HQ开发板也是ARM CM3MCU,实现了位带操作,就可以如同51单片机控制GPIO口一样方便。...在txz_gpio.c和txz_gpio.h两个库文件,我们可以了解到写函数和读函数使用方法。...写函数: gpio_t port; //PK4输出电平 gpio_write_bit(&port, GPIO_PORT_K, GPIO_PORT_4, GPIO_Mode_DATA, GPIO_PIN_RESET...); //PK4输出电平 gpio_write_bit(&port, GPIO_PORT_K, GPIO_PORT_4, GPIO_Mode_DATA, GPIO_PIN_SET); 读函数: //...通过查看官方txz_gpio.c库文件输出和输入函数实现,可以看出是使用位带方式,但是看着不是很简洁,有没有更简单一些实现方法呢?

    55220

    第20课 SPI协议详解及裸机程序开发分析

    首先CS0先拉低选中SPI Flash,0x56二进制就是0b0101 0110,因此在每个SCK时钟周期,DO输出对应电平。 SPI Flash会在每个时钟周期上升沿读取D0电平。...在SPI协议,有两个来确定SPI模式。...,默认是发出SPIFlashWriteEnable()后,即可写状态寄存器为了确保万无一失,还是手动在将SRP1和SRP2设置为0,即将状态寄存器1最高位清零和状态寄存器最低位清零: ?...ADC 这节我们在OLED显示ADC电压,通过调节可调电阻,让ADC在屏幕不断变化。...MINI2440和TQ2440SPI管脚是完全一样,因此只需移植一个,两者就通用了,先移植GPIO模式版本,复制前面 04th_spi_i2c_adc_jz2440_ok_020_005 里代码

    1K40

    【STM32H7教程】第17章 STM32H7之GPIOHAL库API

    17.2 GPIO涉及到寄存器 GPIO外设涉及到寄存器比较少,也容易理解,推荐大家阅读GPIO源码时候将参考手册对应寄存器功能做一个了解。...使用GPIOBSRR寄存器进行设置,使用这个寄存器好处是支持原子操作,由硬件支持。原子操作含义是操作过程不会被中断打断,而我们使用GPIO另一个设置输出寄存ODR是会被中断打断。...第3个参数用于设置引脚输出电平还是低电平GPIO_PIN_RESET表示低电平GPIO_PIN_SET表示高电平。 使用举例: 此函数使用比较简单,需要调用时候直接调用即可。...此函数用于设置引脚电平翻转,使用GPIOODR寄存器进行设置。...另外注意下面三个问题:   系统电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。

    1.5K30

    为你STM32芯片手写一个外设库

    后面的偏移我觉得是一种相对地址,基址+变址,就好像是数组一样,只要找到首元素就行。 x是一个占位符号,后面是可以填入,这个也说明,GPIO每一个都有这样寄存器。...注意是有一个地址叫偏移地址,是相对于GPIO这个外设基地址偏移量 在28页 这就是位表 紧接着是本寄存器位表,表列出它0-31 位名称及权限。...这里“复位”是将该位设置为0 意思,而“置位”表示将该位设置为1;说明ODRx 是另一个寄存器寄存器位,我们只需要知道ODRx 位为1 时候,对应引脚x 输出电平,为0 时候对应引脚输出电平即可...所以,如果对BR0 写入“1”的话,那么GPIOx 第0 个引脚就会输出“低电平”,但是对BR0 写入“0”的话,却不会影响ODR0 位,所以引脚电平不会改变。...要想该引脚输出“高电平”,就需要对“BS0”位写入“1”,寄存器位BSy 与BRy 是相反操作。

    48730
    领券