STM32F0 UART Receive 코드로 구현하기

STM32F0 UART Receive 코드로 구현하기

STM32F0 UART Receive –  UART 수신부를 구현하는 예제입니다.

STM32F091RC USART 목차

  1. STM32F0XX UART CUBEMX로 설정하기
  2. STM32F0XX UART Transmit 코드로 구현하기
  3. STM32F0XX UART Receive 코드로 구현하기 (현재 포스팅)
  4. UART ADC 데이터 송신하기

Receive 코드는 두줄이면 해결되지만, 데이터를 실제로 수신하는지 확인해야하므로 Transmit과 혼용해서 사용해볼까 한다.

HAL_UART_Receive()

수신 함수도 송신 함수와 다를 것 없어보인다. 입력인자는 같은데, 사용하는 방법이 다르다고 볼 수도 있을 듯 하다. 데이터 버퍼를 pData로 지정해 두었는데, 수신을 하면 데이터를 저장해 둘 것이니, 아마 저 입력 인자에 변수를 넣는다면 수신된 데이터가 변수에 저장될 것이다.

그래서 데이터를 선언해야한다.

입력인자가 uint8_t의 변수를 사용하고 있으므로, 똑같이 unsigned 8비트 인티저 타입으로 선언한다. 입력인자에서는 *을 붙이고 있으므로(포인터를 사용하고 있으므로) 주소 값을 넘겨줘야한다는 사실도 눈여겨보자.

데이터가 수신돼면, 데이터를 보내는 것을 확인할 수 있다.

동영상

11 Replies to “STM32F0 UART Receive 코드로 구현하기”

  1. uint8_t data; 해당 data 변수 선언을 통해 만약 data ==’a’라면 HAL_UART_Transmit_IT하는데
    만약 data가 문자열이라면 어떻게 해야할까요..?!?!?
    만약 data =='(a,b)’ 라면 이라는 코드를 짜고 싶습니다!!

    1. 안녕하세요 박소정님!
      오랜만의 댓글이군요.
      의도에따라 코드가 다릅니다
      A또는b라면
      C언어 문법을 응용하시면 됩니다
      data == ‘a’ || data == ‘b’로 하시면 되지만
      문자열 매치가 필요하시다면 복잡해져요.
      Uart는 8비트 데이터 레지스터라 문자열을 한꺼번에 받지 못하고 하나 수신하고 저장하고, 수신하고 저장하고를 계속 반복해야하거든요.
      지금은 모바일폰으로 작성중이라 자세히 적지는 못하지만 시간되면 덧붙일게요.
      원하시는 의도가 무엇인지 다시 답글 남겨주세요 🙂

        1. 그렇다면 uint8_t 형식의 배열을 만드시구요(개수는 취향것) uart receive 함수를 하면 입력한 문자열이 저장될거에요.
          If문에서는 strcmp, strstr등의 함수를 이용해서 문자열을 비교해보시구(함수 반환인자에 맞게 코딩하셔야합니다) 원하시는 어플리케이션을 구성해보세요

      1. 문자열 매치가 필요한데 다른 예제도 보았는데 이해가 잘안되더라고요..!!!

        1. 연구실 사람이었으면 얼굴 보고 하는게 훨씬 편할텐데, 글로만 표현하려다보니 어렵군요.
          예제 코드를 작성하고 구동되면, 아래에 코멘트를 달아두겠습니다.
          (작업중)

        2. HAL_UART_Receive(&huart2, buf, LEN, 100);

          if(!strcmp(buf, “Hello”)){
          HAL_UART_Transmit(&huart2, “Hello! \r\n”, strlen(“Hello! \r\n”), 100);
          }

          while문 안에 대충 이런 코드 넣어보니까 잘 되는군요. 참고바랍니다.

    1. 감사합니다 😉
      Sizeof보단 strlen이 더 적합한거 같아요 참고해주세요 😃😃

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

%d 블로거가 이것을 좋아합니다: