1.DMA简介

DMA (Direct Memory Access) ,直接内存存储器,使用它在做数据传输时能够大大减轻CPU的负担。(先就这么简单了解一下

2USART1用DMA方式发送数据

首先应该初始化相关外设。

//配置串口1的硬件参数
USART_DeInit(USART1);                                 //将外设USART1寄存器重设为缺省值
USART_InitStructure.USART_BaudRate = 19200;           //设置串口1波特率为19200
USART_InitStructure.USART_WordLength = USART_WordLength_8b;    //设置一个帧中传输数据位
USART_InitStructure.USART_StopBits = USART_StopBits_1;        //定义发送的停止位数目为1
USART_InitStructure.USART_Parity = USART_Parity_No;              //奇偶失能
//硬件流控制失能
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;             //发送接收使能USART_Init(USART1, &USART_InitStructure);    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;      //时钟低电平活动
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; //设置SCLK引脚上时钟输出的极性为低电平
USART_ClockInitStructure.USART_CPHA = USART_CPHA_1Edge;       //时钟第一个边沿进行数据捕获
//最后一位数据的时钟脉冲不从SCLK输出
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
USART_ClockInit(USART1, &USART_ClockInitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                   //使能USART1接收中断
USART_Cmd(USART1, ENABLE);                                       //使能USART1外设DMA_InitTypeDef DMA_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);                    //开启DMA时钟//设置DMA源:串口1数据寄存器地址
DMA_InitStructure.DMA_PeripheralBaseAddr = ( uint32_t ) ( & ( USART1->DR ) );
//DMA内存基地址(要传输的变量的指针)
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SendBuff;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;     //数据传输方向,从内存读取发送到DMA_InitStructure.DMA_BufferSize = SENDSIZE_MAX;                  //DMA通道的DMA缓存的大小  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;      //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                  //内存地址寄存器递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设数据宽度为8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;           //内存数据宽度为8位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                       //工作在循环缓存模式
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;                //DMA通道拥有中优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                    //禁止DMA通道内存到内存传输
DMA_Init(DMA1_Channel4, &DMA_InitStructure);                             //配置DMA1的4通道DMA_Cmd (DMA1_Channel4,ENABLE);        

先写到这里,我目前理解的不够透彻,等学会了再来完善。

STM32的USART1用DMA方式发送数据相关推荐

  1. 嵌入式作业STM32采用串口DMA方式发送数据

    目录 前言 要求 一.DMA的基本介绍 DMA的基本定义 DMA的主要特征 STM32F411x系列芯片DMA控制器 二.通过CubeMX配置项目 1.创建项目 2.选择芯片STM32F103C8T6 ...

  2. STM32使用串口DMA方式发送数据

    1.cubemx设置 1.1基本设置 1.2 打开DMA和中断 2.代码实现 HAL_UART_Transmit_DMA(&huart1,(uint8_t*)str,strlen(str)); ...

  3. 关于RS485通讯中使用STM32串口以DMA方式发送数据丢失字节的问题

    1.开发平台 计算机操作系统:WIN7 64位: 开发环境:Keil MDK 5.14: MCU:STM32F407ZET6: STM32F4xx固件库:STM32F4xx_DSP_StdPeriph ...

  4. STM32串口DMA方式接收数据。类似环形FIFO。超省CPU资源!

    本文转自:http://www.amobbs.com/thread-5530588-2-1.html 一直以来都为串口接收数据所困扰: 1:如果用接收中断的话,每接收1byte就得中断一次.这样太消耗 ...

  5. STM32串口通信中使用printf发送数据配置方法 开发环境 Keil

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 已有 12456 次阅读2011-6-29 23:29 | 在STM32串口通信程序中使用printf发送数据, ...

  6. STM32——多通道ADC的DMA方式采集方法

    前言: 最近在调试STM32F205芯片ADC多通道DMA方式采集数据,总结下STM32多通道ADC的DMA方式采集的使用方法. 硬件平台:STM32F205 软件平台:keil v5 函数库:标准库 ...

  7. 以Post方式发送数据采用WebClient

    通过Post方式发送数据可以避免Get方式的数据长度限制 下面采用WebClient来实现这个功能 Web服务端可以是任何CGI但是要搞清楚Web端接受的编码,代码如下             Web ...

  8. stm32使用串口进行通讯之发送数据

    前提准备: 1.库函数基础模板 2.stlink下载器.USB-TTL下载器.单片机最小开发板stm32F103C8T6 3.面包板及相关接线 4.vscode与keil的联合开发更流畅 5.串口软件 ...

  9. stm32使用hal库向电脑发送数据

    文章目录 USART 几种协议(可跳过) 实验目的与材料 实验目的 实验材料 软件 硬件连接 HAL库项目创建 1.点击ACCESS TO MCU SELECTOR 2.选择芯片类型 3.可视化配置U ...

  10. gprs模块发送html,GPRS模块通过TCP/IP方式发送数据流程

    首先介绍一下GPRS的接入方式,在中国有CMWAP和CMNET两种方式.CMWAP 和 CMNET 只是中国移动人为划分的两个GPRS接入方式.前者是为手机WAP上网而设立的,后者则主要是为PC.笔记 ...

最新文章

  1. 大型网站系统架构系列:分布式消息队列(二)
  2. PHP大数组过滤元素、修改元素性能分析
  3. java自动布局_动态视图的自动布局约束
  4. python期末考试编程题_Python_编程题期末必看
  5. scala中使用特质中的抽象字段和实际字段
  6. 关于“xxx”object is not callable的异常(转)
  7. jquery datatable 前端分页和后端分页例子
  8. win10无法打开设置,桌面右键显示设置提示ms-settings:display 该文件没有与之关联的程序来执行该操作
  9. 33张你没看过的酷炫化学动图, 秒懂化学反应原理!
  10. Session Fixation session固定攻击
  11. 童年学习机器人的 5 大好处
  12. 单片机炫彩灯实训报告_51单片机呼吸灯实验报告.doc
  13. 【C#上位机】西门子1200PLC实用定位控制程序案例
  14. PKPM学习:板生成的问题
  15. 车载充电器E-mark认证需要的时间
  16. 零售业小程序行业解决方案
  17. 简单视频加密【C语言实现】
  18. mac上卸载Anyconnect后 重新安装失败
  19. xpwifi热点设置android,windowsXP设置wifi热点教程
  20. Matlab编程入门指南:简介、安装、学习路线和几十个编程案例分析。

热门文章

  1. 将 npm/yarn 的源地址替换成国内镜像的源地址
  2. html embed函数爬取,HTML DOM Embed用法及代码示例
  3. 因式分解的常用三种方法
  4. 无法安装冰点还原_冰点还原标准版v8.56.020.5542 ——墨涩网
  5. VBS QQ微信消息轰炸
  6. 最近在关注浏览器,先转一篇游戏浏览器的评测。
  7. in field list is ambiguous 解决方法
  8. 个人博客图片管理(方便管理,大家忽略)
  9. 由C向B:社区团购切换比拼赛道?
  10. 非北京户口的驾照到期换证小攻略(仅供参考)