小弟新手请求各位牛人帮忙解决有关于TIM1和DMA结合实现输出SPWM问题

2019-08-15 16:20发布

各位stm32牛人,求帮小弟解答一个有关STM32的TIM和DMA应用的问题:

小弟我在制作一个逆变器,要在TIM1的CH1和CH2通道上输出SPWM波,通
过DMA的Channel5响应TIM1_UP的中断把SPWM波数组按顺序传递给TIM1的CH1输出完整的SPWM脉冲,但是CH2没有办法相应DMA了,不知道各位有没有合适的办法解决这个问题?

具体部分程序如下



RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1 ,ENABLE);

  
TIM_TimeBaseStructure.TIM_Prescaler = 0;   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   TIM_TimeBaseStructure.TIM_Period = TimerPeriod-1;   TIM_TimeBaseStructure.TIM_ClockDivision = 0;   TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
        TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;   TIM_OCInitStructure.TIM_Pulse = 0;   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;   TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;   TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_Cmd(TIM1, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);   DMA_DeInit(DMA1_Channel5);   DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)TIM1_CCR1_Address;   DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&Duty_Cycle_sinewavetable;   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;   DMA_InitStructure.DMA_BufferSize =SPWM_COUNT;   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_Circular;   DMA_InitStructure.DMA_Priority = DMA_Priority_High;   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;   DMA_Init(DMA1_Channel5, &DMA_InitStructure); 
  DMA_Cmd(DMA1_Channel5, ENABLE);
其实我看论坛里也曾经有人遇到这个问题,不知道哪位仁兄解决了没有?http://www.openedv.com/posts/list/9367.htm
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。