Garfieldang 发表于 2017-11-19 16:27:11

关于GOKIT2的二次开发----定时开关功能的问题

         本人是一名新手开发者,拿到GOKIT2的开发板后向论坛里的前辈们学习了下二次开发。目前已经实现了控制A1口输出高低电平。现在想要学习定时开关功能。在搜索诸多资料后,决定使用定时器中断来实现。但结果却发现延时功能并未成功,让我很是苦恼。               具体情况如下:先发上具体部分代码,见图片。
简单说明下:我设置了一个开关数据点,在开事件中初始化定时器4并启动,定时器4的时间目前设置为一常数用于测试。并把开灯函数放入定时器4的中断函数中。
测试结果:点击手机APP的“开”按键,测试的LED灯立即发光,没有任何延时。
提问:1.我测试了多个定时器,发现除了被GOKIT已经使用的定时器3,只有定时器4可以使用,对于GOKIT2板子,哪些定时器可以使用,哪些定时器已被占用了?
          2.在程序中,我只把LED开的程序放在定时器4的中断函数中,测试结果说明程序进入了定时器4的中断函数,但却没有任何延时,这是为什么?
          3.大神们还有什么其他思路来实现定时开关吗?
感谢各位的浏览和解答!!

bigfanofloT 发表于 2017-11-19 17:11:46

1.gokit使用的是STM32F103C8T6,共有4个定时器TIM1~TIM4,生成的代码包使用了定时器2和定时器3
2.在收到0x01改为启动定时器试试
3.延时使用gizGetTimerCount,代码参考微信宠物屋的
void userHandle(void)
{
    uint8_t ret= 0;
    static uint32_t thLastTimer = 0;

    currentDataPoint.valueInfrared = irHandle();

    if((gizGetTimerCount()-thLastTimer) > SAMPLING_TIME_MAX)
    {
      ret = dht11Read((uint8_t *)&currentDataPoint.valueTemperature, (uint8_t *)&currentDataPoint.valueHumidity);
      if(ret != 0)
      {
            printf("Failed to read DHT11\r\n");
      }
                               
      thLastTimer = gizGetTimerCount();
    }
}

Garfieldang 发表于 2017-11-19 18:59:00

bigfanofloT 发表于 2017-11-19 17:11
1.gokit使用的是STM32F103C8T6,共有4个定时器TIM1~TIM4,生成的代码包使用了定时器2和定时器3
2.在收到0x0 ...

非常非常感谢大神的解答,已经解决了我的问题。
原来是我的代码忘记使能定时器了,现在看来也是挺蠢的哈哈。:lol

Garfieldang 发表于 2017-11-19 19:04:46

现在把改正后的代码发一下吧,也给做定时功能的小伙伴做个参考。

鸿鹄与燕雀 发表于 2019-4-25 20:24:12

Garfieldang 发表于 2017-11-19 19:04
现在把改正后的代码发一下吧,也给做定时功能的小伙伴做个参考。

大佬,有工程文件吗   最近正在实现智能插座   卡在定时功能这里了方便分享学习一下吗感激不尽
页: [1]
查看完整版本: 关于GOKIT2的二次开发----定时开关功能的问题