Welcome to my blog.
Spi
spi使用步骤 1.配置总线 #include "driver/spi_master.h" // 1. 配置总线参数 spi_bus_config_t buscfg = { .mosi_io_num = 13, // MOSI 引脚 .miso_io_num = 12, // MISO 引脚 .sclk_io_num = 14, // SCLK 引脚 .quadwp_io_num = -1, // 未使用(保留 -1) .quadhd_io_num = -1, // 未使用(保留 -1) .max_transfer_sz = 4096 // 最大传输字节数 }; // 初始化 SPI 总线(如 SPI2_HOST) ESP_ERROR_CHECK(spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO)); 2.添加设备到总线 spi_device_interface_config_t devcfg = { .clock_speed_hz = 10 * 1000 * 1000, // 时钟频率 (10 MHz) .mode = 0, // SPI 模式 0 .spics_io_num = 15, // 片选引脚 (CS) .queue_size = 7, // 传输队列大小 }; spi_device_handle_t spi; // 设备句柄 ESP_ERROR_CHECK(spi_bus_add_device(SPI2_HOST, &devcfg, &spi)); 3.传输数据 uint8_t send_buf[4] = {0x01, 0x02, 0x03, 0x04}; uint8_t recv_buf[4] = {0}; // 接收缓冲区 spi_transaction_t t = { .tx_buffer = send_buf, // 发送数据指针 .rx_buffer = recv_buf, // 接收数据指针 .length = 32, // 总位数 (4字节 * 8 = 32位) }; // 执行传输(阻塞模式) ESP_ERROR_CHECK(spi_device_transmit(spi, &t)); 4.释放资源(不使用spi后) spi_bus_remove_device(spi); // 移除设备 spi_bus_free(SPI2_HOST); // 释放总线 理解SPI SPI2_HOST 是SPI控制器标识符,根据总线配置和设备配置进行收发数据和DMA启动等, SPI1_HOST一般是不使用的,这个控制器一般用来内部flash使用 不管是spi_bus_config_t总线配置,还是spi_device_interface_config_t设备配置,都是在配置SPI控制器如何收发数据,拆分开成两个配置是为了通用性,总线是一组设备公用的配置,同一个总线上可以有多个设备,而设备配置是和具体设备紧密关联的配置比如片选信由那个GPIO发送 总线配置是物理层设定(线路怎么接); 设备配置是协议层设定(信号怎么发)