完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
不用中断,就是单纯一个用作延时函数,写了一个下午也没搞明白,可能我理解出错了
void delay_us(int us) { timer_config_t delay; timer_set_counter_value(0,0,us);//us延时时间 delay.alarm_en=0;//不使能报警 delay.auto_reload=1;//不自动重新加载 delay.clk_src=0;//默认APB delay.counter_dir=1;//向上计数 delay.divider=80;//分频1 000 000hz // delay.intr_type=0;//不报警不中断 delay.counter_en=1;//使能定时器 timer_init(0,0,&delay);//0组0定时器初始化 }; 按照STM32的写法应该还有一个更新状态位,等待定时器计时更新完成就是延时了,esp32是哪个呢?求解答 |
|
相关推荐
1个回答
|
|
根据您的描述,您想要使用定时器实现一个延时函数,而不使用中断。以下是一个使用定时器实现延时的示例代码,这里以ESP32为例:
```c #include "driver/timer.h" #include "esp_intr_alloc.h" #define US_TO_TICKS(us, ticks_per_us) ((us) * (ticks_per_us)) #define TIMER_DIVIDER 80 // 根据实际硬件配置调整分频值 // 初始化定时器 void timer_init() { timer_config_t config; config.divider = TIMER_DIVIDER; config.counter_dir = TIMER_COUNT_UP; config.auto_reload = false; config.intr_type = TIMER_INTR_LEVEL; config.counter_en = false; timer_init(0, &config); // 使用定时器0 timer_pause(0); } // 延时函数,单位为微秒 void delay_us(int us) { static int ticks_per_us = 0; if (ticks_per_us == 0) { ticks_per_us = (TIMER_BASE_CLK / TIMER_DIVIDER) / 1000000; // 计算每微秒的计数值 } int ticks = US_TO_TICKS(us, ticks_per_us); timer_set_counter_value(0, 0); // 设置定时器计数值为0 timer_start(0); // 启动定时器 while (timer_get_counter_value(0) < ticks) { // 等待计数器达到指定的计数值 } timer_pause(0); // 暂停定时器 } void app_main() { timer_init(); // 初始化定时器 while (1) { delay_us(1000); // 延时1000微秒 // 在这里执行其他任务 } } ``` 这段代码首先初始化定时器,设置分频器、计数方向、自动重载等参数。然后定义了一个`delay_us`函数,该函数接受一个整数参数(微秒),并根据这个参数计算出需要等待的计数值。在`delay_us`函数中,我们设置定时器的计数值为0,启动定时器,并在计数器达到指定的计数值之前等待。最后,暂停定时器以节省资源。 请注意,这个示例代码是针对ESP32的,如果您使用的是其他硬件平台,可能需要根据实际硬件配置进行相应的调整。 |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:32 , Processed in 0.817526 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号