Union: 공유 메모리
- Union의 크기는 가장 큰 요소의 크기에 의해 결정된다.
- Union 내의 모든 요소는 동일한 메모리 주소를 공유한다.
- 이 때문에 가장 최근에 저장된 값만 유효하게 된다.
1. union buffer 선언
2. DMA 코드 변경
3. printf에서 출력할 변수의 자료형을 다음과 같이 변경할 수 있다.
과제 1: 위의 작동 중 B1을 누르면 화면 출력 정지, Union 메모리 내용을 Hex로 출력
1. Mode가 전환되며 그에 따른 동작을 하기 위해 외부 변수로 Mode 선언
2. 인터럽트를 설정하여 버튼이 눌릴 때 모드가 변경되도록 코드 작성
2-1. Test005-ADC-DMA.ioc 파일 열기
2-2. System Core - NVIC 탭에서 B1에 대해 설정된 인터럽트를 활성화하기 위해 활성화 체크
2-3. ~it.c 파일에서 다음 코드 찾아 main함수에 붙여넣기
2-4. 코드 작성: Blue button이 눌리면 Mode를 증가시키되, Mode가 3 이상이 되면 다시 1로 복귀하도록, 그리고 버튼이 눌리면 화면을 초기화하도록 코드 작성
3. 변경된 모드(모드 2)에서의 동작 설정
4. 동작 확인: 인터럽트로 인해 동작 시작과 동시에 모드가 2로 변경되는 현상 발생
5. 모드 초기값을 0으로 변경하여 오류 해결
6. Memory Dump Mode 글자를 고정하고, 그 아래에 HEX로 각 주소의 값을 출력하도록 코드 작성
7. 작동 확인
- Memory Dump에서는 buffer의 v0인 char 자료형을 사용하여 1byte의 크기
- mode 1에서 사용한 buffer의 v1인 short 자료형은 2byte의 크기
- 따라서 memory dump에서는 mode1에서 표시되는 숫자가 두 칸으로 나뉘어 표시된다.
ex) 3864 -> 18 F - 위의 예시와 같이 3864 = 0F18인 값을 1Byte씩 두 개의 값으로 나타내며 Little Endian(LE) 방식의 저장방식으로 인해 두 값의 자리가 바뀌어 출력된다.
과제 2: 모드 추가하여 v2, v3도 출력
실습 1: UART 통신
1. Test006-UART로 프로젝트 생성
2. ioc 파일에서 Connectivity 카테고리 - USART2에서 UART 통신 방식과 Baud Rate을 변경할 수 있다.
3. NVIC 세팅에서 interrupt 활성화
4. System Core의 NVIC에서 Interrupt 확인 후 코드 생성
5. ~~it.c 파일에서 USART2_IRQHandler Ctrl+좌클릭 -> HAL_UART_IRQHandler Ctrl+좌클릭 ->다음 내용 복사 후 main.c에 붙여넣기
6. UART 수신 인터럽트 시작 코드 작성: HAL_UART_Recieve_IT(&시작할 UART, 사용 버퍼 주소, 사용할 버퍼 크기)
- uart2 rx로 1byte의 char이 들어오면 dum에 저장 후 인터럽트 발생
7. ISR을 통해 interrupt가 발생하면 UART RX로 받은 데이터를 버퍼에 저장하도록 코드 작성
8. main함수 내에 동작 코드 작성: idx1이 0보다 크다면 버퍼에 데이터가 있는 뜻이므로, 해당 데이터를 문자열로 출력하도록 한다.
9. 프로그램 시작 함수 사용
10. NULL값으로 초기화를 위한 코드 작성(전에 입력한 값이 남아 계속 나오는 것을 방지하기 위함)
과제 3: 값을 입력 후 엔터를 누를 때 입력한 문자열이 출력되도록 수정
1. 인터럽트 ISR를 이용하여 uart rx에 입력된 값이 13(CR)일 때 엔터이므로 그 때 print 변수를 1로 변경, 아닐 경우 0
2. 위 코드에 따라 입력된 값은 버펄에 저장하고, print 변수가 1이 되었을 때만 출력하도록 main 함수 작성
3. 작동 확인
4. 현재 입력중인 값을 실시간으로 확인할 수 있도록 Echo 사용: HAL_UART_Transmit(&huart2, &dum, 1, 10);
5. 작동 확인
6. 위 오작동의 이유는 에코를 출력한 같은 줄에 printf로 덮어쓰기가 되어 한 줄로만 표시됨.
이를 해결하기 위해 printf 구문 내에 줄바꿈 추가
7. 작동 확인
8. echo와 print를 분리하기 위해 코드 수정
9. 작동 확인: 입력된 값을 출력할 때에는 앞에 > 기호 표시
- cursor on-off 함수를 만들어 추후에 사용하도록 myLib.c에 작성
'하만(Harman) 세미콘 반도체 설계 과정 > ARM Architecture 이해 및 RTOS 활용' 카테고리의 다른 글
STM32 조이스틱 응용, 인터럽트 활용 (0) | 2024.07.17 |
---|---|
STM32-초음파센서 인터럽트 (0) | 2024.07.11 |
STM32 - 초음파 센서를 이용한 거리측정 (0) | 2024.07.10 |
PWM (1) | 2024.07.05 |