Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DMA
串口
5
关于串口DMA发送数据一直发不出来
发布于 2020-12-07 18:26:19 浏览:3059
订阅该版
```c #if defined(BSP_USING_UART5) void UART5_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); uart_isr(&(uart_obj[UART5_INDEX].serial)); /* leave interrupt */ rt_interrupt_leave(); } #if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART5_RX_USING_DMA) void UART5_DMA_RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); HAL_DMA_IRQHandler(&uart_obj[UART5_INDEX].dma_rx.handle); /* leave interrupt */ rt_interrupt_leave(); } #endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART5_RX_USING_DMA) */ #if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART5_TX_USING_DMA) void UART5_DMA_TX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); HAL_DMA_IRQHandler(&uart_obj[UART5_INDEX].dma_tx.handle); /* leave interrupt */ rt_interrupt_leave(); } #endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART5_TX_USING_DMA) */ #endif /* BSP_USING_UART5*/ ``` 这三个中断处理函数,下面的串口DMA发送和接收中断进不去,只能进第一个中断。 ```c static rt_size_t stm32_dma_transmit(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction) { struct stm32_uart *uart; RT_ASSERT(serial != RT_NULL); uart = rt_container_of(serial, struct stm32_uart, serial); if (size == 0) { return 0; } if (RT_SERIAL_DMA_TX == direction) { if (HAL_UART_Transmit_DMA(&uart->handle, buf, size) == HAL_OK) { return size; } else { return 0; } } return 0; } ``` 仿真只有发送第一次的时候调用了`HAL_UART_Transmit_DMA()`函数,而且返回`HAL_OK`,但是就是没数据发出来,硬件引脚没错,用轮询的方式能发出来;
查看更多
whj467467222
认证专家
2020-12-07
开源,分享,交流,共同进步
遇到过这种问题,是 dma.config.h 配置错了
4
个回答
默认排序
按发布时间排序
张世争
2020-12-07
学以致用
确认 UART5 引脚与时钟是否初始化。一般在msp.c文件里
Tomato_E
2020-12-07
这家伙很懒,什么也没写!
时钟和引脚没问题
fubaojun2006
2021-02-02
哇(挖)~~坑~~~啊!
我也遇到与你一样的现象,不过我这边是代码写的逻辑问题导致的。 写出来给别人也提醒一下。 内核版本 4.0.2 ```c /* 此处 DMA发送方式打开串口设备 测试功能, 防止程序调用中断发送过程*/ rt_device_open(serial_dev, RT_DEVICE_FLAG_DMA_TX); /* 设置发送完成回调函数 */ rt_device_set_tx_complete(serial_dev, tx_done); /* 发送字符串 */ buf[0] = Current_ch; rt_device_write(serial_dev, 0, buf, (sizeof(buf))); _/* delay 等待DMA 发送完成,再关串口,否则无法发送 */ rt_thread_mdelay(20);_ rt_device_close(serial_dev); ``` 因为我的代码逻辑,是 先open 使用DMA发送数据,然后再 close 切换成RX模式。 一开始忘记在close之前加入 mdelay 而导致 刚设定完DMA 就 关串口,导致无法发送成功。 后面加入延时就好了。 问题现象一样,原因跟你的不一样。 写出来是提醒一下别人。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.1k
关于作者
Tomato_E
这家伙很懒,什么也没写!
提问
10
回答
2
被采纳
0
关注TA
发私信
相关问题
1
串口DMA发送数据时,数据被覆盖
2
关于串口DMA模式下rt_device_close问题
3
利用stm32f427实现usb转串口,电脑端什么也没有识别到
4
finsh 控制台 适配 RS 485请大神指点????
5
uart_sample.c 中,读串口设备时偏移量pos要设置为-1而不是0?
6
【结贴】at_device软件包中对串口接收数据缺少判断导致数据接收异常
7
串口无法接受数据,但可以发送
8
串口如何有效的清除掉接收缓冲,而不必一个一个的去读取
9
串口接收使用方式问题
10
雅特力FINSH问题
推荐文章
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
RTT串口查找函数使用过程中遇到的问题。
2
RT-Thread CI编译产物artifacts自动上传功能介绍
3
STM32G030移植RT-Thread
4
CubeMX & RT-Thread Studio 联合开发说明
5
RT-Thread项目助手v0.3 | Ubuntu与MacOS平台的RT-Thread Env
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
rt-smart
RTC
FAL
I2C_IIC
cubemx
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
定时器
ADC
flashDB
编译报错
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
Debug
SFUD
ulog
msh
C++_cpp
MicroPython
本月问答贡献
出出啊
1522
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
815
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部