ESP32的IDF提供了两种操作串口的方式:第一种是使用官方的驱动方式,这种方式中断服务函数是官方写好的,自己需要通过另建一个任务来获取封装好的串口事件,这种方式操作简便,自己无需写太多代码就可以使用已经定义好的各种事件。但是呢这种方式有个缺点就是从串口接受到数据再到通过事件的方式通知到一个任务里面来需要一定的事件,这个和freertos系统调度有关。所有有些非常需要实时处理的串口数据就没办法。

第二种方式呢就是自己写串口中断服务函数,这个也就是我们在平时单片机编程中最常使用的方式。

这里主要讲下基于中断的方式来操作ESP32 串口。基于事件的方式可以直接参考官方example里面的代码已经很完整。

要使用一个外设很简单,第一步就是初始化:

可以看出来初始化代码很简单,但是里面却有个大坑,之前一直找不出来问题,添加的终端服务函数不管用。就是少执行了uart_driver_install和uart_isr_free这两步。关键是官方并没有说明需要这样操作,国内网上帖子看遍了每一个这样操作的,最后还是翻墙看到一个印度人这么写的。

下面就是中断服务函数: