아두이노, stm 32와 모듈들을 이용하여 제어 해보는 프로젝트
UART 수신 방식 – 인터럽트 기반 사용된 방식: 인터럽트 방식 (Interrupt-based UART Receive)
코드 HAL_UART_Receive_IT(&huart2, &rx2char, 1); HAL_UART_Receive_IT(&huart6, &btchar, 1);
수신 콜백 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) USART2와 USART6 모두 인터럽트 방식으로 수신되고 있으며, 수신된 문자는 HAL_UART_RxCpltCallback() 함수에서 처리
GPIO 입력 방식 – 버튼 B1 사용된 방식: 외부 인터럽트 (EXTI) + 풀다운 없음 코드 GPIO_InitStruct.Pin = B1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
GPIO_MODE_IT_FALLING: 버튼을 누르면 falling edge에서 인터럽트 발생.
GPIO_NOPULL: 내부 풀업/풀다운 저항이 설정되어 있지 않음.
GPIO 출력 방식 – LED 제어 사용된 방식: 수동 제어 방식 (제어 함수 호출) 코드 HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
LD2 및 TEST_LED는 단순히 HAL_GPIO_WritePin()으로 On/Off를 제어 → 인터럽트 없음, 직접 제어 방식 (Polling or 호출 방식)
DHT11 센서 방식 사용된 방식: 타이밍 기반 Polling 방식 (소프트웨어 타이밍) 코드 dht11Data = DHT11_readData(); DHT11 센서는 인터럽트 방식이 아닌 소프트웨어 타이밍 기반의 비동기 Polling 방식으로 구현되어 있는 것이 일반적입니다.
LCD (I2C) 출력 방식 사용된 방식: I2C 마스터 전송 방식 (Polling or Blocking) 코드 LCD_writeStringXY(0, 0, "hello lcd"); → Blocking 방식 (인터럽트 or DMA 아님)
UART 수신 인터럽트 HAL_UART_Receive_IT() 사용 버튼 입력 (B1) 외부 인터럽트 + NOPULL GPIO_MODE_IT_FALLING, 외부 풀업 필요 LED 출력 직접 제어 (Polling 방식) HAL_GPIO_WritePin() DHT11 센서 Polling (소프트 타이밍) 인터럽트 아님 LCD 출력 I2C Blocking