STM32的USART1用DMA方式发送数据
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方式发送数据相关推荐
- 嵌入式作业STM32采用串口DMA方式发送数据
目录 前言 要求 一.DMA的基本介绍 DMA的基本定义 DMA的主要特征 STM32F411x系列芯片DMA控制器 二.通过CubeMX配置项目 1.创建项目 2.选择芯片STM32F103C8T6 ...
- STM32使用串口DMA方式发送数据
1.cubemx设置 1.1基本设置 1.2 打开DMA和中断 2.代码实现 HAL_UART_Transmit_DMA(&huart1,(uint8_t*)str,strlen(str)); ...
- 关于RS485通讯中使用STM32串口以DMA方式发送数据丢失字节的问题
1.开发平台 计算机操作系统:WIN7 64位: 开发环境:Keil MDK 5.14: MCU:STM32F407ZET6: STM32F4xx固件库:STM32F4xx_DSP_StdPeriph ...
- STM32串口DMA方式接收数据。类似环形FIFO。超省CPU资源!
本文转自:http://www.amobbs.com/thread-5530588-2-1.html 一直以来都为串口接收数据所困扰: 1:如果用接收中断的话,每接收1byte就得中断一次.这样太消耗 ...
- STM32串口通信中使用printf发送数据配置方法 开发环境 Keil
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 已有 12456 次阅读2011-6-29 23:29 | 在STM32串口通信程序中使用printf发送数据, ...
- STM32——多通道ADC的DMA方式采集方法
前言: 最近在调试STM32F205芯片ADC多通道DMA方式采集数据,总结下STM32多通道ADC的DMA方式采集的使用方法. 硬件平台:STM32F205 软件平台:keil v5 函数库:标准库 ...
- 以Post方式发送数据采用WebClient
通过Post方式发送数据可以避免Get方式的数据长度限制 下面采用WebClient来实现这个功能 Web服务端可以是任何CGI但是要搞清楚Web端接受的编码,代码如下 Web ...
- stm32使用串口进行通讯之发送数据
前提准备: 1.库函数基础模板 2.stlink下载器.USB-TTL下载器.单片机最小开发板stm32F103C8T6 3.面包板及相关接线 4.vscode与keil的联合开发更流畅 5.串口软件 ...
- stm32使用hal库向电脑发送数据
文章目录 USART 几种协议(可跳过) 实验目的与材料 实验目的 实验材料 软件 硬件连接 HAL库项目创建 1.点击ACCESS TO MCU SELECTOR 2.选择芯片类型 3.可视化配置U ...
- gprs模块发送html,GPRS模块通过TCP/IP方式发送数据流程
首先介绍一下GPRS的接入方式,在中国有CMWAP和CMNET两种方式.CMWAP 和 CMNET 只是中国移动人为划分的两个GPRS接入方式.前者是为手机WAP上网而设立的,后者则主要是为PC.笔记 ...
最新文章
- 大型网站系统架构系列:分布式消息队列(二)
- PHP大数组过滤元素、修改元素性能分析
- java自动布局_动态视图的自动布局约束
- python期末考试编程题_Python_编程题期末必看
- scala中使用特质中的抽象字段和实际字段
- 关于“xxx”object is not callable的异常(转)
- jquery datatable 前端分页和后端分页例子
- win10无法打开设置,桌面右键显示设置提示ms-settings:display 该文件没有与之关联的程序来执行该操作
- 33张你没看过的酷炫化学动图, 秒懂化学反应原理!
- Session Fixation session固定攻击
- 童年学习机器人的 5 大好处
- 单片机炫彩灯实训报告_51单片机呼吸灯实验报告.doc
- 【C#上位机】西门子1200PLC实用定位控制程序案例
- PKPM学习:板生成的问题
- 车载充电器E-mark认证需要的时间
- 零售业小程序行业解决方案
- 简单视频加密【C语言实现】
- mac上卸载Anyconnect后 重新安装失败
- xpwifi热点设置android,windowsXP设置wifi热点教程
- Matlab编程入门指南:简介、安装、学习路线和几十个编程案例分析。