请教大家个问题,很奇怪: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都是低电平亮,高电平灭。 |
评分
查看全部评分
用示波器在可疑处检查电平的变化,引脚检测不到电平的话查硬件,把PF4外接一个上拉电阻看看是否正常。或换一个主芯片刷新重新看----->这些都试过
BT-KeSampleOK - 1.zip
2018-8-16 08:31 上传
点击文件名下载附件
下载积分: ST金币 -13.91 MB, 下载次数: 2, 下载积分: ST金币 -1
如果你使用类似
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
评分
查看全部评分
评分
查看全部评分