野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12451|回复: 4

DMA串口1发送+printf函数的DMA实现,解放CPU

[复制链接]
发表于 2017-8-16 23:52:14 | 显示全部楼层 |阅读模式
本帖最后由 冷库的云 于 2017-8-16 23:52 编辑

我用的是HAL库,实现的串口1 的DMA传输。具体配置见附件代码。下面介绍下printf的DMA实现:
  1. /**
  2. *printf打印函数
  3. * @param format        printf格式
  4. */
  5. void printf_dma(const char *format, ...)
  6. {
  7.         uint32_t length;
  8.         va_list args;
  9.         
  10.         while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
  11.         va_start(args, format);
  12.         length = vsnprintf((char*)print_buffer, sizeof(print_buffer), (char*)format, args);//格式化内容
  13.         va_end(args);
  14.         USART_DMA_SendData(&huart1, print_buffer, length);//发送
  15. }
复制代码
记得加这个头文件
  1. #include <stdarg.h>
复制代码


其他就没有什么了!
测试DMA传输解放CPU的效果,可以自己搞个大数组,在主函数中串口发送,并且让LED闪烁,就可以直观感受DMA带来的好处了。没用DMA的延时大,因为CPU大多时间浪费在串口通信发送等待上。自己动手试试。自己动手,丰衣足食。

QQ截图20170816232634.png

STM32F103_HAL_USART_dam_tx_printf_2017.8.16 .zip

3.6 MB, 下载次数: 816

回复

使用道具 举报

发表于 2017-8-17 09:00:21 | 显示全部楼层
谢谢分享,F1都用HAL库啦?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-17 09:24:38 | 显示全部楼层
flyleaf 发表于 2017-8-17 09:00
谢谢分享,F1都用HAL库啦?

嗯嗯,紧跟时代潮流
回复 支持 反对

使用道具 举报

发表于 2017-8-17 09:33:33 | 显示全部楼层

嗯嗯,紧跟时代潮流
回复 支持 反对

使用道具 举报

发表于 2017-11-1 16:06:59 | 显示全部楼层
我司是专业生产HMI串口液晶触摸屏的,想了解的的朋友可以打我电话18123741645微信同号,或加QQ397050970张S,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 18:41 , Processed in 0.030734 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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