STM32F0 UART Transmit – 시리얼 통신 송신부를 구현하는 예제입니다.
STM32F091RC USART 목차
- STM32F0XX UART CUBEMX로 설정하기
- STM32F0XX UART Transmit 코드로 구현하기 (현재 포스팅)
- STM32F0XX UART Receive 코드로 구현하기
- UART ADC 데이터 송신하기
오늘은 간단하게 데이터를 보내는 코드를 작성해보고자 한다.
HAL_UART_Transmit()
- huart : uart의 핸들러를 넘겨준다. 초기설정에서 uart2를 사용하므로 huart2를 사용하면된다. TrueSTUDIO를 사용하는 사람이라면 이클립스 기반 툴을 사용하므로 h를 입력하고 control + space를 입력하면 핸들러를 보여줄 것이다. 주의할 점은 *가 붙어있으므로 주소형을 넘겨줘야한다.
- pData : 송신할 데이터를 넘겨줘야한다. 이 역시 주소를 넘겨야한다.
- Size : 송신할 데이터의 크기를 입력해준다.
- Timeout : Timeout 기간을 설정해준다. 너무 짧으면 송신 되기전에 Timeout될 수 있으니, 적당히 10정도를 주자.
유저 가이드를 찾아보면 Transmit 함수가 적혀있다. 데이터 타입을 보자니, 보낼 데이터의 데이터와 사이즈를 명시하고, timeout 길이를 정하라고 적혀있다. 코드도 간단하겠다. 바로 구현하면 아래와 같다.
1초 간격으로 hello의 데이터를 보내는 코드이다.
결과는 지난 포스팅에서 본 것과 같다.
안녕하세요 DKMIN님 항상 유익한 포스팅 감사합니다.
다름이 아니라 UART Transmit 구현을 해보았는데
보레이트가 115200일 경우 엉뚱한 데이터가 출력되는것이 확인되었는데
보레이트를 9600으로 변경하여 다시 코드를 실행시켰을경우 정상적으로 데이터가 출력되었습니다.
어떠한 이유로 이러한 일이 발생하였는지 궁금해서 댓글을 남깁니다.
(물론 cubeMX에서 UART모드를 비동기식으로 설정하였음)
어..그럴리가요 이전 포스팅에도 초기설정을 115200이 어있구요.
control+f 를 눌러서 9600으로 검색해보면 나오는지 확인해보시구요. 나온다면 115200으로 수정하고 플래싱뒤 리셋한번 부탁드립니다
안녕하세요 🙂 올려주신 예제를 이용해보았는데 realterm에 문자가 안뜨네용..
블루투스 기기는 hc-06를 사용하고 있구요! 칩은 stm32f103c8를 사용중입니다~!
안녕하세요 나수정님
정보가 부족해서 두가지 관점에서 답변드립니다.
1. 하드웨어적 관점
1) 전압 레벨
Hc-06 아두이노 용으로 나온 빵판타입 모듈을 구매하셨다면 5v용 구동일 가능성이 높습니다. 전압이 5v를 주면 신호도 5v가 나와 하드웨어 손상이 발생할 수 있고 3.3v로 공급하면 신호가 안나올 수도 있습니다. 하드웨어 모듈 스펙 검토가 필요합니다.
2) uart시리얼은 rx는 tx와 tx는 rx와 교차 결선해야합니다. 자세한건 다른 블로그 참고해주세요
3) uart2결선 관련
제 기억이 맞다면 현재 uart2로 hc06연결했을 경우 구동이 안될 가능성이 있습니다. Uart1 핀에 연결하여 구동테스트 해보세요
2. 소프트웨어 관점
1) 보레잇 미스매치
Hc06은 9600에서 디폴트 동작합니다 보레잇을 9600으로 설정해서 테스트 해보세요.
가장 좋은 것은 아두이노나 다른 시리얼 모듈이 있어 각 하드웨어별 문제가 없는지 검토해보는 것입니다.
도움이 되셨길 바랍니다.
헐 너무너무너무 감사드립니다.. 댓글 주신줄 모르고 한참을 고민했어요,,, 제가 이걸 다뤄보는게 처음이라서 교차결선도 몰랐네요,,, 정말 감사드립니다!!!!
답변에 정말 힘이납니다 감사합니다 🙂