使用AIR001如何进行UART的DMA发送,
要求:DMA使用正常模式;且传输一次后可以更新下一次传输
AIR001是一款基于ESP32的Wi-Fi模块,它具有UART接口,可以用于与外部设备进行通信。在ESP32中,DMA(Direct
Memory Access,直接内存访问)是一种硬件特性,允许外设直接访问内存,而无需CPU介入,从而提高数据传输效率。
以下是使用合宙AIR001进行UART的DMA发送的步骤:
1. 初始化UART接口:
首先,需要初始化UART接口。使用ESP32的`uart_config_t`结构体配置UART参数,如波特率、数据位、停止位等。
```c
uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_APB,
};
```
然后,使用`uart_param_config()`函数配置UART参数。
```c
uart_param_config(UART_NUM_1, &uart_config);
```
2. 安装DMA驱动:
使用`uart_driver_install()`函数安装UART驱动,并指定接收和发送缓冲区的大小。
```c
uart_driver_install(UART_NUM_1, 2048, 2048, 8, &uart1, 0);
```
3. 配置DMA传输:
使用`uart_circular_mode_enable()`函数启用循环模式,以允许在传输过程中更新下一次传输的数据。
```c
uart_circular_mode_enable(UART_NUM_1);
```
4. 准备要发送的数据:
创建一个缓冲区,用于存储要通过UART发送的数据。
```c
uint8_t send_data[100];
```
5. 发送数据:
使用`uart_circular_write_bytes()`函数发送数据。在发送过程中,可以更新`send_data`数组中的数据,以准备下一次传输。
```c
size_t bytes_sent = 0;
uart_circular_write_bytes(UART_NUM_1, send_data, sizeof(send_data), &bytes_sent);
```
6. 检查传输状态:
可以使用`uart_wait_tx_done()`函数等待传输完成,或者使用中断和回调函数来处理传输完成事件。
```c
uart_wait_tx_done(UART_NUM_1, 1000);
```
7. 更新下一次传输的数据:
在发送数据的过程中,可以更新`send_data`数组中的数据,以准备下一次传输。
```c
// 假设这是下一次要发送的数据
uint8_t new_data[100] = { ... };
memcpy(send_data, new_data, sizeof(send_data));
```
8. 重复步骤5-7,以继续发送更新后的数据。
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 |