读到低电平后再读到高电平就计数减一,软真调试没问题,为什么硬件就出错呢?

2019-10-15 06:15发布

功能:
外部给PE4高低电平,读取PE4,读到低电平后再读到高电平就计数减一
代码:
u8 a=5;   //计数初始值为5

int main(void)
{
     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
     uart_init(115200);   
     delay_init();
     LED_Init();
     LCD_Init();
     LCD_ShowString(30,40,210,24,24,"rest:");
     LCD_ShowNum(0,80,a,24,24);   
     while(1)
        {
            if(a==0)        //当a=0时亮DS1提示,按下KEY1则灭灯
            {
                GPIO_ResetBits(GPIOE,GPIO_Pin_5);
                if(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3))
                {
                    GPIO_SetBits(GPIOE,GPIO_Pin_5);
                    break;
                }
            }
            else
            {
                if(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))        //读取到低电平
                {
                    GPIO_ResetBits(GPIOB,GPIO_Pin_5);                  //亮灯DS0
                    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))    //读取到高电平
                    {
                        a=a-1;                                                      //计数减一
                        LCD_ShowNum(0,80,a,24,24);                       //LCD屏上显示此时的数值
                        GPIO_SetBits(GPIOB,GPIO_Pin_5);                 //灭灯DS0
                    }
                }
                else
                {
                    GPIO_SetBits(GPIOB,GPIO_Pin_5);
                }
            }
        }
}
问题:
烧到开发板上给PE4高低电平,LCD屏上有时候会减一,减一规律不定。
第一次:成功 LCD:4            第二次:成功 LCD:4               第三次:......
            成功 LCD:3                        失败 LCD:4
            失败 LCD:3                        成功 LCD:3
            成功 LCD:2                        成功 LCD:2
            失败 LCD:2                        失败 LCD:2
            成功 LCD:1                        成功 LCD:1
            成功 LCD:0                        成功 LCD:0

但是在软件仿真中还是准确计数的。

求助。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
正正杨
2019-10-15 14:43
东北小辉辉 发表于 2016-12-29 16:37
你外部给PE4的电平是怎么来的,是传感器给的还是自己用手模拟的?
if(!GPIO_ReadInputDataBit(GPIOE,GPIO_ ...

外部接的是光电开关。检测到有挡光后会持续低电平,无挡光是高电平。
我是要获取到有下降沿然后又有上升沿就计数减一。
本来打算用pwm但是不要知道低电平持续时间就放弃了。
break是因为计数到0后要求断另一个设备的电,我还不会就暂时先这样模拟了。

一周热门 更多>