本文为《Mastering STM32》第九章的学习笔记。本文一共901字。
9.1
—
DMA介绍
9.1.1 DMA的必要性与其在内部总线中的作用
Stm32中的每个外设都需要和内核进行数据交换,有的是SPI,UART接口类使用具体协议与外界通信的外设,有的是像GPIO改变寄存器使端口进行电平变化。这些外设的数据传输活动都会引起内核在被占用做不了其他事。 举个例子:在使用UART2接口的时候,我们在SRAM中定义一个数组uint8_t buf[20]作为串口接收数据的缓存,使用HAL_UART_Receive(&huart2, buf, 20,HAL_MAX_DELAY)接收20个字节的数据,HAL_UART_Receive()函数会20次读取huart2.Instance->DR字段的数据,于是Cortex-M内核就需要等待20次UART RXNE 标志位被置位(该标志位被置位意味着有新数据被接收)。在这个20次传输中,Cortex-M内核像下图一样,只能进行数据传输和等待标志置位。![5afdec79e749ec6010e3de2306c2002d.png](https://img-blog.csdnimg.cn/img_convert/5afdec79e749ec6010e3de2306c2002d.png)
同理,在使用有些被挂在低速总线上的外设在传输数据中需要CPU等待更多时间,这就是为什么如今的高性能处理器要提供一个专门的硬件去实现外设与内部存储之间的数据传输的原因。
在学习DMA更多的细节之前,来看看从外设传输到SRAM内存中涉及到