有什么网站可以做微信支付宝,wp rocket wordpress,东莞网站建设公司排名,学好网站建设的步骤DMA 直接存储器访问
DMA传输#xff0c;将数据从一个地址空间复制到另一个地址空间。-----“数据搬运工”。
DMA传输无需CPU直接控制传输#xff0c;也没有中断处理方式那样保留现场和恢复现场#xff0c;它是通过硬件为RAM和IO设备开辟一条直接传输数据的通道#xff0c…DMA 直接存储器访问
DMA传输将数据从一个地址空间复制到另一个地址空间。-----“数据搬运工”。
DMA传输无需CPU直接控制传输也没有中断处理方式那样保留现场和恢复现场它是通过硬件为RAM和IO设备开辟一条直接传输数据的通道使得CPU的效率使得CPU的效率大大提高。
STM32F1 DMA框图
1. DMA请求
DMA传输数据先向DMA控制器发送请求。
2.DMA通道
不同外设向DMA的不同通道发送请求。DMA1有7个通道DMA2有5个通道。DMA2仅存在大容量产品和互联型产品
3.DMA优先级
多个DMA通道同时发来请求时几句有先后响应处理的顺序问题这个由仲裁器管理优先级管理也分成软件阶段和硬件阶段
DMA处理过程 1.外设想通过DMA发送数据先发送请求。
2.DMA控制器收到请求后给外设一个ack
3.外设收到ack后释放请求
4.外设启动DMA数据传输直到传输结束
DMA优先级仲裁器管理DMA通道请求分为两个阶段软件阶段、硬件阶段
第一阶段软件阶段每个通道的优先级可在DMA_CCRx寄存器中设置由四个等级最高、高、中、低优先级。
第二阶段硬件阶段如果两个请求有相同软件优先级较低编号的通道有较高的优先级
(大容量芯片中DMA1控制器拥有高于DMA2控制器的优先级)
DMA的HAL库函数 DMA-串口数据传输
1.使能DMA时钟
_HAL_RCC_DMA1_CLK_ENABLE
2.初始化DMA
HAL_DMA_Init函数初始化DMA相关参数
_HAL_LINKDMA函数连接DMA和外设
3.使能串口的DMA发送启动传输
HAL_UART_Transmit_DMA
4.查询DMA传输状态
_HAL_DMA_GET_FLAG查询传输状态 _HAL_DMA_GET_COUNTER 获取当前传输剩余数据量
5.DMA中断使用
HAL_NVIC_EnableIRQ
HAL_NVIC_SetPriority
编写中断服务函数xxx_IRQHandler
实战
1.配置USART1以及相应中断 配置DMA 中断优先级这里防止HAL_Delay卡死详细请看 http://t.csdnimg.cn/NQhQV 生成keil工程后
DMA串口发送字符串 main函数 while1里 DMA串口接收空闲中断
uart.h、uart.c当中定义接收数组、数据长度、接收完成标志 在uart.c当中的Init函数下添加使能IDLE中断 main.c当中封装接收和发送函数 中断stm32f4xx_it.c中调用 #include usart.h stm32f4xx_it.c中编写中断服务函数 main.c中的while循环内编写发送以及接收标志清除
实验现象 打开串口若没有接收到数据时串口一直会每隔500ms发送SendBuff数组里的数据 接收