ex02.3_SW_int - withrobot/myCortex-STM32F4 GitHub Wiki
κ°μ
SW_int μμ λ STM32 MCUμ GPIO μ λ ₯ μΈν°λ½νΈλ₯Ό μ¬μ©νλ μλ₯Ό 보μ¬μ£ΌκΈ° μν΄ μ€μμΉ μ λ ₯μ μΈν°λ½νΈλ‘ λ°μ μ²λ¦¬νλ μμ λ₯Ό λ§λ κ²μ λλ€. λ³Έ μμ λ₯Ό μ€ννκΈ° μν΄μλ Switch λλΌμ΄λ²μμ μλ΄νλ λ°μ κ°μ΄ λ³λμ μ€μμΉ νλ‘λ₯Ό ꡬμ±ν΄μΌ ν©λλ€.
κ΄λ ¨ Peripheral
κ΄λ ¨ Driver
μμ€ μ΄ν΄λ³΄κΈ°
main.c νμΌ νλλ‘ κ΅¬μ±λμ΄ μμ΅λλ€. ex02.2_SW μμ μ λ€λ₯Έ λΆλΆλ§ μ΄ν΄λ³΄λλ‘ νκ² μ΅λλ€.
15 line:
SW_INT_INIT();
μ€μμΉ κ΄λ ¨ ν리νλ΄λ€μ μ΄κΈ°ννκ³ μΈν°λ½νΈ μ€μ μ νλ ν¨μλ₯Ό νΈμΆν©λλ€. μ€μμΉ μΈν°λ½νΈλ₯Ό μ¬μ©νκΈ° μν΄ μ΅μ΄ νλ² μ΄κΈ°νκ° μ΄λ£¨μ΄μ ΈμΌ ν©λλ€.
19 line:
__WFI();
WFIλ Wait For Interrupt μ λλ€. μ¦ μ΄ ν¨μλ₯Ό λ§λλ©΄ MCUμμ μ무 μΈν°λ½νΈκ° λ°μν λ κ°μ§ μ μ λ ₯ λκΈ°μνλ‘ λ©μΆ°μμ΅λλ€.
24 line: // SW1 : PA0(EXTI0) Interrupt Handler void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(SW_1_EXTI_LINE) != RESET) { LED_R_TOGGLE(); EXTI_ClearITPendingBit(SW_1_EXTI_LINE); } } PA0νμμ λ°μνλ μΈν°λ½νΈλ₯Ό μ²λ¦¬νλ νΈλ€λ¬ ν¨μμ λλ€. PA0νμ μΈν°λ½νΈλ EXTI0_IRQHandler()λ‘ λ€μ΄μ΅λλ€. PB0, PC0, PD0 λ±λ μμ μ΄ νΈλ€λ¬μμ μ²λ¦¬λ©λλ€. μ¦ λͺ¨λ ν¬νΈμ 0λ² νμ μν κ³΅μ© μΈν°λ½νΈ νΈλ€λ¬μ λλ€. μ΄μ²λΌ 곡μ©μΌλ‘ μ¬μ©νλ μΈν°λ½νΈ νΈλ€λ¬μμλ μ€μ μΈν°λ½νΈκ° λ°μν νμ΄ μ λ§ PA0μΈμ§, μλλ©΄ PB0λ PC0μΈμ§ νμΈνκ³ κ·Έμ λ°λΌ λ€λ₯Έ λμμ νκ² λ©λλ€. νμ§λ§ μ΄ μμ μμλ EXTI0μ μ°κ²°ν μΈν°λ½νΈ μμ€λ PA0 λ°μ μμΌλ―λ‘ λ³λμ νμΈ μ½λλ λ£μ§ μμμ΅λλ€.
μ΄ νΈλ€λ¬μμλ μ μ LEDλ₯Ό λ°μ μν€κ³ μΈν°λ½νΈ μνλ₯Ό μ΄κΈ°νν΄ μ€λλ€. μΈν°λ½νΈ μνλ₯Ό μ΄κΈ°ν ν΄ μ£Όμ§ μμΌλ©΄ μΈν°λ½νΈκ° κ³μν΄μ λ°μνκ² λ©λλ€.
34 line: // SW2 : PB10(EXTI10) Interrupt Handler void EXTI15_10_IRQHandler(void) { if (EXTI_GetITStatus(SW_2_EXTI_LINE) != RESET) { LED_G_TOGGLE(); EXTI_ClearITPendingBit(SW_2_EXTI_LINE); } } PA0λ₯Ό μν μΈν°λ½νΈ νΈλ€λ¬λ EXTI0_IRQHandler()μ΄μ§λ§ PB10 μ¦ 10λ² νμ μν μΈν°λ½νΈ νΈλ€λ¬λ EXTI15_10_IRQHandler()μ λλ€. μ΄ ν¨μλ 10~15λ² ν 곡μ©μΌλ‘ μ¬μ©ν©λλ€. νΈλ€λ¬ λ΄λΆμμ μ²λ¦¬νλ λ‘μ§μ λμΌν©λλ€.
μ€ν λ°©λ²
νλ‘μ νΈλ₯Ό λΉλν΄μ λ€μ΄λ‘λ ν©λλ€. Switch λλΌμ΄λ²μμ μ€λͺ ν λ°μ κ°μ΄ μ€μμΉ νλ‘λ₯Ό ꡬμ±ν©λλ€.
PA0μ μ°κ²°λ μ€μμΉλ₯Ό νλ² λλ₯Ό λ λ§λ€ μ μ LEDκ° ν κΈλλ κ²μ νμΈν©λλ€. PB10μ μ°κ²°λ μ€μμΉμ λ Ήμ LEDλ λμΌνκ² λμν©λλ€.