DMA
DMA有3种实现方式:内存->内存;内存->外设;外设->内存 (外设->内存的DMA属于ADC) stm32有俩个DMA控制器: DMA1:7通道 DMA2:5通道,只存在于大容量(256K-512K)和互联型产品(f105和f107系列) rbt6开发板属于中容量,标准型,只有DMA1; 由图可知,内存->外设的方式,只能使用对应的通道,不能使用其他的。 而内存->内存的方式,可以使用所有的通道。 DMA一次可以传输2^16个字节的数据 那么,如果多个通道请求到来,应该怎么办? 这时,需要DMA的仲裁器进行仲裁: 1.首先,判断DMA通道x配置寄存器(DMA_CCRx)的PL位; 2.其次,如果PL位相同,判断通道的编号,编号越小,优先级越高。(同时,DMA1的优先级大于DMA2) typedef struct { uint32_t DMA_PeripheralBaseAddr;//外设地址 uint32_t DMA_MemoryBaseAddr; //存储器地址 uint32_t DMA_DIR; //传输方向 //这三个成员共同决定了内存->外设;外设->内存这俩种传输模式 uint32_t DMA_BufferSize; //传输的数量,单位由外设和存储器数据宽度决定 uint32_t DMA_PeripheralInc; //外设地址是否递增 uint32_t DMA