[STM32F411RE_HAL] UART 통신테스트

PM7003 센서 테스트 준비, 3.3V 보드 사용~!

테스트하기 위해 사용한 UART 핀입니다. UART 통신을 사용하여 자료를 전송하는 먼지 센서 PM7003을 테스트하려고 했더니 신호 전압이 [email protected]더군요. 아두이노보드나PIC칩은5V출력이니까…가지고있는STM32F칩은출력이3.3V구나~!!가지고있는STM32F411RE칩을장착한테스트보드nucleo-F411RE보드를가지고테스트해보기로했습니다.^^알두이노 타입으로 구성된 핀을 보니 Serial2, Serial1이 있네요~^^ 이중 Serial1을 이용하여 테스트 해보기로 했습니다. 개발환경설정STM32CubeMX사용

STM32 Cube MX를 이용하면 쉽게 프로젝트를 구성할 수 있습니다. 요즘은 SPL보다는 HAL이 대세라고 합니다.^^ STM사가 제공하는 STM CubeMX를 이용해보니… 와우….단순히 클릭 몇 번으로 장치를 제어할 수 있는 HAL로 작성된 코드를 만들어 주다니…!!! 정말 사용하기 편하네요.^^

PA9와 PA10은 UART1의 alternative 핀입니다~!! STM32 CubeMX에서 UART1을 활성화하면 PA9과 PA10이 선택되고 Mode가 Alternate Function Push Pull로 설정되어 있음을 알 수 있습니다. STM32F411RE 데이터시트를 보면 AF7 기능의 PA9과 PA10이 USART1_TX와 USART1_RX 기능을 담당하고 있음을 확인할 수 있습니다.

수신 인터럽트 기능을 사용하기 위해 NVIC에서 USART1 부분을 관리하도록 설정해 주시는 것만으로 종료~!! PA9와 PA10의 모드 변경 및 사용 인터럽트 설정 push pull–> opendrain 출력, RXNE Unmasking 한다.

사용 환경에 맞추어 생성된 소스 코드를 수정합니다. 내가 쓰는 직렬 통신 모듈은 TTL5V를 쓰고 있습니다. 그러므로, 칩이 3.3V에서 푸시풀 모드를 사용하지 마세요.^^5V도 견딜 수 있기 때문에 우선 PA9와 PA10을 openDrain형식의 출력 형식으로 수정합니다.그 뒤 사용하는 새치기를 설정할 필요가 있습니다. STM32CubeMX로 설정한 끼어들기는 Global Interrupt부분입니다. 즉, 두꺼비 집 같은 역할만 하는 요소만 설정한 것입니다.^^각 방에 해당하는 각각 다른 인터럽트를 조절하려면 위와 같이 사용하는 새치기 마스크 부분을 UnMasking하는 코드를 추가하세요.^^위 코드 가운데 USART1->CR1|=0x20U라는 코드는 RXNE(RX buffer None Empty)인터럽트를 사용하기 위해서 추가한 코드로 시리얼 데이터가 수신되면 인터럽트를 발생시킨다는 의미입니다.※추가한 코드 위에 작성된 MP_UART_Init()는 삭제합니다!(테스트한 코드인데… 지우지 않네요.코드 검사

UART1_IRQHandler에 사용자의 동작을 추가하여 테스트한 결과입니다. 수신 인터럽트를 활성화했으니 그에 맞는 핸들러를 추가해드려야겠네요~^^함수 UART1_IRQHandler()는 UART1 장치의 인터럽트를 처리하는 핸들러 부분입니다. 모든 UART1의 인터럽트를 처리하는 부분인데 활성화된 인터럽트는 수신으로만 하기 때문에 그대로 핸들러 내부에 썼습니다.^^ 동작은 단순한 에코~!!! 터미널 유틸리티 뿐만 아니라 동작성을 확인하기 위해 STATUS LED를 토글 시키는 방법을 추가하였습니다.^^위 이미지중 우측(터미널 유틸리티 결과_CF Term사용) 결과를 보시면 정상 작동함을 알 수 있습니다.^^이제 PM7003을 테스트 해봐야해~(웃음)

error: Content is protected !!