LISA UART 同步发送示例(中断模式)
源码位置: samples/drivers/devices/lisa_uart/send_sync_int 查看源码
功能说明
演示在中断模式下使用 UART 同步发送接口。
底层使用中断方式异步发送,通过信号量实现同步等待,避免轮询,降低 CPU 占用。
硬件连接
PB2: UART1 TX(发送)
PB3: UART1 RX(接收)
连接到 PC 串口工具,配置为 115200, 8N1, 无流控
使用场景
适用于需要阻塞等待发送完成的场景,底层采用中断模式传输,应用层代码简洁。
示例步骤
获取 UART 设备
配置引脚和参数
调用
lisa_uart_write_sync()同步发送底层通过中断发送,任务等待信号量
发送完成后自动返回
编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在示例目录下执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -DBOARD=arcs_mini
Note
如果在 SDK 根目录执行,需要指定示例路径:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
烧录
编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs
Note
烧录参数说明:
-s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是/dev/ttyUSB0或/dev/ttyACM0- 可通过ls /dev/tty*命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名-b 3000000:烧录波特率(3Mbps)0x0:烧录起始地址build/arcs.bin:编译生成的固件路径-C arcs:芯片类型
注意事项:
确保开发板已正确连接到电脑
如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口
预期输出
终端输出:
=== UART Sync Send (Interrupt Mode) ===
UART configured in INT mode, start sending...
Sent: Hello UART (sync, INT)! Counter: #0
Sent: Hello UART (sync, INT)! Counter: #1
Sent: Hello UART (sync, INT)! Counter: #2
...
PC 串口工具接收:
Hello UART (sync, INT)! Counter: #0
Hello UART (sync, INT)! Counter: #1
Hello UART (sync, INT)! Counter: #2
...
每秒发送一条消息,计数器递增。
核心 API
API |
说明 |
|---|---|
|
获取 UART 设备 |
|
配置 UART 参数 |
|
同步发送数据(阻塞等待) |
同步发送说明
lisa_uart_write_sync() 在中断模式下的工作原理:
底层实现:通过中断方式异步发送数据,内部使用信号量等待完成
阻塞等待:调用后阻塞当前任务,直到发送完成或超时
返回时机:中断触发发送完成事件后返回
返回值:
成功时返回实际发送字节数(> 0)
超时时返回
LISA_DEVICE_ERR_TIMEOUT失败时返回其他负数错误码
关键代码
/* 1. 获取并检查设备 */
lisa_device_t *uart_dev = lisa_device_get("uart1");
/* 2. 配置 UART (115200, 8N1, INTERRUPT) */
lisa_uart_config_t config = LISA_UART_CONFIG_DEFAULT();
lisa_uart_configure(uart_dev, &config);
/* 3. 同步发送(中断异步发送+信号量等待),超时 100ms */
char msg[64];
snprintf(msg, sizeof(msg), "Hello UART (sync, INT)! Counter: #%lu\r\n", counter);
int ret = lisa_uart_write_sync(uart_dev, (uint8_t *)msg, strlen(msg), 100);
if (ret > 0) {
/* 发送成功 */
} else if (ret == LISA_DEVICE_ERR_TIMEOUT) {
/* 发送超时 */
}
注意事项
阻塞等待:
lisa_uart_write_sync()会阻塞当前任务,直到发送完成或超时超时设置:建议根据数据长度和波特率设置合理的超时时间
中断模式:使用
LISA_UART_CONFIG_DEFAULT()宏配置为中断模式(默认)错误处理:需要检查返回值处理超时和失败情况