وقفه خارجی در ARM

کار با وقفه خارجی


خلاصه

در این آموزش با واحد وقفه خارجی آشنا می شویم. سپس در غالب یک پروژه با استفاده از وقفه خارجی، متناظر با هر کلید فشاری یکی از LED های برد آموزشی را روشن و خاموش می کنیم


مشاهده ویدیو


ایجاد پروژه در نرم افزار کیوب


انتخاب پین های متناسب با LED ها و کلید های فشاری برد آموزشی در حالت وقفه خارجی



انجام تنظیمات مربوط به وقفه خارجی


فعال کردن وقفه خارجی



در نرم افزار Keil می توان از قسمت Application/User به برنامه اصلی دسترسی داشت



تشریح کد برنامه


هدرفایل های مورد نیاز پروژه


[pastacode lang=”c” manual=”%2F*%20Includes%20——————————————————————*%2F%0A%23include%20%22main.h%22%0A%23include%20%22stm32f1xx_hal.h%22″ message=”” highlight=”” provider=”manual”/]


پیش تعریف توابع ایجاد شده توسط نرم افزار کیوب


[pastacode lang=”c” manual=”%2F*%20Private%20function%20prototypes%20———————————————–*%2F%0Avoid%20SystemClock_Config(void)%3B%0Astatic%20void%20MX_GPIO_Init(void)%3B” message=”” highlight=”” provider=”manual”/]


جزئیات تابغ MX_GPIO_Init


[pastacode lang=”c” manual=”%0A%2F**%20Configure%20pins%20as%20%0A%20%20%20%20%20%20%20%20*%20Analog%20%0A%20%20%20%20%20%20%20%20*%20Input%20%0A%20%20%20%20%20%20%20%20*%20Output%0A%20%20%20%20%20%20%20%20*%20EVENT_OUT%0A%20%20%20%20%20%20%20%20*%20EXTI%0A*%2F%0Astatic%20void%20MX_GPIO_Init(void)%0A%7B%0A%0A%20%20GPIO_InitTypeDef%20GPIO_InitStruct%3B%0A%0A%20%20%2F*%20GPIO%20Ports%20Clock%20Enable%20*%2F%0A%20%20__HAL_RCC_GPIOC_CLK_ENABLE()%3B%0A%0A%20%20%2F*Configure%20GPIO%20pin%20Output%20Level%20*%2F%0A%20%20HAL_GPIO_WritePin(GPIOC%2C%20GPIO_PIN_2%7CGPIO_PIN_3%7CGPIO_PIN_4%7CGPIO_PIN_5%2C%20GPIO_PIN_RESET)%3B%0A%0A%20%20%2F*Configure%20GPIO%20pins%20%3A%20PC2%20PC3%20PC4%20PC5%20*%2F%0A%20%20GPIO_InitStruct.Pin%20%3D%20GPIO_PIN_2%7CGPIO_PIN_3%7CGPIO_PIN_4%7CGPIO_PIN_5%3B%0A%20%20GPIO_InitStruct.Mode%20%3D%20GPIO_MODE_OUTPUT_PP%3B%0A%20%20GPIO_InitStruct.Speed%20%3D%20GPIO_SPEED_FREQ_LOW%3B%0A%20%20HAL_GPIO_Init(GPIOC%2C%20%26GPIO_InitStruct)%3B%0A%0A%20%20%2F*Configure%20GPIO%20pins%20%3A%20PC6%20PC7%20PC8%20PC9%20*%2F%0A%20%20GPIO_InitStruct.Pin%20%3D%20GPIO_PIN_6%7CGPIO_PIN_7%7CGPIO_PIN_8%7CGPIO_PIN_9%3B%0A%20%20GPIO_InitStruct.Mode%20%3D%20GPIO_MODE_IT_RISING_FALLING%3B%0A%20%20GPIO_InitStruct.Pull%20%3D%20GPIO_NOPULL%3B%0A%20%20HAL_GPIO_Init(GPIOC%2C%20%26GPIO_InitStruct)%3B%0A%0A%20%20%2F*%20EXTI%20interrupt%20init*%2F%0A%20%20HAL_NVIC_SetPriority(EXTI9_5_IRQn%2C%200%2C%200)%3B%0A%20%20HAL_NVIC_EnableIRQ(EXTI9_5_IRQn)%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]


تابع main


در ابتدای برنامه تمام بخش های میکروکنترلر ریست می شود، واحد کلاک میکرو کنترلر تنظیم می شود و واحد GPIO طبق آنچه که در نرم افزار کیوب انتخاب کردیم تنظیم می شود.


[pastacode lang=”c” manual=”int%20main(void)%0A%7B%0A%20%20%2F*%20MCU%20Configuration———————————————————-*%2F%0A%0A%20%20%2F*%20Reset%20of%20all%20peripherals%2C%20Initializes%20the%20Flash%20interface%20and%20the%20Systick.%20*%2F%0A%20%20HAL_Init()%3B%0A%0A%20%20%2F*%20Configure%20the%20system%20clock%20*%2F%0A%20%20SystemClock_Config()%3B%0A%0A%20%20%2F*%20Initialize%20all%20configured%20peripherals%20*%2F%0A%20%20MX_GPIO_Init()%3B” message=”” highlight=”” provider=”manual”/]


تابع سرویس دهنده به روتین وقفه در فایل stm32f10x_it.c


[pastacode lang=”c” manual=”%2F******************************************************************************%2F%0A%2F*%20STM32F1xx%20Peripheral%20Interrupt%20Handlers%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20*%2F%0A%2F*%20Add%20here%20the%20Interrupt%20Handlers%20for%20the%20used%20peripherals.%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20*%2F%0A%2F*%20For%20the%20available%20peripheral%20interrupt%20handler%20names%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20*%2F%0A%2F*%20please%20refer%20to%20the%20startup%20file%20(startup_stm32f1xx.s).%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20*%2F%0A%2F******************************************************************************%2F%0A%0A%2F**%0A*%20%40brief%20This%20function%20handles%20EXTI%20line%5B9%3A5%5D%20interrupts.%0A*%2F%0Avoid%20EXTI9_5_IRQHandler(void)%0A%7B%0A%20%20%2F*%20USER%20CODE%20BEGIN%20EXTI9_5_IRQn%200%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%20EXTI9_5_IRQn%200%20*%2F%0A%20%20HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6)%3B%0A%20%20HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7)%3B%0A%20%20HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8)%3B%0A%20%20HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9)%3B%0A%20%20%2F*%20USER%20CODE%20BEGIN%20EXTI9_5_IRQn%201%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%20EXTI9_5_IRQn%201%20*%2F%0A%7D” message=”” highlight=”” provider=”manual”/]


تابع Callback وقفه


[pastacode lang=”c” manual=”%20void%20HAL_GPIO_EXTI_Callback(uint16_t%20GPIO_Pin)%0A%7B%0A%09switch%20(GPIO_Pin)%7B%0A%09%09case%20GPIO_PIN_6%20%3A%20HAL_GPIO_TogglePin(GPIOC%2CGPIO_PIN_2)%3B%0A%09%09break%3B%0A%09%09case%20GPIO_PIN_7%20%3A%20HAL_GPIO_TogglePin(GPIOC%2CGPIO_PIN_3)%3B%0A%09%09break%3B%0A%09%09case%20GPIO_PIN_8%20%3A%20HAL_GPIO_TogglePin(GPIOC%2CGPIO_PIN_4)%3B%0A%09%09break%3B%0A%09%09case%20GPIO_PIN_9%20%3A%20HAL_GPIO_TogglePin(GPIOC%2CGPIO_PIN_5)%3B%0A%09%09break%3B%09%09%0A%09%7D%0A%09%0A%7D” message=”” highlight=”” provider=”manual”/]



پروژه وقفه خارجی

کانال تلگرام نامینیک

گروه تلگرام نامینیک ARM STM32


Tags: , , , , , ,