
老产品维护遇到问题,向各位专家请教! 老产品使用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。 补充一点:在网上搜索了好长时间,没有收获。DeepSeek说是要加GPIO口的时钟允许,语句如下: 但是在stm8l15x_clk.h头文件里,这个函数的第一个形参的枚举类型数据,只有如:CLK_Peripheral_TIM1、CLK_Peripheral_USART1、CLK_Peripheral_SPI1等,不包含GPIO比如CLK_Peripheral_GPIOG。 附代码如下:
|
各位大佬们多提提宝贵建议定位根本原因,跪谢。STM32L452 在未知情况下打开了读保护RDP?MCU无法运行,只有解除读保护后重新烧录固件
STM32H563 RTC无法进行时间赋值
基于NUCLEO-WL55JC1开发板当中的CLASSA节点实现FSK调制的转变
请问如何在下载程序时保护flash中的用户数据不被覆盖?
STM32G474VET6如何配置HRTIM的中心对齐模式
stm32g431rbt怎么显示汉字
stm32h725
非对称PWM的问题
STM32H723 TIM1输出三相50%的占空比,TIM_CH3的输出上升沿略比TIM_CH1和TIM_CH2超前,这是哪里配置有问题吗
视频监控方面的学习。
STM8、或说平常的MCU的GPIO只能区分高低电平,不能直接测量模拟电压。要测量电压,需配合ADC功能,相关管脚配置为模拟输入。
[md]感谢您的回答!是我表达欠清晰,这个不是测量模拟电压。做验证时,通过外部4.7K上拉电阻和接地导线,给PG2口输入的就是直流电压3.3V或者0V,高和低两种电压状态,但是单片机无法跟随识别高、低状态。
[md]引脚配置正确、引脚外部接了上拉电阻,按理不应该出现无法获得引脚电平的情况。会不会是此芯片的这个引脚已经损坏?
[md]检查下管脚配置,是否配置为输入了。有无其它误会,比方管脚搞错了?
从最初问题描述的第三点发现上看,结论是正确的哦。
Debug 下看到了IO 高低的状态~~
是的,您说的没错!PC0驱动的led灯辅助了判断,PG2只能在启动debug的时候读取判断输入口电压状态,后面就不行了。
换了新的备板测试,问题依旧,说明MCU没坏。这个看起来很入门级的问题,还真难住了
您是说在调试下,观测结果正常。 运行时结果就不对了么?
我是说,STM8L052刚启动能读取到PG2状态时,PC0驱动LED灯亮或灭,也是符合代码逻辑的。
那你后面是收到切换高低,然后看到LED的结果不对么?
如果是手动切换,要考虑软件去抖动。
对于按键信息指读取一次的话,是不太可靠的。
另外注意这个引脚要始终保持输入引脚模式,不要代码中间误动作修改了模式。
是的,就是因为看到led灯状态不对,所以才去查看IDR寄存器,发现寄存器数据不会跟随PG2的电压变化而变化。这个还不是抖动的问题,就算有抖动,稳定了也应该有变化。
从附录的代码可以看到功能非常简单。