stm32-9DMA为CPU减负
一、DMA相关
直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU任何干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
两个DMA控制器有12个通道(DMA1有7个通道, DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。
1. 用DMA传输数据到USART1过程
- 当发生TXE事件(TDR为空)产生DMA请求到DMA控制器 -> DMA应答,访问外设 -> 外设受到应答信号,释放请求->DMA撤销应答
- DMA将数据加载到外设TDR
- 计数器DMA_CNDTRx递减
2. 注意
- 编号低的通道优先级高
- 每次传输后相关寄存器自减
二、分析程序
1. 主函数
主要功能:用DMA移动数据由内存SendBuff到外设USART1,CPU处理其他事情
1. USART1_Config();用于配置串口通信
2. USART1_DMA_Config();用于配制DMA:由内存到外设
3. LED_GPIO_Config();用于配制LED,供CPU控制
#include "stm32f10x.h"
#include "bsp_usart1.h"
#include "bsp_led.h"
extern uint8_t SendBuff[SENDBUFF_SIZE];//
static void Delay(__IO u32 nCount);
/**
* @brief
* @param
* @retval
*/
int main(void)
{
/* USART1 config 115200 8-N-1 */
USART1_Config();
/* DMA配置 */
USART1_DMA_C