分析建设网站的可行性,免费查公司信息的网站,手机上如何设置wordpress,优化网站推广排名DMA 直接存储器存取#xff08;协助CPU完成数据转运#xff0c;可以直接访问32位内部存储器#xff0c;内存SRAM#xff0c;程序存储器Flash#xff0c;寄存器等#xff09; DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输#xff0c;无须CPU干预#…DMA 直接存储器存取协助CPU完成数据转运可以直接访问32位内部存储器内存SRAM程序存储器Flash寄存器等 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输无须CPU干预节省了CPU的资源 12个独立可配置的通道 DMA17个通道C8T6只有这个 DMA25个通道 每个通道都支持软件触发和特定的硬件触发 如存储器-》存储器如SRAM-》Flash 硬件触发外设-》存储器如ADC的数据只有转换完成触发DMADMA才完成一次转运。 STM32F103C8T6 DMA资源DMA17个通道 计算机的5的部分运算器,控制器CPU存储器输入和输出设备 虽然各个通道之间独立工作但DMA总线只有一条所以所有的通道只能分时复用这条DMA总线如果产生冲突就会由仲裁器根据通道的优先级设置谁先用谁后用 如果DMA和CPU访问同一个目标~~~~~~~~ DMA就会暂CPU的访问防止冲突。 不过总线仲裁器仍然保证CPU得到一半的总线带宽 DMA总线用于访问各个存储器内部多个通道可以独立的进行数据转运 仲裁器:用于调度各个通道防止冲突 AHB从设备用于配置DMA参数 DMA请求用于硬件触发DMA的数据转运 Flash 是ROM的一种不论哪个总线访问都是只读不写 如果DMA的目的地址写了Flash那么转运的时候就会出错。 可以配置Flash才可以写们很复杂 数据寄存器可以正常读写
DMA框图 自动重装和存储器到-》存储器软件触发不能同时使用因为会导致一直转运停不下来。
数据宽度 数据转运DMA ADC扫描模式DMA const 修饰的变量会存放在flash里 尽可能将比较大无需修改的数组常量常变量存放在flash 临时变量会被存储在SRAM 想要查找某个寄存器的地址 1先查一下这个寄存器所在外设的地址映像再去查对应外设的寄存器的映像
DMA中断
就配置DMA_ITconfig() 然后配置NVIC
DMA转运的三个条件
开启DMA 1.传输计数器0 2.触发源有信号 3.DMA使能 给传输计数器写值必须关闭DMA规定c
修改传输计数器的值的条件
必须给DMA失能让DMA停止转运
void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);
void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);
//中断
void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);//传输计数器
void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);
//获取标志位 判断是否转运完成
FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);void DMA_ClearFlag(uint32_t DMAy_FLAG);
//获取中断标志位
ITStatus DMA_GetITStatus(uint32_t DMAy_IT);
void DMA_ClearITPendingBit(uint32_t DMAy_IT);DMA数据转运程序 main.c
ADC多通道DMA