• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32f429双缓存dma定时dac输出怎么配置

yhj416606438 2021-12-31 浏览量:604
stm32f429双缓存dma定时dac输出怎么配置
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 代码可以参考一下。

    DMA_DeInit(DMA1_Stream4);
        DMA_StructInit(&DMA_InitStructure);
        DMA_InitStructure.DMA_Channel = DMA_Channel_7;
        DMA_InitStructure.DMA_PeripheralbaseAddr = (uint32_t)&USART3->DR; //数据传输的外设首地址
        DMA_InitStructure.DMA_Memory0baseAddr = (uint32_t)Buffer0; //自己定义待发送数组的首地址,要强制转换为32位
        DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; //数据传输方向选择为内存->外设
        DMA_InitStructure.DMA_BufferSize = 4; //传输数据大小为8,大小要配合定义的数组类型和外设数据类型,否则会丢失或补充数据
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器自动增加禁止,因为这里只用到了 DR 数据寄存器
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址自增允许,因为要读取一个数组
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外设的数据大小,因为 USART3_DR 数据寄存器为8位,故选Byte
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //这里也选 Byte
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //DMA 传输模式为 DMA_Mode_Normal,如果为 DMA_Mode_Circular将会循环传输
        DMA_InitStructure.DMA_Priority = DMA_Priority_Low; //优先级为 High
        DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
        DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
        DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
        DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
        DMA_DoubleBufferModeConfig(DMA1_Stream4 (uint32_t)Buffer1 DMA_Memory_0);
        DMA_DoubleBufferModeCmd(DMA1_Stream4 ENABLE);

    • 发布于 2022-01-05
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:2
  • 双缓冲机制可以让数据在传输时候不断流也就是我们所谓的PING-PONG-BUFFER也就是说有AB两个BUFFERDMA访问A时候CPU访问BDMA访问B时候CPU访问A.
    • 发布于2022-01-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 本质上,就是在DMA的中断中,修改DMA的参数,把数据的地址换一下
    • 发布于2022-01-10
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32f429双缓存dma定时dac输出怎么配置