芯片:esp32s3
开发环境:espidfv4.4
一、问题
1)最开始有个疑问,关于多久进一次中断的问题,因为串口打印值和想个不一样,如图。后来想明白了

group【0】为自动重装载,3s计时间隔,为什么打印值不是3?
原因:到达计数值->自动重装载|进入中断->arr=0->中断中arr已经在计数->counter不为零
所以,是定时器达到计数值进入中断,对于group【0】是3s
2)消息队列,自己理解
-
//main中创建消息队列
-
s_timer_queue = xQueueCreate(10, sizeof(example_timer_event_t)); -
//whilie中接收队列信息,信息来自中断回调
-
xQueueReceive(s_timer_queue, &evt, portMAX_DELAY); -
中断中
-
//创建结构体:储存定时器信息等
-
example_timer_event_t evt = { .info.timer_group = info->timer_group, .info.timer_idx = info->timer_idx, .info.auto_reload = info->auto_reload, .info.alarm_interval = info->alarm_interval, .timer_counter_value = timer_counter_value }; -
//从中断中返回信息到while
-
xQueueSendFromISR(s_timer_queue, &evt, &high_task_awoken); -
BaseType_t high_task_awoken = pdFALSE;该位保证队列接受到数据

文章详细讨论了ESP32S3芯片在ESPIDFv4.4环境下,如何处理定时器中断,特别是关于自动重装载功能的影响,以及如何使用消息队列在中断和主任务间传递定时器事件。同时,文中提供了示例代码,解释了不同定时器组的配置和操作,包括3秒间隔的自动重装载定时器和手动更新计数器的定时器。
最低0.47元/天 解锁文章
717





