سلام به قطعه کد زیر توجه کنید
کد های بالا تنظیمات بود که پرسکالر در نهایت روی صفر قرار می گیره یعنی بیش ترین سرعت ممکن که برای میکروی stm32f030k6 این مقدار 48 مگ هست
حالا به روش زیر مقدار دوره تناوب رو به دست میارم
توجه مهم و مسئله اصلی اگر قطعه کد بالا بدون هیچ تاخیری مثل تاخیر 100 میکروثانیه آخر که گذاشتم نوشته بشه یا اینکه بعدش هیچ تابع دیگری نیاد درست کار می کنه و مقدار زمان را به خوبی در c
یه چیز عجیب دیگه اینه که مقدار پرسکالر رو چه صفر بذارم چه هر عدد دیگه تو مقادیر خروجی فرقی نمی کنه و انگار که مقدار پرسکالر روی 0 باقی مونده باشه
داریم ولی به محض اینکه یه تابع یا تاخیری در روند برنامه بیاد کلا قاطی می کنه و مقدار رو نشون نمیده از stm studio استفاده می کنم
به نظرتون مشکل کجاست ؟
GPIOA->MODER |=(1<<23);
GPIOA->AFR[1] |=(1<<13);
TIM1->PSC =479;
TIM1->CR1 |=TIM_CR1_ARPE;
//TIM1->CCR2 |=0xFFFF;
TIM1->CCMR2 |=(1<<8) | (1<<12) | (1<<13);
TIM1->CCER |=(1<<12);
//TIM1->SMCR |=0x80;
TIM1->CR1 |=TIM_CR1_CEN;
کد های بالا تنظیمات بود که پرسکالر در نهایت روی صفر قرار می گیره یعنی بیش ترین سرعت ممکن که برای میکروی stm32f030k6 این مقدار 48 مگ هست
حالا به روش زیر مقدار دوره تناوب رو به دست میارم
TIM1->CNT=0;
//while((TIM1->SR & 0x0010) == 0x0010){}
while((TIM1->SR & 0x0010) == 0){}
a=TIM1->CCR4;
//while((TIM1->SR & 0x1000) == 0x0010){}
while((TIM1->SR & 0x0010) == 0){}
b=TIM1->CCR4;
c=b-a;
//delay_us(100);
توجه مهم و مسئله اصلی اگر قطعه کد بالا بدون هیچ تاخیری مثل تاخیر 100 میکروثانیه آخر که گذاشتم نوشته بشه یا اینکه بعدش هیچ تابع دیگری نیاد درست کار می کنه و مقدار زمان را به خوبی در c
یه چیز عجیب دیگه اینه که مقدار پرسکالر رو چه صفر بذارم چه هر عدد دیگه تو مقادیر خروجی فرقی نمی کنه و انگار که مقدار پرسکالر روی 0 باقی مونده باشه
داریم ولی به محض اینکه یه تابع یا تاخیری در روند برنامه بیاد کلا قاطی می کنه و مقدار رو نشون نمیده از stm studio استفاده می کنم
به نظرتون مشکل کجاست ؟
دیدگاه