Lined Notebook

[STM32F407VG Discovery] External Interrupt

by JungWook_

이번에는 PA0에 연결된 User Button을 인터럽트로 연결하겠습니다.

검색해도 잘 안나왔는데 어쩌다보니 해결됐습니다...

libopencm3/cm3/nvic.h헤더와 libopencm3/stm32/exti.h 헤더가 필요합니다.

nvic_enable_irq(NVIC_EXTI0_IRQ);
gpio_mode_setup(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO0);
exti_select_source(EXTI0, GPIOA);
exti_set_trigger(EXTI0, EXTI_TRIGGER_FALLING);
exti_enable_request(EXTI0);

인터럽트를 설정하는 부분입니다.

void exti0_isr(void)
{
	int buffer[2];
	buffer[0] = 0xa5;

	current_state = gpio_get(GPIOA, GPIO0);
	/* Button falling */
	if(current_state == true && prev_state == false) 
	{
		prev_state = current_state;
		command = !command;

		if(command) 
		{
			gpio_port_write(GPIOD, GPIOD | GPIO12);
			buffer[1] = 0x60;
			send_buffer(USART2, buffer);
		}
		else 
		{
			gpio_port_write(GPIOD, GPIOD & ~GPIO12);
			buffer[1] = 0x65;
			send_buffer(USART2, buffer);
		}
	}
	/* button rising */
	else if(current_state == false && prev_state == true) 
	{
		prev_state = current_state;
	}
}

클릭할 때마다 녹색 LED를 점멸하고 usart2번에 데이터를 보내는 코드입니다.

'Embedded' 카테고리의 다른 글

[STM32F407VG Discovery] Push Button  (0) 2021.02.18
[STM32F407VG Discovery] Toggle LED  (0) 2021.02.18
[STM32F407VG Discovery] PlatformIO 사용  (0) 2021.02.18
[Sensor] TFMini Plus on Arduino Leonardo  (0) 2019.11.28
[Verilog] 반가산기  (0) 2018.05.31

블로그의 정보

hongmono

JungWook_

활동하기