单片机解密STM32F03C8T6实现软件定时器
- 单片机解密/* soft_timer.c/h 3.0 */
- 单片机解密#include "SoftTimer.h"
- 单片机解密#include "stdio.h"
- static volatile uint32_t tickCnt = 0; //Èí¼þ¶¨Ê±Æ÷ʱÖÓ½ÚÅÄ
- static softTimer timer[TIMER_NUM]; //Èí¼þ¶¨Ê±Æ÷Êý×é
- /*****************************************************
- * function: ¸üÐÂʱÖÓ½ÚÅÄ
- * param:
- * return:
- * note: ÐèÔÚ¶¨Ê±Æ÷ÖжÏÄÚÖ´ÐÐ
- ******************************************************/
- void tickCnt_Update(void)
- {
- tickCnt++;
- }
- /*****************************************************
- * function: »ñȡʱÖÓ½ÚÅÄ
- * param:
- * return: ʱÖÓ½ÚÅÄ
- * note:
- ******************************************************/
- uint32_t tickCnt_Get(void)
- {
- return tickCnt;
- }
- /*****************************************************
- * function: Èí¼þ¶¨Ê±Æ÷³õʼ»¯
- * param:
- * return:
- * note:
- ******************************************************/
- void softTimer_Init(void)
- {
- uint16_t i;
-
- for(i=0; i<TIMER_NUM; i++) {
- timer[i].state = SOFT_TIMER_STOPPED;
- timer[i].mode = MODE_ONE_SHOT;
- timer[i].match = 0;
- timer[i].period = 0;
- timer[i].cb = NULL;
- timer[i].argv = NULL;
- timer[i].argc = 0;
- }
- }
- /*****************************************************
- * function: »ñÈ¡Èí¼þ¶¨Ê±Æ÷״̬
- * param: Èí¼þ¶¨Ê±Æ÷ID
- * return: ¶¨Ê±Æ÷״̬
- * note:
- ******************************************************/
- uint8_t softTimer_GetState(uint16_t id)
- {
- return timer[id].state;
- }
- /*****************************************************
- * function: Æô¶¯Èí¼þ¶¨Ê±Æ÷
- * param1: Èí¼þ¶¨Ê±Æ÷ID
- * param2: ¶¨Ê±Æ÷ģʽ
- * param3: ÑÓʱʱ¼ä(¶ÔÖÜÆÚ¶¨Ê±Æ÷£¬ÒàÊÇÖÜÆÚʱ¼ä)£¬µ¥Î»TIME_BASE_MS
- * param4: »Øµ÷º¯ÊýÖ¸Õë
- * param5: »Øµ÷º¯Êý²ÎÊý£º²ÎÊýÖ¸Õë
- * param6: »Øµ÷º¯Êý²ÎÊý£º²ÎÊý³¤¶È
- * return:
- * note:
- ******************************************************/
- void softTimer_Start(uint16_t id, tmrMode mode, uint32_t delay, callback *cb, void *argv, uint16_t argc)
- {
- assert_param(id < TIMER_NUM);
- assert_param(mode == MODE_ONE_SHOT || mode == MODE_PERIODIC);
-
- timer[id].match = tickCnt_Get() + delay;
- timer[id].period = delay;
- timer[id].state = SOFT_TIMER_RUNNING;
- timer[id].mode = mode;
- timer[id].cb = cb;
- timer[id].argv = argv;
- timer[id].argc = argc;
- }
- /*****************************************************
- * function: Í£Ö¹Èí¼þ¶¨Ê±Æ÷
- * param: Èí¼þ¶¨Ê±Æ÷ID
- * return:
- * note:
- ******************************************************/
- void softTimer_Stop(uint16_t id)
- {
- assert_param(id < TIMER_NUM);
- timer[id].state = SOFT_TIMER_STOPPED;
- }
- /*****************************************************
- * function: ¸üÐÂÈí¼þ¶¨Ê±Æ÷״̬
- * param:
- * return:
- * note:
- ******************************************************/
- void softTimer_Update(void)
- {
- uint16_t i;
-
- for(i=0; i<TIMER_NUM; i++) {
- switch (timer[i].state) {
- case SOFT_TIMER_STOPPED:
- break;
-
- case SOFT_TIMER_RUNNING:
- if(timer[i].match <= tickCnt_Get()) {
- timer[i].state = SOFT_TIMER_TIMEOUT;
- timer[i].cb(timer[i].argv, timer[i].argc); //Ö´Ðлص÷º¯Êý
- }
- break;
-
- case SOFT_TIMER_TIMEOUT:
- if(timer[i].mode == MODE_ONE_SHOT) {
- timer[i].state = SOFT_TIMER_STOPPED;
- } else {
- timer[i].match = tickCnt_Get() + timer[i].period;
- timer[i].state = SOFT_TIMER_RUNNING;
- }
- break;
-
- default:
- //printf("timer[%d] state error!\r\n", i);
- break;
- }
- }
- }

芯片解密