高级会员

- 积分
- 526
- 金钱
- 526
- 注册时间
- 2013-11-25
- 在线时间
- 0 小时
|
5金钱
当只使用定时器产生PWM时,我能够得到符合程序的波形,如下图所示
我要求得到的PWM波如上,是:A/B/C三路波形占空比相同,彼此高电平时间不重叠
但是当我在程序中加入ADC+DMA采样程序后(无中断程序),得到的三路PWM波占空比不再相同,C相时间会更长一些。此外,有时会出现三路波形同时为0的情况。
难道是使用ADC+DMA会影响PWM的产生么?
附上ADC+DMA的配置:
[mw_shl_code=c,true] DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&(ADC1->DR);
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize=M;
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_Channel1,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode=ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel=M;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_4,1,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_5,2,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_6,3,ADC_SampleTime_239Cycles5);
ADC_DMACmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
百度到了
:// ***注意*** //TIM3时钟和SPI1时钟不能同时打开,否则TIM3的CH1、CH2不能输出PWM,但CH3、CH4能输出 //APB1ENR最好全部打开,否则TIM1在极偶尔情况下会不工作 另外,STM32中很多的IO都是复用,对于具备多个复用功能的IO要尤其小心
|