목차
[WAT-STM32-2.8] 15번 간단한 시리얼 통신 예제
WAT-STM32-2.8 예제 중 15번째로 시리얼 통신 연습을 해 보겠습니다.
J4의 USB 커넥터에 USB Mini 5핀 케이블을 연결하고 다른 한쪽은 컴퓨터의 USB포트에 연결합니다.
이 실험에서 보드의 PL2303 를 사용하는데 컴퓨터에 드라이버가 설치되어 있지 않다면
주요 코드
main.c 파일입니다.
// WAT_STM3228_15 간단한 시리얼 통신 실험 // 1초 간격으로 'W' 를 보내는 예제 // // 출처: https://docs.whiteat.com/?p=3803 // #include "main.h" #include "rcc.h" #define LEDON (GPIOB->BRR = GPIO_Pin_2) #define LEDOFF (GPIOB->BSRR = GPIO_Pin_2) LED_init() { /* GPIOB Port Enable*/ RCC->APB2ENR |= RCC_APB2Periph_GPIOB; /*-- GPIO Mode Configuration speed, input/output -----------------------*/ /*-- GPIOB max speed: 50MHz , General purpose output push-pull ---*/ GPIOB->CRL &= 0xFFFFF0FF; GPIOB->CRL |= 0x00000300; } void Delay(vu32 nCount) //delay { for(; nCount != 0; nCount--); } /* USART Structure */ typedef struct { vu16 SR; u16 RESERVED0; vu16 DR; u16 RESERVED1; vu16 BRR; u16 RESERVED2; vu16 CR1; u16 RESERVED3; vu16 CR2; u16 RESERVED4; vu16 CR3; u16 RESERVED5; vu16 GTPR; u16 RESERVED6; } USART_TypeDef; /********* USART Adress 지정 *******/ #define PERIPH_BASE ((uint32_t)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define USART1_BASE (APB2PERIPH_BASE + 0x3800) #define USART1 ((USART_TypeDef *) USART1_BASE) // USART 초기화 void UART_init() { float USARTDIV; u16 USARTDIV_zhengshu; //보레이트 계산용 임시 변수 u16 USARTDIV_xiaoshu; //보레이트 계산용 임시 변수 RCC->APB2ENR|=1<<2; //GPIOA Enable RCC_APB2Periph_GPIOA RCC->APB2ENR|=1<<14; //USART1 Enable RCC_APB2Periph_USART1 /*-- GPIO Mode Configuration speed, input/output -----------------------*/ /*-- PA9 UART1_TX GPIO_Mode_AF_PP GPIO_Speed_50MHz ---*/ /*-- PA10 UART1_RX GPIO_Mode_IN_FLOATING ---*/ GPIOA->CRH&=0XFFFFF00F; GPIOA->CRH|=0X000008B0; /* BaudRate 115200*/ USARTDIV = (float)(72*1000000)/(115200*16); USARTDIV_zhengshu = USARTDIV; /* calculate baudrate */ USARTDIV_xiaoshu = (USARTDIV - USARTDIV_zhengshu)* 16; USARTDIV_zhengshu <<=4; USARTDIV_zhengshu += USARTDIV_xiaoshu; /* USART1 reset */ RCC->APB2RSTR|=1<<14; // enable RCC->APB2RSTR&=~(1<<14);// disable USART1->BRR = USARTDIV_zhengshu; /* #define CR1_UE_Set ((u16)0x2000) USART Enable Mask */ /* #define CR3_HDSEL_Set ((u16)0x0008) USART Half-Duplex Enable Mask */ USART1->CR1|=0X200C; // TX, RX enable } int main(void) { RCC_init(); // RCC 초기화 LED_init(); // LED 초기화 UART_init(); // UART 초기화 while (1) { /* Transmitting the 'W' */ USART1->DR = 'W'; LEDON; // LED ON Delay(0xFFFFFF); // delay LEDOFF; // LED OFF Delay(0xFFFFFF); // delay } }
결과화면
시리얼 통신 프로그램으로 시리얼 데이터를 확인해 보면 ‘W’ 데이터가 주기적으로 수신됩니다.
WAT-STM32-2.8보드 전체 예제
제품 구매
WAT-STM32-2.8 [STM32F103RB Board + 2.8인치 TFT LCD 터치 세트] 는 https://kit128.com/goods/view?no=221 에서 구매하실 수 있습니다.