PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : [سوال] تاثیر تایمر برروی یوزارت



mahtab68
23-08-2014, 13:46
سلام دوستان
من با استفاده از تایمر stm32 یه کلاکی تولید میکنم برای کار با یه سنسور نوری و اطلاعاتی که از سنسور میاد داخل میکرو رو با usart میفرستم برای کامپیوتر . کلاک رو با صفر و یک کردن یک پین خروجی در روتین وقفه تایمر تولید میکنم . زمانی که کلاک در حدود مثلا 5Khz هست usart با baudrate 57600 اطلاعات را بخوبی برای کامپیوتر ارسال میکنه اما وقتی کلاک رو افزایش میدم مثلا به 500Khz ، یوزارت نمیتونه ارسال رو انجام بده و تو دستور
while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE)) ;
گیر میکنه.
چطور میتونم این مشکلو حل کنم؟ اصن اینا چه ربطی به هم دارن؟ چون من اطلاعات رو میریزم داخل یک آرایه و تا وقتی آرایه رو کامل از طریق یوزارت ارسال نکردم اطلاعات جدید رو داخلش نمیریزم. ینی ممکنه این وقفه تایمر که حالا سرعتش زیاد شده وسط کار ارسال یوزارت مشکل بوجود بیاره؟

esisafa
23-08-2014, 18:39
لابد هنوز داده ی قبلی کاملا ارسال نشده شما داده ی جدید میفرستی

mahtab68
24-08-2014, 00:12
نه این مورد رو رعایت کردم قبل از ارسال داده فعلی داده جدیدی داخل بافر قرار نمیگیره برای ارسال.

Greatal
26-08-2014, 13:29
سلام دوست من
من تخصص زیادی ندارم ولی احتمالان یک از اینترا‍پت ها تون رو انقدر سریع اجرا می کنید که به اون یکی فرصت اجرا نمی رسه یا اینترا‍پت روتین یکی از قسمت هاتون زیادی بلنده یا شاید اینتراپت رو به موقع کلیر یا دیس ایبل اینیبل نمی کنید

mahtab68
01-09-2014, 14:02
چطور میشه Interrupt مربوط به timer را disable کرد؟

sadmonew
02-09-2014, 13:20
چطور میشه interrupt مربوط به timer را disable کرد؟
سلام
مثلا برای غیرفعال کردن وقفه تایمر 2 تو دستورات زیر enable رو disable کنید:

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

mahtab68
03-09-2014, 17:20
خیلی ممنون از کمکتون مشکلم حل شد. :o