1. 스위치
- UP/DOWN/FIX로 온도 제어
- UP은 PB0에, DOWN은 PB2에, FIX는 PB1에 연결하여 제어하기
- 아래 회로도를 보고 사진3처럼 스위치 회로도 빵판에 구성하기
1-1. 스위치 옵션 설정
- PB0 GPIO INPUT으로 설정 후 사진1처럼 옵션설정
- XShell관찰 (스위치 누르면 0으로 출력되는 거 관찰)
2. FTDI USB-TTL
- PA9_USART-TX_FTDI-RX와 RXD 연결
- 신호 받기 위한 그라운드 GND 연결
3. 인터럽트로 해결
- PB0을 GPIO_EXTI0로
=> 클럭이 내려갔다 올라갔다 할 때 인터럽트 발생 - 회로도상 전압이 3.3V가 HIGH이고 이 상태로 유지되고 있는데 버튼을 누르면 0V(그라운드)로 내려옴
- 따라서, 인터럽트가 발생할 때 2가지 조건이 존재
=> 올라오는 순간(상승엣지) OR 내려가는 순간(하강엣지)에 인터럽트 발생 - 우리는 평상시에 HIGH로 있다가 버튼을 누르면 0V(그라운드)로 내려가기에 우리는 하강엣지에 인터럽트 발생하도록
- 사진3처럼 우선순위는 여러 종류의 인터럽트가 동시에 발생했을 때 순위가 높은 인터럽트를 먼저 처리하기 위해 3으로 설정
- 사진1/2/3처럼 코드 작성
- Core-Lib-Inc-new file에 utils.h 헤더파일 생성
- main 내 write 함수 재정의하기위해 Core-Src-new File로 utils.c 생성 후 write 함수 ctrl +x하여 붙여넣기
- main.c내 #include "utils.h"
- utils.h엔 사진2처럼 작성
- stm32f1xx_it.c에도 #include "utils.h"
- 사진3처럼 수정 (이때, stm32f1xx_hal_uart.h말고 main.h)
- 이때, utils.c에도 #include "utils.h"
- But, 제대로 안되기에 우선 stm32f1xx_it.c에 _write 함수 넣어서 실행
- utils.c에서 _write 함수 일단 제거
- 사진2처럼 새로운 파일 생성(Src말고 Inc에)
- 사진3처럼 작성
- 사진4처럼 새로운 파일 또 생성
- 사진1처럼 작성
- 사진2처럼 해당 소스코드 지우고 main으로 옮기기(extern 선언 지우기)
- 사진3,4처럼 작성
- main에 사진1/2/3처럼 추가
- 사진4처럼 main내 _write함수를 USER CODE BEGIN P\로 옮기기
4. 나머지 스위치들도 동작하도록 설정
- PB2도 GPIO_EXTI2로 하고 사진1/2처럼 수정 => down
- PB1도 GPIO_EXTI1로 하고 사진3/4처럼 수정 => fix
- 사진1처럼 추가 후 g_var.h에 0으로 초기화하여 선언후 ex_var.h에 가서 extern 선언
- main에 소스코드 추가 후 실행해보기
5. LED 제어
- PB12 EXTI2로 설정
- ex_var.h에 extern char g_f_sw_on; 추가
- g_var.h에 char g_f_sw_on = 0; 선언
- stm32f1xx_it.c에 EXTI15_10_IRQHandler 함수 생성된 것 확인 후 g_f_sw_on = 1; 추가
- PB7 GPIO Output으로 설정 후 사진1처럼 수정 (PB6도 Maximum output speed를 High로 )
- HAL_GPIO_TogglePin()을 사용하여 현재 GPIO 상태를 몰라도 자동으로 반전(High ↔ Low) 시켜주기에 LED가 자동으로 깜빡이도록 작성
- 사진3처럼 led 회로도 구성
6. OLED 제어
- 회로도 구성 후 main.c에서 SSD1306_Init() 실행 후 GOTO~HAL_Delay(300); 기존 코드 주석 해제하고 실행
7. 온도 센서 제어
- 모듈의 DAT 라인을 PA2에 연결
- main 내 Ds18b20_Init_Simpe(); 주석 해제후 사진2처럼 해당 소스코드도 주석 해제
- 사진 3,4처럼 PA2로 바꾸고 GPIO Output으로 설정
8. FND 모듈 제어
- fnd 회로도 구성
- main 내 init_fnd(); 와 HAL_TIM_Base_Start_IT(&htim3); 실행
9. 릴레이 제어
- 회로도 구성 후 main.c에서 사진2처럼 소스코드 작성
'임베디드' 카테고리의 다른 글
[오제이 튜브의 임베디드 강의] 38강. 고추건조기 완성!!!! (0) | 2025.02.20 |
---|---|
[오제이 튜브의 임베디드 강의] 37강. 보드 완성까지 딱 두걸음! (0) | 2025.02.20 |
[오제이 튜브의 임베디드 강의] 35강. 내 로고는 내가 만든다! (0) | 2025.02.14 |
[오제이 튜브의 임베디드 강의] 34강. I2C로 OLED를 제어해보자. (0) | 2025.02.14 |
[오제이 튜브의 임베디드 강의] 33강. 이제는 쉬워진 I2C 통신 (0) | 2025.02.14 |