zfeng45 发表于 2019-5-14 08:48

如何在以30s周期循环检测外部输入

各位大虾,初玩STM32,用的芯片F103RCT6,现手头有个程序不知如何设计在以30s周期循环检测外部输入,请各位指教。
具体情况如下:STM32检测外部有高电平+24V输入后,查询外部30个模块的输出状态,若其中任一模块有高电平+24V输出,则报警灯闪烁(间隔1s),持续以30s的时间窗口周期去查询30个模块的输出状态,直至任一模块无高电平输出,则报警灯停止闪烁。附:模块的输出状态其实就是给STM32引脚输入高电平。

ayb_ice 发表于 2019-5-15 10:04

        bit g_bAlarmFlag;
        bit g_bFlag30Sec;
        bit g_bFlag1Sec;
       
        while (1)
        {
                if (g_bFlag30Sec)//定时中断设置此标志,g_bFlag30Sec
                {
                        g_bFlag30Sec = 0;
                       
                        u32 uiAllFlag = ReadAllInput();
                        g_bAlarmFlag = uiAllFlag != 0?1:0;
                }
               
                if (g_bAlarmFlag)
                {
                        if (g_bFlag1Sec)//定时中断维护此标志,g_bFlag1Sec
                        {
                                ALARM_LED = 1;
                        }
                        else
                        {
                                ALARM_LED = 0;
                        }
                }
                else
                {
                        ALARM_LED = 0;
                }
        }

wono01 发表于 2019-5-15 10:17

没看明白,你是不知道如何计时30s还是啥?
定时器读取gpio状态,然后轮询不就行了吗?如果检测到高,置位标志位如一个unsigned int,第几bit表示第几个管脚,然后继续轮询,发现从1变成0了就清除标志位,标志位为空时不输出,非空时1s输出一个高电平
页: [1]
查看完整版本: 如何在以30s周期循环检测外部输入