♧ STM32F1 > UART_TwoBoards_ComIT 예제 메인함수 설명

TODAY1,811 TOTAL1,312,524
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | ♧ STM32F1 | F103_RB_Nucleo | UART_TwoBoards_ComIT 예제 메인함수 설명

페이지 정보

작성자 master 작성일2018-02-21 00:17 조회1,193회 댓글4건

본문

F1_03RB-Nucleo 예제 중에서

UART_TwoBoards_ComIT 이 예제를 보면 송신 인터럽트와 수신 인터럽트가 나와있습니다.


두개의 보드를 사용해서 송수신을 하는 것 같은데

#include "main.h"
#define TRANSMITTER_BOARD
메인함수 제일 위에 송신 보드로 선언되어 있는 부분을 그대로 컴파일하면 송신측 보드가 되고

//#define TRANSMITTER_BOARD
선언부를 막고 컴파일하면 수신보드가 되겠죠


 

int main(void){
  HAL_Init();
  SystemClock_Config(); /* Configure the system clock to 64 MHz */
  BSP_LED_Init(LED2);   /* Configure LED2 */
  UartHandle.Instance        = USARTx;
  UartHandle.Init.BaudRate   = 9600;
  UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
  UartHandle.Init.StopBits   = UART_STOPBITS_1;
  UartHandle.Init.Parity     = UART_PARITY_NONE;
  UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
  UartHandle.Init.Mode       = UART_MODE_TX_RX;
  if(HAL_UART_DeInit(&UartHandle)!= HAL_OK){ Error_Handler(); }  
  if(HAL_UART_Init(&UartHandle)  != HAL_OK){ Error_Handler(); }
  
  #ifdef TRANSMITTER_BOARD // 송신보드
    BSP_PB_Init(BUTTON_USERBUTTON_MODE_EXTI);
    while(UserButtonStatus == 0){ BSP_LED_Toggle(LED2); HAL_Delay(100); } //버튼대기
    BSP_LED_Off(LED2); 
    if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBufferTXBUFFERSIZE)!= HAL_OK){ Error_Handler(); } //송신
    while (UartReady != SET){} //송신완료대기
    UartReady = RESET; //송신완료 플래그 초기화
    if(HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBufferRXBUFFERSIZE) != HAL_OK){ Error_Handler(); } //수신
  #else // 수신보드
    if(HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBufferRXBUFFERSIZE) != HAL_OK){ Error_Handler(); } //수신
    while(UartReady != SET){ BSP_LED_On(LED2);  HAL_Delay(100); BSP_LED_Off(LED2); HAL_Delay(500);  }//수신완료대기 
    UartReady = RESET; //수신완료 플래그 초기화
    BSP_LED_Off(LED2); 
    if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBufferTXBUFFERSIZE)!= HAL_OK){ Error_Handler(); } //송신
  #endif
  
  while(UartReady != SET){} //송신 or 수신 대기
  UartReady = RESET; // 송신 or 수신 완료 플래그 초기화
  if(Buffercmp((uint8_t*)aTxBuffer,(uint8_t*)aRxBuffer,RXBUFFERSIZE)){ Error_Handler(); } // 송수신 버퍼 같은지 체크
  BSP_LED_On(LED2); //LED ON (정상 동작)
  while(1){}
}

 

메인 무한루프 들어가기 전에 1회만 동작하도록 예제가 작성되어 있습니다.

 

댓글 4

조회수 1,193

GOWT님의 댓글

GOWT작성일

컴파일시 오류가없다가 디버깅업로드하면  if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK){ Error_Handler(); } //송신 이부분에서 더이상 진행을 못합니다 ㅠ

master님의 댓글

master댓글의 댓글작성일

송신보드와 수신보드 두개를 연결한 상태겠죠?
수신보드쪽을 디버깅 중인가요?

GOWT님의 댓글

GOWT작성일

아 두개의보드의 통신이군요 ㅠㅠ 컴퓨랑 데이터를 주고받을려는데 위에 댓글달린부분에서 자꾸막혀서 HAL OK 부분을 찾다보니
제가 지금하는것은 보드끼리의통신말구 컴퓨터랑의 통신을하려면 수신보드 부분을 만져야할까요?

master님의 댓글

master댓글의 댓글작성일

소스코드가 간단하므로 이 정도의 코드는 완전히 이해하셔야합니다.
이해를 하고나면 수정은 어렵지 않을겁니다.

♧ STM32F1HOME > ♧ STM32F1 > 전체 목록

♧ STM32F1 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 2315
공지 사이트 이용 안내댓글[15] master 17-10-29 13242
현재글 F103_RB_Nucleo UART_TwoBoards_ComIT 예제 메인함수 설명댓글[4] master 18-02-21 1194
10 F107_VC_EVAL STM3210C-EVAL master 18-02-19 906
9 ◆F105-107 F105/107 master 18-02-19 655
8 F103_Zx_EVAL STM3210E-EVAL master 18-02-19 854
7 F103_RB_Nucleo NUCLEO-F103RB 회로도 master 18-02-19 1248
6 F103_RB_Nucleo NUCLEO-F103RB master 18-02-19 803
5 ◆F103 F103 master 18-02-19 1294
4 ◆F102 F102 master 18-02-19 677
3 ◆F101 F101 master 18-02-19 640
2 ◆F100 Value line STM32VLDISCOVERY master 18-02-19 1123
1 ◆F100 Value line F100 Value Line 이미지 master 18-02-19 1172
게시물 검색

2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기