硬汉嵌入式论坛

 找回密码
 立即注册
查看: 341|回复: 2
收起左侧

Zephyr不支持stm32串口异步发送?

[复制链接]

0

主题

0

回帖

0

积分

新手上路

积分
0
发表于 2025-7-23 22:38:56 | 显示全部楼层 |阅读模式
本帖最后由 aiqiqi 于 2025-7-23 22:54 编辑

在基于zephyr学习过程中,我尝试调用zephyr的API函数进行串口发送数据:
设备树:

之后我在main.c文件中,通过uart_poll_out()函数发送数据,由于了解到uart_poll_out()函数为阻塞式发送,于是我尝试使用uart_tx()函数发送数据,查看uart_tx函数的底层调用,他是通过z_impl_uart_tx()函数实现的发送

在z_impl_uart_tx()函数当中,可以看到CONFIG_UART_ASYNC_API如果被定义的话,就会通过api->tx(dev, buf, len, timeout)实现发送,否则返回-ENOTSUP

查看了stm32串口驱动的API接口,如果CONFIG_UART_ASYNC_API被定义,api->tx(dev, buf, len, timeout)就会调用uart_stm32_async_tx函数实现异步发送。

但是在实际的测试过程中,在项目工程目录下的prj.con中我定义了CONFIG_UART_ASYNC_API=y,结果在main.c文件中调用uart_tx()函数发送数据不成功,于是我尝试通过打印uart_tx()函数的返回值,结果发现返回值为-134即-ENOTSUP,进一步排查发现,及时我设置了CONFIG_UART_ASYNC_API=y,在调用uart_tx()函数时,程序执行时走的如下图中的else的位置。

有没有大佬知道为啥啊,救救小弟,困惑一周了


设备树

设备树

uart_tx调用z_impl_uart_tx

uart_tx调用z_impl_uart_tx

z_impl_uart_tx调用api->tx

z_impl_uart_tx调用api->tx

stm32串口驱动的API接口

stm32串口驱动的API接口

测试uart_tx执行else

测试uart_tx执行else
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-7-24 08:53:22 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-7-24 17:58:03 | 显示全部楼层
参考https://docs.zephyrproject.org/l ... l#CONFIG_UART_STM32,需要同时打开DMA。可以看一下build/zephyr/include/generated/zephyr/autoconf.h里是否真的使能了CONFIG_UART_ASYNC_API,这个文件包含了kconfig配置完成后的最终状态。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 02:58 , Processed in 0.091295 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表