本帖最后由 药无尘 于 2022-9-15 15:57 编辑
3.4 测试最后,当然是来验证一下我们的软件定时器有没达到预想的功能。 定义三个定时器: 定时器TMR_STRING_PRINT只执行一次,1s后在串口1打印一串字符; 定时器TMR_TWINKLING为周期定时器,周期为0.5s,每次到期都将取反LED0的状态,实现LED0的闪烁; 定时器TMR_DELAY_ON执行一次,3s后点亮LED1,跟第一个定时器不同的是,此定时器的回调函数是个空函数nop(),点亮LED1的操作通过主循环中判断定时器的状态来实现,这种方式在某些场合可能会用到。 - static uint8_t data[] = {1,2,3,4,5,6,7,8,9,0};
- int main(void)
- {
- USART1_Init(115200);
- TIM4_Init(TIME_BASE_MS);
- TIM4_NVIC_Config();
- LED_Init();
-
- printf("I just grabbed a spoon.\r\n");
-
- softTimer_Start(TMR_STRING_PRINT, MODE_ONE_SHOT, 1000, stringPrint, data, 5);
- softTimer_Start(TMR_TWINKLING, MODE_PERIODIC, 500, LED0_Twinkling, NULL, 0);
- softTimer_Start(TMR_DELAY_ON, MODE_ONE_SHOT, 3000, nop, NULL, 0);
-
- while(1) {
- softTimer_Update();
- if(softTimer_GetState(TMR_DELAY_ON) == SOFT_TIMER_TIMEOUT) {
- LED1_On();
- }
- }
- }
以下是测试结果,这是串口的打印:
|