你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32程序设计中的超时处理

[复制链接]
与龙共舞 提问时间:2018-5-30 10:40 /
有一个问题 比较迷糊 今天遇到一个具体的情况 表达出来 求助。
现有业务逻辑:两个STM32的设备通讯,一个是门禁产品A,一个是来测试门禁的B,两者连通。
一个 线是门内开门,我B拉低电平,发出开门信号,A应该在relay做翻转响应。
QQ截图20180530102107.png
逻辑在B发出信号以后有一个堵塞,也就是超时等待。
我写了个函数
  1. #define KEYCOUNT 1000
  2. #define Enableopendoor()   GPIO_SetBits(KEYGPIO ,KEYGPIOPIN)
  3. #define Disableopendoor()  GPIO_ResetBits(KEYGPIO ,KEYGPIOPIN)
  4. #define Is_relay_on()
  5. void Test_Key_Open(void)
  6. {
  7.         int count=0;
  8.         short tem=0;
  9.         while(count<KEYCOUNT)
  10.         {
  11.                 //拉低电平 执行开门
  12.                 Enableopendoor();
  13.                 //堵塞等待是否响应
  14.                 while(Is_relay_on())
  15.                 {
  16.                   tem++;
  17.                         if(tem>100)//问题就在这里
  18.                                 break;
  19.                 }
  20.                 //响应了
  21.           if(Is_relay_on())
  22.                 {
  23.                    //开门成功
  24.                         printf("sucess");
  25.                 }
  26.                 //超时了没响应
  27.                 else
  28.                 {
  29.                    //开门失败
  30.                         printf("fail");
  31.                 }
  32.                 //拉高电平 不在按键
  33.                 Disableopendoor();
  34.                 count++;
  35.         }
  36. }
复制代码
我的问题就是堵塞的时候:
while(Is_relay_on())
{
tem++;
if(tem>100)
break;
}
我的tem++到100 一共是等待多久呢?
(晶振8M)


另外我UCOS也可以加入
    OSTimeDlyHMSM(0, 0, 0,1);


while(Is_relay_on())
{
   OSTimeDlyHMSM(0, 0, 0,1);
tem++;
if(tem>100)
break;
}
这样我就是知道是等了100个1MS 这样好吗?  
收藏 评论5 发布时间:2018-5-30 10:40

举报

5个回答
TLLED 回答时间:2018-5-30 11:22:12
时间要求特别严格的话,我觉得使用定时器来控制会比较好。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-5-30 23:44:16
要不你修改堵塞循环语句里的参数看看有什么变化

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

weiwei4 回答时间:2018-5-31 08:52:42
延时如果很小,用堵塞来做还可以
长一点的延时还是必须用定时器来做,定时准确而且不影响其它程序运行

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

回答时间:2018-5-31 09:00:42
ucos的是1ms,100次也就是100ms。如果不用就看总线时钟是多少了,103是72Mhz,再算机器周期,再算++的执行周期。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

anobodykey 回答时间:2018-5-31 09:32:23
如果要知道等待时间,肯定就不能用无限循环了,就得用定时器或者滴答时钟了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版