硬汉嵌入式论坛

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

[UART] h7串口空闲中断dma接收问题

[复制链接]

6

主题

27

回帖

50

积分

初级会员

积分
50
发表于 2024-10-29 09:47:09 | 显示全部楼层 |阅读模式
为什么串口的rdr寄存器收到了数据,dma缓冲区却没有数据,但是dma的__HAL_DMA_GET_COUNTER()函数又能准确获得收到多少个字节

以下是调试现象:
企业微信截图_1730166182912.png 企业微信截图_17301661974883.png

下面是用dma接收的代码,threadx的线程接收到信号量就会执行下面的函数
[C] 纯文本查看 复制代码
void serial_idle_recv_handler(struct serial_t *sObj)
{
  HAL_UART_DMAStop(sObj->huart);
  sObj->rx_num = sObj->buffer_size - __HAL_DMA_GET_COUNTER(sObj->huart->hdmarx);
  sObj->serial_idle_callback(sObj->rx_buffer, sObj->rx_num);
  memset(sObj->rx_buffer, 0, sObj->buffer_size);
  HAL_UART_Receive_DMA(sObj->huart, sObj->rx_buffer, sObj->buffer_size);
}

void serial_idle_sem_set(struct serial_t *sObj)
{
  tx_semaphore_put(&sObj->sem);
}

回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-29 09:48:18 | 显示全部楼层
h7真的太难了555,稍微用点网上没一模一样的教程的东西就出错
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-10-29 10:13:00 | 显示全部楼层
直接用HAL库封装好的串口 DMA空闲 API,不用自己造了。

STM32H7基于STM32CubeMX的串口DMA+空闲中断接收不定长数据实现(HAL库1.9.0自带函数实现)
https://forum.anfulai.cn/forum.p ... 8553&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

6

主题

27

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2024-10-29 10:16:33 | 显示全部楼层
eric2013 发表于 2024-10-29 10:13
直接用HAL库封装好的串口 DMA空闲 API,不用自己造了。

STM32H7基于STM32CubeMX的串口DMA+空闲中断接收 ...

好的我看看,谢谢
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2024-10-29 17:26:37 | 显示全部楼层
DMA无法访问DTCM-RAM ,把usb_recieve_buffer放到AXI SRAM中即可。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-10-30 09:50:46 | 显示全部楼层
u666666 发表于 2024-10-29 17:26
DMA无法访问DTCM-RAM ,把usb_recieve_buffer放到AXI SRAM中即可。



还是你看的仔细
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-10-31 17:12:59 | 显示全部楼层
u666666 发表于 2024-10-29 17:26
DMA无法访问DTCM-RAM ,把usb_recieve_buffer放到AXI SRAM中即可。

为什么我做了这个处理
ALIGN 32BYTES ( attribute __((section (". RAM_D2") ) ) uint8_t aRxBuffer [5]) = "RAM":
NATR有变化,但是接收数组还是没有数据
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-11-1 09:05:22 | 显示全部楼层
Jwjebbw 发表于 2024-10-31 17:12
为什么我做了这个处理
ALIGN 32BYTES ( attribute __((section (". RAM_D2") ) ) uint8_t aRxBuffer [5] ...

如果设置了这个
. RAM_D2

看下你的分散加载文件正常设置没,可能是没有设置分散加载文件
回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
发表于 2024-12-10 23:38:35 | 显示全部楼层
最后面有解决吗  我发现我遇到一样的问题呢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-12-11 08:37:16 | 显示全部楼层
pangguofu 发表于 2024-12-10 23:38
最后面有解决吗  我发现我遇到一样的问题呢


直接使用HAL库提供好的API正常不,UART DMA IDLE处理API

STM32H7基于STM32CubeMX的串口DMA+空闲中断接收不定长数据实现(HAL库1.9.0自带函数实现)
https://forum.anfulai.cn/forum.php? ... 8553&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 03:05 , Processed in 0.048400 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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