新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2018-2-28
- 在线时间
- 5 小时
|
1金钱
按照例子+搜索,分别编写了TIM2_CH2触发程序,ADC采样程序,DMA搬运程序;运用PWM(TIM2_CH1)跟踪一下ADC采样(在keil仿真时候可以跟踪一下);void Adc_Init(u32 *Buff)
{
Adc_TIM2_PWM_Confing(18000);
Adc_Config();
Adc_DMA_Config(Buff);
}
按照这个初始化顺序,仿真端口无PWM波,各种调试,均无结果,屏蔽掉Adc_Config();就有PWM波,
void Adc_Init(u32 *Buff)
{
Adc_Config();
Adc_TIM2_PWM_Confing(18000);
Adc_DMA_Config(Buff);
}
按照这个初始化顺序,端口仿真就可以测得PWM波;由此,我有一个疑问:
按照定时器触发ADC采样原理,无弄ADC是否采样,定时器程序应该始终运行才是,端口初始化完成后就有PWM波,但是没有,难道ADC初始化影响定时器? 请大侠帮忙分析一下,谢谢!@正点原子
附上ADC初始化程序
void Adc_Config(void)
{
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0XFFFFFFF0;//PA1
RCC->APB2ENR|=1<<9;//ADC1ê±Öóê1Äü
RCC->APB2RSTR|=1<<9;//ADC1¸′λ
RCC->APB2RSTR&=~(1<<9);// ¸′λ½áêø
RCC->CFGR&=~(3<<14);//·ÖÆμòò×óÇåáã
RCC->CFGR|=2<<14;// SYSCLK 6·ÖÆμ
ADC1->CR1&=0XF0FFFF;//1¤×÷Ä£ê½Çåáã
ADC1->CR1|=0<<16;//¶àá¢1¤×÷Ä£ê½
ADC1->CR1&=~(1<<8);//·Çé¨ÃèÄ£ê½
ADC1->CR2&=~(1<<1);// contéèÖÃêÇ·ñá¬Dø×a»»£¬μ¥′Î×a»»ÔòéèÖÃÎa0£¬á¬Dø×a»»éèÖÃÎa1
ADC1->CR2|=1<<8;//±íê¾ê1óÃDMA
ADC1->CR2&=~(7<<17);// extsel¡¾2£o0¡¿Çåáã
ADC1->CR2|=3<<17;//011±íê¾T2μÄcc2ê¼t
ADC1->CR2|=1<<20;//EXTTRIG1æÔòí¨μàμÄía2¿′¥·¢×a»»Ä£ê½£¨êÖ¶ˉ£© 1±íê¾ê1óÃía2¿ê¼tÆô¶ˉ×a»»
ADC1->CR2&=~(1<<11);// ALIGNêy¾Y¶ÔÆë£¨êÖ¶ˉ£©¶¨òå£o0£¨óò¶ÔÆë£©1£¨×ó¶ÔÆë£©
ADC1->SMPR2&=~(7<<3);//
ADC1->SMPR2|=0<<3;// 111±íê¾2éÑùÖüÆúÎa239.5¸öÖüÆú
ADC1->SQR1&=~(0XF<<20);// SQR1±íê¾ADC1æÔòDòáD¼Ä′æÆ÷1£¬ÕaD©Î»óéèí¼t¶¨òåÔú1æÔòí¨μà×a»»DòáDÖDμÄí¨μàêyÄ¿£o0000~1111 = 1~16 ×a»»
ADC1->SQR1|=0<<20;//1¸ö×a»»Ôú1æÔòDòáDÖD£¬Ö»×a»»1æÔòDòáD1
ADC1->SQR3&=0XFFFFFFE0;
ADC1->SQR3|=1;
ADC1->CR2|=1<<0;
ADC1->CR2|=1<<3;
while(ADC1->CR2&1<<3);//
ADC1->CR2|=1<<2;
while(ADC1->CR2&1<<2);//
}
|
最佳答案
查看完整内容[请看2#楼]
参考这里:http://www.openedv.com/forum.php?mod=viewthread&tid=109411&extra=page%3D1
|