|
本帖最后由 luweixuan 于 2014-12-5 15:47 编辑
在参考各个开发板的例程的基础上,经过自身编程实践重新构建和修改,编写了以下方便在状态机模块里使用的延时计数模块。延时计数的基础是SYSTICK,设置为1ms.具体代码如下:
softtimer.h:
- /*
- *********************************************************************************************************
- *
- * SOFTTIMER
- *
- * ST Microelectronics STM32
- * on the
- *
- * STM32Fx-DISCOVERY
- * Evaluation Board
- *
- * 文件名 : softtimer.h
- * 版 本 : V0.1
- * 作 者 : Lux
- * 时 间 : 2014/11/27
- * 编译环境 : D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0
- * 摘 要 : SOFTTIMER Drive,软件方式实现的非阻塞方式的超时计时模块
- *********************************************************************************************************/
- #ifndef __SOFT_TIMER_H
- #define __SOFT_TIMER_H
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- //-----------------------Include files--------------------------------//
- #include <stdbool.h>
- #include <stdint.h>
- //------------------------Data struct---------------------------------//
- typedef enum
- {
- ONCE_MODE = 0x00,
- CIRC_MODE = 0x01
- }TIMER_MODE_t;
-
- typedef struct SOFT_TIMER
- {
- TIMER_MODE_t mode;
- bool isActivate;
- volatile uint32_t value;
- uint32_t totvalue;
- struct SOFT_TIMER* next;
- }SOFT_TIMER_t;
-
- //------------------------Extern function-----------------------------//
- void soft_timer_register(SOFT_TIMER_t *st);
- void set_and_star_soft_timer(SOFT_TIMER_t *st, TIMER_MODE_t mode, uint32_t totvalue);
- bool is_soft_timer_Out(SOFT_TIMER_t *st);
- void soft_timer_release(SOFT_TIMER_t *st);
-
- #ifdef __cplusplus
- }
- #endif
- #endif /*__SOFTTIMER_H*/
复制代码
softtimer.c:
使用方法如下:
- // LED模块的状态机
- void led_module()
- {
- static uint8_t state = 0;
- static SOFT_TIMER_t led_st;
-
- switch(state)
- {
- case 0:// 初始状态
- led1.init();
- led1.on();
- soft_timer_register(&led_st);
- set_and_star_soft_timer(&led_st, CIRC_MODE, 500);
- state = 1;
- //break;
- case 1:// led跳变状态
- led1.tigger();
- state = 2;
- break;
- case 2:// 延时等待状态
- if (is_soft_timer_Out(&led_st) == true)
- state = 1;
- break;
-
- }
- }
复制代码
ps: 编辑原因:添加代码压缩包
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)
|