MPU/MCU Select를 통해 생성했을 때 Board Select을 했을 때 문제가 없었던 UART 통신에서 문자가 깨지는 현상이 발생하였다.
문제점
UART를 통해 Console 창에 문자는 출력되지만 문자가 깨져서 나오는 상황
처음 문제가 발생했을 때 생각한 원인들은 이랬다.
1. 인코딩이 잘못되고 있다.
2. baud rate가 맞지 않아서 글자 깨짐
3. 그 외 Port가 잘못되거나 ST-Link와의 통신에서 문제가 있을 것이다.
1. 에 대한 해결책으로 인코딩과 관련된 모든 설정을 변경해보았지만 결과가 같았다.
3. 에 대한 해결책으로 USART 1,2,3 등 많은 USART 포트를 사용해봤지만 결과가 동일했다.
2. 에 대한 해결책으로
일반적으로 우측 부분에 관한 Clock만 생각했기 때문에 우측 부분의 CLK에 문제가 있는 것 같다고 생각했지만 결과가 똑같았다.
(이후로 꽤 시간을 투자했지만 해결하지 못하고 있었다...)
현재 HSE, LSE를 사용하고 있었고, LSE는 board 내부 크리스탈을 HSE는 ST-Link으로부터 MCO 부분을 통해 Clock을 전달받고 있었다.
Clock Configuration의 Input Frequency를 8MHz로 변경하였더니 Console에 문자가 정상적으로 출력하는 것을 확인할 수 있었다.
원인은 바로
ST-Link 부분에 크리스탈을 통해 8MHz의 클럭 신호를 만들어 MCO로 전달하고 있었기 때문에 8MHz를 입력해 주어야 했던 것이였다.
UART 통신에 대해 어느정도 알곤 있었지만 이번 기회에 더욱 자세히 알아본 결과
1. UART 통신에서
Buad Rate는 초당 전송되는 신호 변화의 수를 나타내며, 초당 데이터를 전송할 수 있는 비트 수를 나타내고
Clock은 UART 통신의 내부 타이머 및 제어를 위해 사용된다. 클럭 신호를 기반으로 데이터 비트의 타이밍을 맞추고 이 타이밍을 통해 baud rate를 유지하기 때문에 Buad Rate와 Clock은 매우 중요한 요소였다.
즉, 통신 프로토콜에 대한 자세한 이해와 Data Sheet를 자세히 확인했으면 쉽게 해결되었을 문제였다.
'Embedded > 1. STM32, Arduino' 카테고리의 다른 글
STM32 - PWM를 이용한 모터 제어 및 부저를 이용한 멜로디 생성 (0) | 2024.06.17 |
---|---|
HAL 함수 모음 (GPIO, EXTI, UART, ADC, DAC, TIM...) (0) | 2024.06.16 |
STM32 - Clock, Timer 구현 (SysTick, Timer 사용) (0) | 2024.06.11 |
STM32 - TIM 이론 (0) | 2024.06.11 |
STM32 - LCD 문자 출력 (I2C) (0) | 2024.06.09 |