bbbone 发表于 2018-8-25 21:07:43

STM32L476G-DISCOVERY中DMA的设置

之前的板子可以用DMA_InitTypeDef 来设置(初始化)

但是STM32L476G-DISCOVERY的设置中没有部分选项(上图中对勾选项是有的)

关于外设地址、储存地址、buffer size 怎么设置呢?

bbbone 发表于 2018-8-25 21:11:21

下面是我在 stm32l4xx _hal_dma.h中找到的定义,并没有部分项的设置
typedef struct
{
uint32_t Request;                   /*!< Specifies the request selected for the specified channel.
                                           This parameter can be a value of @ref DMA_request */

uint32_t Direction;               /*!< Specifies if the data will be transferred from memory to peripheral,
                                           from memory to memory or from peripheral to memory.
                                           This parameter can be a value of @ref DMA_Data_transfer_direction */

uint32_t PeriphInc;               /*!< Specifies whether the Peripheral address register should be incremented or not.
                                           This parameter can be a value of @ref DMA_Peripheral_incremented_mode */

uint32_t MemInc;                  /*!< Specifies whether the memory address register should be incremented or not.
                                           This parameter can be a value of @ref DMA_Memory_incremented_mode */

uint32_t PeriphDataAlignment;       /*!< Specifies the Peripheral data width.
                                           This parameter can be a value of @ref DMA_Peripheral_data_size */

uint32_t MemDataAlignment;          /*!< Specifies the Memory data width.
                                           This parameter can be a value of @ref DMA_Memory_data_size */

uint32_t Mode;                      /*!< Specifies the operation mode of the DMAy Channelx.
                                           This parameter can be a value of @ref DMA_mode
                                           @note The circular buffer mode cannot be used if the memory-to-memory
                                                 data transfer is configured on the selected Channel */

uint32_t Priority;                  /*!< Specifies the software priority for the DMAy Channelx.
                                           This parameter can be a value of @ref DMA_Priority_level */
} DMA_InitTypeDef;

bbbone 发表于 2018-8-25 21:14:43

DMA_Channel_TypeDef 只有register的设置
typedef struct
{
__IO uint32_t CCR;         /*!< DMA channel x configuration register      */
__IO uint32_t CNDTR;       /*!< DMA channel x number of data register       */
__IO uint32_t CPAR;      /*!< DMA channel x peripheral address register   */
__IO uint32_t CMAR;      /*!< DMA channel x memory address register       */
} DMA_Channel_TypeDef;

feixiang20 发表于 2018-8-25 22:59:40

参考看看库函数中
DMAy_Channelx->CNDTR = DMA_InitStruct->DMA_BufferSize;
而CNDTR即数据传输数量 (Number of data to transfer)
数据传输数量为0至65535。这个寄存器只能在通道不工作(DMA_CCRx的EN=0)时写入。通
道开启后该寄存器变为只读,指示剩余的待传输字节数目。寄存器内容在每次DMA传输后递
减。
数据传输结束后,寄存器的内容或者变为0;或者当该通道配置为自动重加载模式时,寄存
器的内容将被自动重新加载为之前配置时的数值。
当寄存器的内容为0时,无论通道是否开启,都不会发生任何数据传输。
页: [1]
查看完整版本: STM32L476G-DISCOVERY中DMA的设置