大家好,最近做个逆变器的项目,想利用DMA直接修改TIM4/8的CCR 寄存器数据,从而实现最少资源开销的定时器控制,
程序定时器DMA配置如下:
// //------ TIM4_UP---DMA1--Channel_2--Stream6 configuration --------------
// DMA_DeInit(DMA1_Stream6);
// DMA_InitStructure.DMA_Channel = DMA_Channel_2;
// DMA_InitStructure.DMA_PeripheralBaseAddr = TIM4_CCR1_ADDRESS;
// DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)TIM4_DMA_PS;
// DMA_InitStructure.DMA_BufferSize = 1;
// DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//DMA_PeripheralDataSize_Byte;
// DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
// DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
// DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//Enable;
// DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//Enable;
// DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
// 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(DMA1_Stream6, &DMA_InitStructure);
// /* Enable DMA1_Stream6 */
// DMA_Cmd(DMA1_Stream6, ENABLE);
// //-------------------------------------
// TIM_DMAConfig(TIM4, TIM_DMABase_CCR1, TIM_DMABurstLength_1Transfer);//Set dma basee and num
// TIM_DMACmd(TIM4,TIM_DMA_Update,ENABLE);//TIM4_UP DMA enable
仿真看,MDA没有把“
(uint32_t)TIM4_DMA_PS”的数据搬移到CCR1中,CCR1中总是0,这是为何呢?
那我最过DMA的TIM控制呢? 希望能指教下!非常感谢
我的QQ:349166370
|