hqw 发表于 2018-8-15 16:34:40

stm8s005k6 读取引脚电平出错

请教大家个问题,很奇怪:stm8s005k6,IAR

   GPIO_Init(port_BTLED0, pin_BTLED0,GPIO_MODE_IN_PU_NO_IT);//BTLED0
                    void AUX_to_BT(void)       {             GPIO_WriteHigh(port_LED467,pin_LED467);                 if(GPIO_ReadInputPin(port_BTLED0, pin_BTLED0)==0)            {             ;            }            else//确保在切换到BT前,是处在AUX模式            {                   GPIO_WriteHigh(port_LED125,pin_LED125);                               BTenable_Pulse(3);//打开蓝牙模块                      GPIO_WriteLow(port_LED125,pin_LED125); ;               }                                                                        GPIO_WriteLow(port_LED467,pin_LED467);                    }             开始运行,PC5能正确检测LED0脚的高电平,能去运行BTenable_Pulse(3); 但后来,明明LED0脚的已经是高电平(用万用表和示波器监看),并且程序确认已进入 void AUX_to_BT(void)(LED467在进入void AUX_to_BT(void)里面灭,退出时亮,这点很明确实无误)      但产生异常时,LED0脚的已经是高电平,但就是运行不到BTenable_Pulse(3);每次都LED467先灭再恢复亮,但LED125一直每灭过。      LED467和LED125都是低电平亮,高电平灭。          


feixiang20 发表于 2018-8-15 23:19:18

用示波器在可疑处检查电平的变化,引脚检测不到电平的话查硬件,把PF4外接一个上拉电阻看看是否正常。或换一个主芯片刷新重新看

hqw 发表于 2018-8-16 08:32:14


用示波器在可疑处检查电平的变化,引脚检测不到电平的话查硬件,把PF4外接一个上拉电阻看看是否正常。或换一个主芯片刷新重新看----->这些都试过

liu553824989 发表于 2018-8-17 09:18:54

再一次回答一下,我都是测试过的。
如果你使用类似
if(GPIO_ReadInputPin(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7) == SET)
{
.....
}
这样的判断代码,你会发现永远的不到你想要的。
原因是BitStatus是个enum类型,其实而enum从某个层面上说它是与int类型相似。
所以你用
BitStatus test = GPIO_ReadInputPin(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7) ;
你会发现,test值是个8位的数,而非类似BOOL的0或1.

常上论坛,这个事不是第一次说了https://www.stmcu.org.cn/module/forum/thread-616937-2-1.html

skyi 发表于 2018-8-17 09:26:54

有没有试过修改pin_BTLED0为浮空输入
页: [1]
查看完整版本: stm8s005k6 读取引脚电平出错