دوستان سلام : امروز میخوام براتون یه اموزش کوتاه اما خیلی کاربردی بذارم
SystickTimer
SystickTimer یک تایمر 24 بیتی که توی پردازنده های Cortex قرار گرفته.اساس کار این نوع تایم به این صورته که مقدار اولیه به تایمر میدیم و تایمر شروع به شمارش رو به پایین میکنه و وقتی که مقدارش به صفر رسید وقفه به ما میده. همین تمام ؛ فرکانس شمارش این تایمر برابر مقدار فرکانس پردانده است ( 72000000HZ )؛ از این تایمر برای ساخت delay زیاد استفاده میشه؛ حالا میخوایم با استفاده از SystickTimer فانکشن delay_ms بسازیم و توی کد هامون ازش استفاده کنیم.
کد برنامه :
1 2 3 4 5 6 7 8 9 10 |
void delay_ms (int DELAY ) { SysTick_Config(72000); delay=DELAY; while(delay); } void SysTick_Handler() { delay--; } |
توضیح :
خط 1 : یک فانکشن delay_ms با ورودی DELAY میسازیم.که مقدار میلی ثانیه ای رو که میخوایم تو برنامه بهش بدیم.
خط 3 : با استفاده از تابع (SysTick_Config(x مقدار اولیه ای که میخوایم SystickTimer از اونجا شروع به شمارش کنه و پاین بیاد رو بهش میدیم؛ حالا چرا من 72000 رو بهش دادم؟چون فرکانس پردازنده ما 72000000 هرتز هست و من میخوام یک میلی ثانیه رو تولید کنم بنابر این اگر SystickTimer از 72000 با فرکانس 72 مگا هرتز شروع به شمارش کنه و به مقدار صفر برسه 1 میلی ثانیه طول میکشه و ما اینطوری میتونیم زمان 1 میلی ثانیه رو بسازیم :
72000000 / 72000 = 0.001
خط 7 : بعد از اینکه مقدار SystickTimer صفر شد به وقفش پرش میکنه که وقفه SystickTimer هم مثل دیگر وقفه ها در فایل startup قرار داره ( خط 76 ) از اونجا پیداش میکنیم و تابع ()void SysTick_Handler رو میسازیم و به هنگام رخ دادن وقفه برنامه به داخل تابع پرش میکنه، داخل تابع دستوراتی که به هنگام وقفه باید اجرا شوند رو مینویسم.
کد بالا اینطوری کار میکنه که تایمر از 72000 میشماره رو به پاین به صفر که رسید میپره داخل تابع وقفه اونجا یدونه کم میکنه از delay بعد دوباره میره از 72000 شروع به شمارش رو به پاین میکنه تا صفر بشه وارد وقفه بشه و از delay یکی کم کنه اینقدر این اتفاق تکرار میشه تا مقدار delay برابر صفر بشه و از وایل خارج بشه؛ میتونید کد بالا رو به عنوان delay_ms پروژه هاتون استفاده کنید.
خدانگه دارتون.
مهمان
سلام و عرض ادب
اگه حافظه فلش STM32 من 2مگا بایت باشه آیا من میتونم یه آرایه 512 کیلو بایتی تو حافظه فلشش ذخیره کنم؟
مهمان
سلام از کتابخانه cmsis در این پروژه استفاده شده؟ من نمیدونم ببخشید. اگه ممکنه اضافه کردن کتابخانه cmsisبه من
بیسواد بگید ممنون