你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教专家,STM8L052的GPIO口做输入检测,为什么不能反应管脚实际电压变化?

[复制链接]
Andy-li 提问时间:2025-8-13 18:20 / 未解决

老产品维护遇到问题,向各位专家请教!

老产品使用STM8L052单片机,要增加一点功能,需要用GPIO口做外部开关状态检测,用IAR开发代码做验证,选择PG2做输入,分别设置为浮空输入、上拉输入模式;PG2管脚输入端模拟高电压3.3v、低电压0v,但是发现的现象:

1.PG2管脚输入端模拟电压的高低变化,但是读取的PG2输入状态不变化;

2.用IAR做debug时查看PG_DDR寄存器的值,DDR2值为0,确认PG2是输入状态;查看PG_IDR寄存器的值,IDR2值或为0或为1,不随PG2输入端电压的模拟而变化;

3.当PG2输入端模拟是3.3v时,启动debug,IDR2值为1;当PG2输入端模拟是0v时,启动debug,IDR2值为0。


附代码如下:

void LED1_Init()
{
  GPIO_Init(GPIOC , GPIO_Pin_0 , GPIO_Mode_Out_PP_Low_Fast);  //初始化指示LED
}

void KEY_Init()
{
  GPIO_Init(GPIOG , GPIO_Pin_2 , GPIO_Mode_In_PU_No_IT);     //初始化KEY,设置为上拉输入模式

}
void main()
{
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //设置内部时钟为1分频 = 16Mhz 作为系统时钟
  LED1_Init();   
  KEY_Init();   
  while(1)
  {                        
    if(GPIO_ReadInputDataBit(GPIOG , GPIO_Pin_2) == SET)
    {
      delay(10);            
      if(GPIO_ReadInputDataBit(GPIOG , GPIO_Pin_2) == SET)
      {
         delay(10);                                          
         GPIO_ResetBits(GPIOC , GPIO_Pin_0);  
      }
    }
    else
    {
       delay(10); 
       if(GPIO_ReadInputDataBit(GPIOG , GPIO_Pin_2) == RESET)
         {
             GPIO_SetBits(GPIOC , GPIO_Pin_0);
          }
    }
  }  
}
收藏 评论0 发布时间:2025-8-13 18:20

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版