乐鑫技术交流
直播中

李鸿洋

9年用户 832经验值
擅长:可编程逻辑
私信 关注
[问答]

在bootloader中如何使用定时器和串口?

如题,我的基线是IDF-4.0,硬件是ESP32-C3-WROOM-02,正在bootloader上进行第三方SDK的集成,已经完成一部分功能正常运行。还需要使用到定时器和一路串口。
    我先进行了定时器的使用,发现bootloader中无法使用软件定时器,因为内部有freertos的相关接口调用。看了文档对“自定义引导程序”的描述,我要把使用到的其他组件源码放到bootloader目录中,于是我按照已经完成移植运行的那部分,把componentsdrivertimer.c等相关源文件和头文件放过去,但总是出现各种报错,比如还需要我添加heap相关的源码。 现在还报错找不到_vector_table这些东西,如下图,我不知道该怎么办。

    请问我真的需要这么麻烦吗?你们推荐用什么方式在boot中使用定时器和串口等外设呢?

回帖(1)

刘芳

7 天前
在ESP32-C3-WROOM-02的bootloader中使用定时器和串口,可以按照以下步骤进行:

1. 首先,确保你的bootloader源码是基于ESP-IDF-4.0版本,并且已经正确配置了硬件和软件环境。

2. 由于bootloader中无法使用软件定时器,你可以考虑使用硬件定时器。ESP32-C3提供了两个硬件定时器,分别位于GPIO和RTC模块。你可以根据需求选择合适的定时器。

3. 要使用硬件定时器,需要在bootloader源码中包含相应的头文件和源文件。例如,如果使用RTC定时器,需要包含`esp32c3/rom/ets_sys.h`和`esp32c3/rom/rtc.h`。

4. 在bootloader中初始化定时器。例如,使用RTC定时器,可以调用`rtc_init()`函数进行初始化。

5. 配置定时器参数,如定时时间、时钟源等。例如,使用RTC定时器,可以调用`rtc_clk_divider_set()`设置时钟分频,调用`rtc_set_timer()`设置定时时间。

6. 启动定时器。例如,使用RTC定时器,可以调用`rtc_enable()`函数启动定时器。

7. 串口通信在bootloader中应该可以使用。首先,确保已经包含了串口相关的头文件,如`esp32c3/rom/uart.h`。

8. 初始化串口。调用`uart_init()`函数进行串口初始化,设置波特率、数据位、停止位等参数。

9. 配置串口中断。调用`ets_isr_attach()`函数将串口中断与相应的中断处理函数关联。

10. 启用串口中断。调用`ets_intr_enable()`函数启用串口中断。

11. 在中断处理函数中,根据需要进行串口数据的发送和接收。

关于报错问题,可能需要检查以下几个方面:

1. 确保所有需要的头文件和源文件都已经正确添加到bootloader项目中。

2. 检查是否缺少依赖的库文件,如freertos、heap等。

3. 检查代码中是否有未定义的宏或变量。

4. 检查代码中是否有语法错误或逻辑错误。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分