Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
USART
stm32的usart中断发送却以轮询发送的方式
发布于 2024-07-23 10:36:05 浏览:352
订阅该版
[tocm] # 串口中断发送却是用轮询发送方式 代码如下: ```c rt_inline int _serial_int_tx(struct rt_serial_device *serial, const rt_uint8_t *data, int length) { int size; struct rt_serial_tx_fifo *tx; RT_ASSERT(serial != RT_NULL); size = length; tx = (struct rt_serial_tx_fifo*) serial->serial_tx; RT_ASSERT(tx != RT_NULL); while (length) { /* * to be polite with serial console add a line feed * to the carriage return character */ if (*data == '\n' && (serial->parent.open_flag & RT_DEVICE_FLAG_STREAM)) { if (serial->ops->putc(serial, '\r') == -1) { rt_completion_wait(&(tx->completion), RT_WAITING_FOREVER); continue; } } if (serial->ops->putc(serial, *(char*)data) == -1) { rt_completion_wait(&(tx->completion), RT_WAITING_FOREVER); continue; } data ++; length --; } return size - length; } ``` 调用了 ```c static int stm32_putc(struct rt_serial_device *serial, char c) { struct stm32_uart *uart; RT_ASSERT(serial != RT_NULL); uart = rt_container_of(serial, struct stm32_uart, serial); UART_INSTANCE_CLEAR_FUNCTION(&(uart->handle), UART_FLAG_TC); #if defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32WL) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32F0) \ || defined(SOC_SERIES_STM32L0) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32L5) \ || defined(SOC_SERIES_STM32G4) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32F3) \ || defined(SOC_SERIES_STM32U5) uart->handle.Instance->TDR = c; #else uart->handle.Instance->DR = c; #endif while (__HAL_UART_GET_FLAG(&(uart->handle), UART_FLAG_TC) == RESET); return 1; } ``` _serial_int_tx函数不会运行到rt_completion_wait(&(tx->completion), RT_WAITING_FOREVER);这一句,中断中也不会发送完成信号。
查看更多
jeova
2024-07-23
这家伙很懒,什么也没写!
v1版本的serial device我印象里就是这么实现的,由于putc到硬件实现层,函数里面固定返回1,走的实际上还是阻塞式的方式;
2
个回答
默认排序
按发布时间排序
achinwoo
2024-07-23
这家伙不懒,啥都会写
底部的if(0)驱动要打开,默认的是关闭的 ``` void uart_irq_handler(int irqno, void *param) { rt_uint32_t val; struct rt_serial_device *serial = (struct rt_serial_device *)param; struct device_uart *uart = serial->parent.user_data; val = readl(uart->hw_base + 0x08) & 0x0F; /* read interrupt status and clear it */ if (val & 0x4) /* rx ind */ { rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); } if (0) /* tx done */ { rt_hw_serial_isr(serial, RT_SERIAL_EVENT_TX_DONE); } } ```
撰写答案
登录
注册新账号
关注者
0
被浏览
352
关于作者
qxh
这家伙很懒,什么也没写!
提问
4
回答
0
被采纳
0
关注TA
发私信
相关问题
1
ETH和libmodbus同时使用时出现串口队列溢出的问题
2
USART1_IRQHandler串口中断接收问题
3
串口以DMA接收,其回调函数每接收一个字节回调一次,怎么让它一包结束回调
4
请问USART发送回调函数怎么配置使用呀!
5
rt_serial_close 关闭接口好像有点问题
6
usart的缓冲区有什么用?
7
移植finsh时keil仿真UART可以正常输入输出,下载程序后程序串口无法输出
8
USART长时间运行后通信变慢,重新上电后回复正常
9
rtthread nano不支持串口的rt_device, 所以该如何使用串口中断收发?
10
rtthread 如何只用Hal库的中断
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-thread 缩写字典
2
RT Thread 源码分析笔记 :线程和调度器
3
RT-Thread项目助手v0.2.0 - 支持Env Windows
4
RttreadV5.10上,GD32F450Z RTC时间显示问题
5
rt-smart启动流程分析
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
聚散无由
2
篇文章
13
次点赞
catcatbing
2
篇文章
2
次点赞
Wade
2
篇文章
2
次点赞
xiaorui
1
篇文章
1
次点赞
zhuzhuzhu
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部