芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

单片机解密STM32F03C8T6实现软件定时器

  1. 单片机解密/* soft_timer.c/h  3.0 */

  2. 单片机解密#include "SoftTimer.h"
  3. 单片机解密#include "stdio.h"


  4. static volatile uint32_t tickCnt = 0;           //Èí¼þ¶¨Ê±Æ÷ʱÖÓ½ÚÅÄ

  5. static softTimer timer[TIMER_NUM];        //Èí¼þ¶¨Ê±Æ÷Êý×é

  6. /*****************************************************
  7. * function: ¸üÐÂʱÖÓ½ÚÅÄ
  8. * param:   
  9. * return:   
  10. * note:     ÐèÔÚ¶¨Ê±Æ÷ÖжÏÄÚÖ´ÐÐ
  11. ******************************************************/
  12. void tickCnt_Update(void)
  13. {
  14.         tickCnt++;
  15. }

  16. /*****************************************************
  17. * function: »ñȡʱÖÓ½ÚÅÄ
  18. * param:   
  19. * return:   Ê±ÖÓ½ÚÅÄ
  20. * note:     
  21. ******************************************************/
  22. uint32_t tickCnt_Get(void)
  23. {
  24.   return tickCnt;
  25. }

  26. /*****************************************************
  27. * function: Èí¼þ¶¨Ê±Æ÷³õʼ»¯
  28. * param:   
  29. * return:   
  30. * note:     
  31. ******************************************************/
  32. void softTimer_Init(void)
  33. {
  34.         uint16_t i;
  35.        
  36.         for(i=0; i<TIMER_NUM; i++) {
  37.                 timer[i].state = SOFT_TIMER_STOPPED;
  38.                 timer[i].mode = MODE_ONE_SHOT;
  39.                 timer[i].match = 0;
  40.                 timer[i].period = 0;
  41.                 timer[i].cb = NULL;
  42.                 timer[i].argv = NULL;
  43.                 timer[i].argc = 0;
  44.         }
  45. }

  46. /*****************************************************
  47. * function: »ñÈ¡Èí¼þ¶¨Ê±Æ÷״̬
  48. * param:    Èí¼þ¶¨Ê±Æ÷ID
  49. * return:   ¶¨Ê±Æ÷״̬
  50. * note:     
  51. ******************************************************/
  52. uint8_t softTimer_GetState(uint16_t id)
  53. {
  54.         return timer[id].state;
  55. }

  56. /*****************************************************
  57. * function: Æô¶¯Èí¼þ¶¨Ê±Æ÷
  58. * param1:   Èí¼þ¶¨Ê±Æ÷ID
  59. * param2:   ¶¨Ê±Æ÷ģʽ
  60. * param3:   ÑÓʱʱ¼ä(¶ÔÖÜÆÚ¶¨Ê±Æ÷£¬ÒàÊÇÖÜÆÚʱ¼ä)£¬µ¥Î»TIME_BASE_MS
  61. * param4:   »Øµ÷º¯ÊýÖ¸Õë
  62. * param5:   »Øµ÷º¯Êý²ÎÊý£º²ÎÊýÖ¸Õë
  63. * param6:   »Øµ÷º¯Êý²ÎÊý£º²ÎÊý³¤¶È
  64. * return:   
  65. * note:     
  66. ******************************************************/
  67. void softTimer_Start(uint16_t id, tmrMode mode, uint32_t delay, callback *cb, void *argv, uint16_t argc)
  68. {
  69.         assert_param(id < TIMER_NUM);
  70.         assert_param(mode == MODE_ONE_SHOT || mode == MODE_PERIODIC);
  71.        
  72.         timer[id].match = tickCnt_Get() + delay;
  73.         timer[id].period = delay;
  74.         timer[id].state = SOFT_TIMER_RUNNING;
  75.         timer[id].mode = mode;
  76.         timer[id].cb = cb;
  77.         timer[id].argv = argv;
  78.         timer[id].argc = argc;
  79. }

  80. /*****************************************************
  81. * function: Í£Ö¹Èí¼þ¶¨Ê±Æ÷
  82. * param:    Èí¼þ¶¨Ê±Æ÷ID
  83. * return:   
  84. * note:     
  85. ******************************************************/
  86. void softTimer_Stop(uint16_t id)
  87. {
  88.         assert_param(id < TIMER_NUM);
  89.         timer[id].state = SOFT_TIMER_STOPPED;
  90. }

  91. /*****************************************************
  92. * function: ¸üÐÂÈí¼þ¶¨Ê±Æ÷״̬
  93. * param:   
  94. * return:   
  95. * note:     
  96. ******************************************************/
  97. void softTimer_Update(void)
  98. {
  99.         uint16_t i;
  100.        
  101.         for(i=0; i<TIMER_NUM; i++) {
  102.           switch (timer[i].state) {
  103.       case SOFT_TIMER_STOPPED:
  104.                           break;
  105.                
  106.                   case SOFT_TIMER_RUNNING:
  107.                           if(timer[i].match <= tickCnt_Get()) {
  108.                                   timer[i].state = SOFT_TIMER_TIMEOUT;
  109.                                         timer[i].cb(timer[i].argv, timer[i].argc);       //Ö´Ðлص÷º¯Êý
  110.                           }
  111.                           break;
  112.                        
  113.                   case SOFT_TIMER_TIMEOUT:
  114.                                 if(timer[i].mode == MODE_ONE_SHOT) {
  115.                             timer[i].state = SOFT_TIMER_STOPPED;
  116.                                 } else {
  117.                                         timer[i].match = tickCnt_Get() + timer[i].period;
  118.                                         timer[i].state = SOFT_TIMER_RUNNING;
  119.                                 }
  120.                           break;
  121.                
  122.                   default:
  123.                           //printf("timer[%d] state error!\r\n", i);
  124.                           break;
  125.           }
  126.   }
  127. }



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信