ESP32C3外设开发总结
在开发ESP32C3外设过程中,使用最多的两种协议是SPI和UART;下面章节主要讲解SPI和UART两种协议的开发及GPIO口选取规则。
1、UART外设开发
使用ESP-IDF开发uart外设,首先可以通过对uart examples进行理解阅读

阅读完examples后,我们可以知晓ESP-IDF的uart开发主要包含"driver/uart.h"头文件;
该文件中包含了对uart操作的对应API,使用同步发送和异步发送(中断方式)。
在项目中我主要使用同步发送的方式,简单明了,异步方式可以参考uart_select例子。
主要接口介绍
/*安装uart驱动并对uart进行默认配置*/
esp_err_t uart_driver_install(uart_port_t uart_num, int rx_buffer_size, int tx_buffer_size, int queue_size, QueueHandle_t* uart_queue, int intr_alloc_flags);
/*使用uart_config_t进行配置uart,主要对波特率、bit位等信息的配置*/
esp_err_t uart_param_config(uart_port_t uart_num, const uart_config_t *uart_config);
/*设置uart的tx和rx的gpio口,在uart_echo项目中使用gpio4和gpio5,这个和spi2口重复了,故而我是用gpio18和gpio19代替,效果一致*/
esp_err_t uart_set_pin(uart_port_t uart_num, int tx_io_num, int rx_io_num, int rts_io_num, int cts_io_num);
/*阻塞方式从uart rx口中读取数据;
注:
1.若外设向uart-rx口发送数据,数据会被缓存下来,直到read才会从缓存中取出
2.超时时间需要手动除以portTICK_PERIOD_MS,用于转成ms
*/
int uart_read_bytes(uart_port_t uart_num, void* buf, uint32_t length, TickType_t ticks_to_wait);
/*通过uart-tx向外设发送数据*/
int uart_write_bytes(uart_port_t uart_num, const void* src, size_t size);
gpio口选择
可以阅读《esp32-c3_datasheet_cn.pdf》中的2.3.1 IO MUX 功能章节

凡是类型中有I/O/T基本可以作为tx-rx的gpio口。
2、SPI外设开发
SPI外设设备开发可以参考《esp32-c3_technical_reference_manual_cn.pdf》中**SPI控制器(SPI)**章节。
在概述描述中便可知晓,我们外设只能使用SPI2进行通信,SPI0/1是供内部使用。

主要接口介绍
/*初始化spi_bus,一般首先调用*/
esp_err_t spi_bus_initialize(spi_host_device_t host_id, const spi_bus_config_t *bus_config, spi_dma_chan_t dma_chan);
/*释放spi_bus*/
esp_err_t spi_bus_free(spi_host_device_t host_id);
/*向spi-bus中增加一个设备,主要是dev_config的配置*/
esp_err_t spi_bus_add_device(spi_host_device_t host_id, const spi_device_interface_config_t *dev_config, spi_device_handle_t *handle);
/*释放一个spi外设*/
esp_err_t spi_bus_remove_device(spi_device_handle_t handle);
/*每次执行传输前调用,占据当前SPI-bus用于外设传输*/
esp_err_t spi_device_acquire_bus(spi_device_handle_t device, TickType_t wait);
/*释放被占据的spi-bus*/
void spi_device_release_bus(spi_device_handle_t dev);
/*spi主要的传输接口*/
esp_err_t spi_device_transmit(spi_device_handle_t handle, spi_transaction_t *trans_desc);
gpio选择
参考《esp32-c3_datasheet_cn.pdf》中的2.3.1 IO MUX 功能章节


3156

被折叠的 条评论
为什么被折叠?



