本帖最后由 东方树叶乌龙茶 于 2016-7-21 14:11 编辑 求助大神们,现在想用定时器触发DMA,将一个地址里的数据转移到数组里。每1us转移一次,一共转移30次。也就是说源地址不变,目标地址递增。这个数组最终用了30us存入30个数据。 DMA的配置: DMA_InitTypeDef DMA_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); DMA_InitStructure.DMA_Channel = DMA_Channel_7; DMA_InitStructure.DMA_PeripheralBaseAddr =ADDRESS;//设置DMA源 DMA_InitStructure.DMA_Memory0BaseAddr = DMA_Address;//(uint32_t)&Answer_Frame[5];//内存地址 DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory;//方向:内存到内存 DMA_InitStructure.DMA_BufferSize = 1;//传输大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不增 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址自增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据单位 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存数据单位 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//正常模式,只做一次DMA传输 DMA_InitStructure.DMA_Priority = DMA_Priority_High;//优先级:高 DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA2_Stream1, &DMA_InitStructure); 问题是: BufferSize设置为30,则触发一次后30个数据就全转移完了。 BufferSize设置为1,就只能在数组第一位存入数据其余全是空白的了。 Mode设成Circular也是不对的。定时器那里我只是加了一句:TIM_DMACmd(TIM8,TIM_DMA_Update,ENABLE); 是要定时中断服务程序里面再写什么吗?还是STM32F4的DMA没法直接配置成我想要的这种形式? 请各位大神予以指点!谢谢 |
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
STM32F407 的1588问题(已解决)
MemoryToMemory模式不能设置请求源,DMA会直接以总线速率将数据转移。所以要用外设到内存模式
佬,能问下为啥memory to memory 不能被请求啊,是因为产生一个定时器中断也可以在中断处理函数里面进行memore to memory 所以不用DMA多次一举吗。佬,这个不能被请求是从哪里看到的呀