zoukankan      html  css  js  c++  java
  • DMA

    DMA(DMA_Mode_Circular):

    • 外设数据 <->        内存
    • 内存      <->         内存

    DMA1:7通道

    (大容量设备:DMA2:5通道)

    DMA1

    DMA2

    简介

    • 两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道都同样支持软件触发
    • 优先级:各个通道数据同时Ready时,所在组优先级高的先,在相等优先权时由硬件决定(顺序表)
    • 模式:转移1次/不断转移
    • 中断/标志:每个通道都有 3 个事件标志(DMA 半传输,DMA 传输完成和 DMA 传输出错),
    • 数据:单次传输最大65536

      • 类型:1字节/半字(2字节)/字(4字节),独立数据源和目标数据区的传输宽度
      • Size:多少个<半字>/<字>/<字节>
    • 通道:每个通道可对应几种外设,一个通道同一时间只能使用一个外设:各个通道对应指定的外设
    • DMA和CPU不能同时使用总线,可设置竞争模式
    • 外设和存储器的传输数据量可以通过DMA_CCRx寄存器中的PSIZE和MSIZE位
    • DMA_CCRx
      • PSIZE: 外设的传输数据单位
      • MSIZE:存储器的传输数据单位

    库:

      DMA_InitTypeDef DMA_InitStructure; 
        
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//DMA时钟
    
        DMA_DeInit(DMA1_Channel4);
    
        DMA_InitStructure.DMA_PeripheralBaseAddr =  (uint32_t) & (ADC1->DR); //外设寄存器基地址
        DMA_InitStructure.DMA_MemoryBaseAddr =(u32)data; //RAM基地址
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //传输方向
        DMA_InitStructure.DMA_BufferSize = length;//Size
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设的地址是否自动增加
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //RAM的地址是否自动增加
    

    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize =DMA_MemoryDataSize_HalfWord; //传输单位!!!!!!!!

    
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//DMA_Mode_Normal; //是否不断传输
        DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //优先组
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //是不是RAM2RAM
        DMA_Init(DMA1_Channel4, &DMA_InitStructure); 
        
        DMA_ITConfig(DMA1_Channel5,DMA_IT_TC,ENABLE ); //DMA中断(别忘了NVIC)
        USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);//打开外设的DMA连接
      // ADC_TempSensorVrefintCmd(ENABLE);//打开内部温度和电压传感器的DMA连接 DMA_Cmd(DMA1_Channel4,ENABLE);//开启DMA

    选择用DMA发送串口数据时,DR和DMA会自动配合

  • 相关阅读:
    关于闹钟的题
    【历史】- UNIX发展史(BSD,GNU,linux)
    使用EF操作Mysql数据库中文变问号的解决方案
    javascript方法的方法名慎用close
    使用VS2013 + EF6 + .NET4.5 连接Mysql数据库
    ADO.NET生成的数据库连接字符串解析
    在WebBrowser控件使用js调用C#方法
    Mysql数据库之auto_increment
    Visual Studio插件Resharper 2016.1 及以上版本激活方法【亲测有效】
    Windows下Mysql5.7开启binlog步骤及注意事项
  • 原文地址:https://www.cnblogs.com/2cats/p/3583392.html
Copyright © 2011-2022 走看看