找回密码
 立即注册
楼主: tzz1983

4组串口UART使用DMA收发 @32G系列,易用,高效,稳定 !精品实战代码

[复制链接]

14

主题

70

回帖

341

积分

中级会员

积分
341
发表于 2024-3-21 10:58:49 | 显示全部楼层
我串口发送时用DMA,接收数据时不用 DMA,这样可以么

点评

可以的  发表于 2024-3-21 12:16
回复 支持 反对

使用道具 举报 送花

14

主题

70

回帖

341

积分

中级会员

积分
341
发表于 2024-3-21 11:54:58 | 显示全部楼层

1

本帖最后由 Nanger 于 2024-3-21 11:56 编辑

1
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-05-10 16:29:53

12

主题

66

回帖

285

积分

中级会员

积分
285
发表于 2024-5-14 01:02:48 来自手机 | 显示全部楼层
我只想问一句,普通方法发送数据与DMA发送数据
时间差多少,串口实时性应用还是差好多,
例如30个字节数据发送一次,接受一次,满足10毫秒一次,能做到吗

点评

当波特率为115200时, 1毫秒大约可以收发11字节,你自己算吧  详情 回复 发表于 2024-5-14 07:51
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-5-14 07:51:00 | 显示全部楼层
创隆*** 发表于 2024-5-14 01:02
我只想问一句,普通方法发送数据与DMA发送数据
时间差多少,串口实时性应用还是差好多,
例如30个字节数据 ...

当波特率为115200时, 1毫秒大约可以收发11字节,你自己算吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:375
  • 最近打卡:2025-04-26 15:51:33
已绑定手机

27

主题

301

回帖

822

积分

高级会员

积分
822
发表于 2024-6-24 11:41:57 | 显示全部楼层
tzz1*** 发表于 2024-5-14 07:51
当波特率为115200时, 1毫秒大约可以收发11字节,你自己算吧

感觉我的编程思路都落伍了,为了通用都是封装一个应用的串口中断发送函数,方便后续换平台。像这些DMA都没用过
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:337
  • 最近打卡:2025-04-28 12:55:00

23

主题

296

回帖

1160

积分

金牌会员

积分
1160
发表于 2024-8-3 09:07:08 | 显示全部楼层
本帖最后由 lezjin 于 2024-8-3 09:08 编辑

你好,可以请教下吗,

我用8H准备重写一下串口2的代码,至今还没有用过OS,所以这两行代码没有看明白作用,另外是不是不加也可以。
32G的代码我看楼主只是判断完成字节寄存器高8位,不判断低八位是否不同?
我参考了一下在8H中判断两次读取结果是否相同,后来仔细想了一下,这两行代码连续执行,应该是相等的,是不是直接读取寄存器就可以。
截图202408030855398103.jpg
截图202408030857431207.jpg
截图202408030859218254.jpg

点评

8H 好像只有一字节, 没有DONEH , 我那个代码是为了判断读低字节时高字节有没有发生变化, 即一个16位分两次读可能产生的非元子操作错误, 至于低字节, 无所谓, 无非是本次和下次查询到  详情 回复 发表于 2024-8-3 09:17
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-8-3 09:17:56 | 显示全部楼层
lez*** 发表于 2024-8-3 09:07
你好,可以请教下吗,

我用8H准备重写一下串口2的代码,至今还没有用过OS,所以这两行代码没有看明白作用 ...

8H 好像只有一字节,  没有DONEH ,  

我那个代码是为了判断读低字节时高字节有没有发生变化,  即避免一个16位分两次读可能产生的非元子操作错误, 至于低字节, 无所谓, 无非是本次和下次查询到
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:337
  • 最近打卡:2025-04-28 12:55:00

23

主题

296

回帖

1160

积分

金牌会员

积分
1160
发表于 2024-8-3 09:35:40 | 显示全部楼层
tzz1*** 发表于 2024-8-3 09:17
8H 好像只有一字节,  没有DONEH ,  

我那个代码是为了判断读低字节时高字节有没有发生变化,  即避免一个1 ...

了解了,谢谢,那8H的直接读取这个寄存器应该是可以的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:337
  • 最近打卡:2025-04-28 12:55:00

23

主题

296

回帖

1160

积分

金牌会员

积分
1160
发表于 2024-8-7 09:23:27 | 显示全部楼层
原来_testbit_是个函数,这下明白了。

#define  OS_ENTER_CRITICAL()    {cpu_sr=((!_testbit_(EA))?0X00:0X80);}

请教下这里用逻辑非判断,改成正逻辑是不是会速度快些。_testbit_(EA)?  0X80:0X00 ;

点评

好像不会  发表于 2024-8-7 09:29
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2025-04-20 08:30:08

0

主题

6

回帖

190

积分

注册会员

积分
190
发表于 2024-9-27 23:09:45 | 显示全部楼层
谢谢可以请教下收到420个字节再发怎样改吗

点评

UARTx_Receive() 接收数据时,会得到数据和长度,把数据保存起来并累积数量,数量累积到420再发,就这么改  详情 回复 发表于 2024-9-28 07:55
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:35 , Processed in 0.144114 second(s), 120 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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