در این مقاله پریفرال EXTI میکروکنترلر STM32F103C8 و رجیستر هاش رو بررسی میکنیم و اینکه برای تنظیم یک پین در حالت اینتراپت خارجی چه کدی باید بنویسیم و کدوم بیت ها رو در کدوم رجیسترهای پریفرال EXTI باید تغییر بدیم.
– اینتراپت خارجی با رجیسترها در میکروکنترلر STM32F103C8
اینتراپت خارجی با رجیستر ها در میکروکنترلر STM32F103
برنامه تنظیم پین PA0 در حالت اینتراپت خارجی در میکروکنترلر STM32F103 :
در این مقاله مرحله ی 3 و 4 و نقش پریفرال های AFIO و EXTI در تنظیمات اینتراپت خارجی در میکروکنترلر STM32 بررسی میشه.
پریفرال AFIO در میکروکنترلر STM32 و اینتراپت های خارجی
در پریفرال EXTI میکروکنترلر STM32F1 تا 20 خط اینتراپت میتونه وجود داشته باشه که خط های 0 تا 15 به پین های میکروکنترلر متصل شدن (بقیه به منابع داخلی وصل شدن). از بین تمام پین های صفر یعنی PA0 ، PB0 , PC0 … فقط یکی از اونها میتونه به خط صفر اینتراپت متصل بشه. همینطور از بین تمام پین های یک فقط یکی از اون ها میتونه به اینتراپت خط یک وصل بشه.
در رجیستر های EXTICR پریفرال AFIO برای برای هر خط اینتراپت چهار بیت وجود داره. مثلا برای وصل کردن پین PA0 که پین 0 پورت A هست به خط صفر اینتراپت خارجی باید در بیت های EXTI0 در رجیستر EXTICR1 صفر نوشت (خط 21 در برنامه ).
رجیسترهای پریفرال EXTI در میکروکنترلر STM32F103C8
در هر کدوم از 6 تا رجیستر پریفرال EXTI در میکروکنترلر STM32، تعداد 20 بیت وجود داره برای 20 تا خط اینتراپت ، برای هر خط اینتراپت یک بیت داریم در هر رجیستر.
1 – رجیستر EXTI_FTSR در میکروکنترلر STM32F1
اگر بیت مربوط به هر خط اینتراپت رو در این رجیستر یک کنیم در لبه ی پایین رونده ی پین مربوط به اون خط ، اینتراپت خواهیم داشت ( اگر اینتراپت رو فعال کنیم ) . اگر بیت مربوطه رو صفر کنیم ، در لبه ی پایین رونده اینتراپت نداریم.
برای فعال کردن اینتراپت در لبه ی پایین رونده پین PA0، بیت TR0 یک میشود.
2 – رجیستر EXTI_RTSR در میکروکنترلر STM32F1
اگر بیت مربوط به یک خط اینتراپت رو در این رجیستر یک کنیم ، در لبه ی بالارونده پین متصل شده به اون خط ، اینتراپت خواهیم داشت. اگر بیت مربوطه رو صفر کنیم در لبه ی بالارونده اینتراپت نداریم.
برای غیر فعال کردن اینتراپت در لبه بالارونده پین PA0، بیت TR0 در رجیستر RTSR صفر میشود.
3 – رجیستر EXTI_SWIER در میکروکنترلر STM32F1
اگر وقتی وضعیت بیت صفر هست اون رو یک کنیم. میتونیم به صورت نرم افزاری کاری کنیم که بدون اینکه لبه ی بالارونده یا پایین رونده روی پین داشته باشیم اینتراپت اتفاق بیافته .
4 – رجیستر EXTI_IMR در میکروکنترلر STM32F1
هر خط اینتراپت یک بیت در این رجیستر داره، اگر بیت مربوط به یک خط اینتراپت رو یک کنیم ، درخواست اینتراپت اون خط فعال میشه. اگر بیت مربوط به یک خط اینتراپت رو صفر کنیم ، درخواست اینتراپت مربوط به اون خط غیر فعال میشه.
فعال کردن درخواست اینتراپت خط صفر در پریفرال EXTI با یک کردن بیت MR0 در رجیستر EXTI_IMR در میکروکنترلر STM32 .
5 – رجیستر EXTI_PR در میکروکنترلر STM32F1
در این رجیستر برای هر خط اینتراپت یک بیت داریم ، که بیت فلگ اینتراپت هست، وقتی درخواست اینتراپت برای یک خط به پریفرال NVIC ارسال بشه، بیت فلگ اینتراپت در این رجیستر توسط سخت افزار یک میشه. ما فقط میتونیم بیت های این رجیستر رو صفر کنیم. وقتی در بیت های این رجیستر یک بنویسیم مقدارش صفر میشه و وقتی صفر بنویسیم تاثیری نداره.
قبل از فعال کردن اینتراپت خط صفر در پریفرال NVIC باید فلگ اینتراپت رو صفر کنیم. فلگ اینتراپت برای خط صفر در بیت PR0 هست و برای صفر کردن این بیت باید در اون عدد یک رو بنویسیم.
6 – رجیستر EXTI_EMR در میکروکنترلر STM32F1
هر خط اینتراپت یک بیت در این رجیستر داره، اگر بیت مربوط به یک خط اینتراپت رو یک کنیم ، ایونت اون خط فعال میشه. اگر بیت مربوط به یک خط اینتراپت رو صفر کنیم ، ایونت مربوط به اون خط غیر فعال میشه.