0. 오늘의 목표
: 7 세그먼트에 온도 나타내기
1. 기존의 second 프로젝트 복사하여 third 프로젝트 생성
- C:\Users\mj492\STM32CubeIDE\third 경로로 하여 STM32 실행
- 첫번째 사진처럼 기존의 second 프로젝트 삭제 (단, 체크박스는 절대 XX)
- 2/3번째 사진처럼 third-second 폴더 선택하여 불러오기
- 프로젝트 이름은 3rd로 바꾸면 알아서 3rd.ioc로도 바뀜
- Run-Debug Configuration 설정
2. 문제점
: 4개의 led가 동시에 불이 들어오는 게 아닌 shift연산으로 왔다갔다하면서 켜짐
=> 타이머를 이용하자
3. 타이머 인터럽트 생성
- 현재 main()내 while(1)이 돌고 있을 때, systick, timer 인터럽트가 돌고 있는 상황
=> stm32f1xx_it.c의 SysTick_Handler과 TIM2_IRQHandler(1마이크로 세컨드로 발생) 인터럽트 발생
=> 우리는 타이머3를 새롭게 만들자 ! - 사진1처럼 Counter Period를 99로 하면 100마이크로세컨드마다 발생
- 사진3처럼 10으로 설정 (낮은 우선순위로)
- 다 설정하고 나면 stm32f1xx_it.c에 이제 TIM3_IRQHandler도 생성됨
- main에서 HAL_TIME_Base_Start_IT(&htim3); 을 추가하여 3번 타이머 수행
- 사진1처럼 digit4_temper 함수 수정 후 사진2처럼 헤더파일에 재정의
- 사진3처럼 stm32f1xx_it.c에 fnd_controller.h include하고 TIM3_IRQHandler함수에 digit4_temper(500);추가
- 5의 밝기가 젤 진하므로 타이머 설정하여 더 빨리 FND의 led간의 change 속도가 더 빠르게 해서 색상 균일하게
- But, 여전히 5의 밝기가 젤 진하다
=> 원인 ? case3에서 쉬어서 5의 밝기가 가장 높게됨 - 사진3처럼 소스코드 수정
4. 함수 수정
- 이때, 온도가 제대로 출력이 안되는데 그 이유는 사진1과 2처럼 TIM3에서도, Ds18b20_ManualConvert 함수에서도 통신하고 있기 때문에 제대로 안됨
- Ds18b20에서 온도정보를 가져올땐 TIM3이 쉬었다가 TIM3이 그 온도정보를 표현하는 방식으로 동작해야함
'임베디드' 카테고리의 다른 글
[오제이 튜브의 임베디드 강의] 33강. 이제는 쉬워진 I2C 통신 (0) | 2025.02.14 |
---|---|
[오제이 튜브의 임베디드 강의] 31강. 흉내낸 쓰레드 크리티컬 섹션 문제 해결! (0) | 2025.02.12 |
[오제이 튜브의 임베디드 강의] 29강. 난방실 만들기(온도에 따른 드라이기 제어) (0) | 2025.02.11 |
[오제이 튜브의 임베디드 강의] 28강. 드라이기를 내 마음대로 껐다, 켰다 해보자 (0) | 2025.02.05 |
[오제이 튜브의 임베디드 강의] 27강. 온도센서 검증하기! (0) | 2025.02.05 |