打印
[STM32]

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

[复制链接]
618|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zfeng45|  楼主 | 2019-5-14 08:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾,初玩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;
                }
        }

使用特权

评论回复
评论
ayb_ice 2019-5-17 14:35 回复TA
@zfeng45 :通过报警标志来控制灯状态,只要报警标志一直有效就可以了 示例如下 //定时中断 void ISR_Tx(void) { static u8 ucPreFlag30Sec; static u8 ucPreFlag1Sec; if (++ucPreFlag30Sec >= xx) { ucPreFlag30Sec = 0; g_bFlag30Sec = 1;//??? } if (++ucPreFlag1Sec >= xx) { ucPreFlag1Sec = 0; g_bFlag1Sec = !g_bFlag1Sec;//??? } } 然后再配合我之前的程序 
zfeng45 2019-5-17 14:05 回复TA
您好,我编写的程序遇到这么一个问题,当定时5s后,led闪烁几次就结束,不应该是一直闪烁到等待下一个5s吗?不清楚问题出在哪?请指教 void TIM2_IRQHandler(void) { static uint16_t tim_cnt = 0; //判断TIM3更新中断是否发生 if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET) { TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除标志位 time_flag=0; ...  
板凳
wono01| | 2019-5-15 10:17 | 只看该作者
没看明白,你是不知道如何计时30s还是啥?
定时器读取gpio状态,然后轮询不就行了吗?如果检测到高,置位标志位如一个unsigned int,第几bit表示第几个管脚,然后继续轮询,发现从1变成0了就清除标志位,标志位为空时不输出,非空时1s输出一个高电平

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

15

帖子

0

粉丝