#include "stm32F10x.h" #include "gpio_emcu.h" void InitRCC (void); void InitGPIO (void); void InitUART1 (void); void InitUART3 (void); #define LED3 9 #define LED4 8 u8 gps_state=1; // 횗챤챰챵챤첼챠챔책 횪창챵챤챙횪챵횪 챦챨챔쨍챙챠챔챗횪 GPS. #define GPS_WAIT_HEAD 1// 횓챈챔채횪챠챔책 챠횪첨횪챘횪 챰챤챤찼첫책챠챔첼. #define GPS_WAIT_TAIL 2 // 횓챈챔채횪챠챔책 챗챤챠철횪 챰챤챤찼첫책챠챔첼. #define GPS_CHEK_MSG 3 // 횕챨챤창책챨챗횪 챰챤챤찼첫책챠챔첼. #define U3RXBUF_SIZE 128 // 횖횪챌챙책챨 챦챨챔쨍챙챠챤찾챤 찼처척책챨횪 UART1. u8 uart3_rx_buf[U3RXBUF_SIZE]; // 횁처척책챨 채챘첼 챦챨챔쨍챙횪 챰챤챤찼첫책챠챔첼. u8 uart3_rx_bit; // 횒챤챙책챨 찼횪챕챵횪 챤챵 GPS 챦챨챔챠챔챙횪책챙챤찾챤 창 찼처척책챨. //u8 gpsinit[]="$PSRF103,00,00,02,00*27\r\n"; int main(void) { InitRCC(); // 횊챠챔철챔횪챘챔챌챔챨챤창횪챵체 챰챔챰챵책챙처 챵횪챗챵챔챨챤창횪챠챔첼. InitGPIO(); // 횊챠챔철챔횪챘챔챌챔챨챤창횪챵체 챦챤챨챵청 창창챤채횪-창청창챤채횪. InitUART1(); InitUART3(); while (1) { // 횇챰챘챔 챦챨챔챠첼챵챤 챰챤챤찼첫책챠챔책 "GPGLL" if (gps_state==GPS_CHEK_MSG) { // 횉채책챰체 챤찼챨횪찼챤챵챗횪 챰챤챤찼첫책챠챔첼. _spin_m(PORTC,1<CR|=RCC_CR_HSEON; // 횂챗챘첸첨챔챵체 찾책챠책챨횪챵챤챨 HSE. while (!(RCC->CR & RCC_CR_HSERDY)) {} // 횓챈챔채횪챠챔책 찾챤챵챤창챠챤챰챵챔 HSE. RCC->CFGR &=~RCC_CFGR_SW; // 횓첨챔챰챵챔챵체 찼챔챵청 SW0, SW1. RCC->CFGR |= RCC_CFGR_SW_HSE; // 횂청찼챨횪챵체 HSE 채챘첼 챵횪챗챵챔챨챤창횪챠챔첼 SW0=1. RCC->APB2ENR|= RCC_APB2ENR_IOPAEN; // 횖횪챌챨책첩챔챵체 챵횪챗챵챔챨챤창횪챠챔책 챦챤챨챵횪 A. RCC->APB2ENR|= RCC_APB2ENR_IOPBEN; // 횖횪챌챨책첩챔챵체 챵횪챗챵챔챨챤창횪챠챔책 챦챤챨챵횪 B. RCC->APB2ENR|= RCC_APB2ENR_IOPCEN; // 횖횪챌챨책첩챔챵체 챵횪챗챵챔챨챤창횪챠챔책 챦챤챨챵횪 C. RCC->APB2ENR|= RCC_APB2ENR_AFIOEN; // 횘횪챗챵챔챨챤창횪챠챔책 횪챘체챵책챨챠횪챵챔창챠청천 척처챠챗철챔챕 GPIO. RCC->APB2ENR|= RCC_APB2ENR_USART1EN; // 횂챗챘첸첨책챠챔책 챵횪챗챵챔챨챤창횪챠챔첼 USART1. RCC->APB1ENR|= RCC_APB1ENR_USART3EN; // 횂챗챘첸첨책챠챔책 챵횪챗챵챔챨챤창횪챠챔첼 USART3. } /*------------------------------------------------------------------------------ 횓챦챔챰횪챠챔책: 챠횪챰챵챨챤챕챗횪 UART1. (9600 speed) ------------------------------------------------------------------------------*/ void InitUART1 (void) { USART1->CR1 |=(USART_CR1_RE | USART_CR1_TE); // 횖횪챌챨책첩챔챵체 창청창챤채청 RX, TX. // HSE=8 횑횄철. 횗챗챤챨챤챰챵체 4800 bps. USARTDIV=FSYS/(16*baud) = 8e6/(16*4800)=104.16 USART1->BRR=(52<<4); // 횜책챘횪첼 첨횪챰챵체 챗챤첵척척챔철챔책챠챵횪 채책챘책챠챔첼 USART1, 채챨챤찼챠횪첼 찼챘챔챌챗횪 챗 챠처챘첸. USART1->BRR|=13; // 횆챨챤찼챠횪첼 첨횪챰챵체*16 = 0,16*16 = 3 (챤챗챨).*/ USART1->CR1 |=USART_CR1_UE; // 횂챗챘첸첨책챠챔책 USART1. //USART1->SR&=~USART_SR_TC; // 횓첨챔챰챵챔챵체 척챘횪찾 "횕책챨책채횪첨횪 챌횪창책챨첩책챠횪". //USART1->CR1 |=USART_CR1_TCIE|USART_CR1_RXNEIE; // 횖횪챌챨책첩챔챵체 챦챨책챨청창횪챠챔첼 TC, RXNE. //NVIC_EnableIRQ (USART1_IRQn); // 횖횪챌챨책첩챔챵체 챦챨책챨청창횪챠챔책 USART1_IRQn 창 NVIC. } /*------------------------------------------------------------------------------ 횓챦챔챰횪챠챔책: 챠횪챰챵챨챤챕챗횪 UART1. (9600 speed) ------------------------------------------------------------------------------*/ void InitUART3 (void) { USART3->CR1 |=(USART_CR1_RE | USART_CR1_TE); // 횖횪챌챨책첩챔챵체 창청창챤채청 RX, TX. // HSE=8 횑횄철. 횗챗챤챨챤챰챵체 4800 bps. USARTDIV=FSYS/(16*baud) = 8e6/(16*4800)=104.16 USART3->BRR=(52<<4); // 횜책챘횪첼 첨횪챰챵체 챗챤첵척척챔철챔책챠챵횪 채책챘책챠챔첼 USART1, 채챨챤찼챠횪첼 찼챘챔챌챗횪 챗 챠처챘첸. USART3->BRR|=13; // 횆챨챤찼챠횪첼 첨횪챰챵체*16 = 0,16*16 = 3 (챤챗챨).*/ USART3->CR1 |=USART_CR1_UE; // 횂챗챘첸첨책챠챔책 USART3. USART3->SR&=~USART_SR_TC; // 횓첨챔챰챵챔챵체 척챘횪찾 "횕책챨책채횪첨횪 챌횪창책챨첩책챠횪". USART3->CR1 |=USART_CR1_TCIE|USART_CR1_RXNEIE; // 횖횪챌챨책첩챔챵체 챦챨책챨청창횪챠챔첼 TC, RXNE. NVIC_EnableIRQ (USART3_IRQn); // 횖횪챌챨책첩챔챵체 챦챨책챨청창횪챠챔책 USART3_IRQn 창 NVIC. } /*------------------------------------------------------------------------------ 횓챦챔챰횪챠챔책: 횓찼챨횪찼챤챵첨챔챗 USART3. ------------------------------------------------------------------------------*/ void USART3_IRQHandler (void) // 횓찼챨횪찼챤챵첨챔챗 USART3. { // 횇챰챘챔 챦챨책챨청창횪챠챔책 챦챤 챦챨챔쨍챙처. if (USART3->SR&USART_SR_RXNE) { if (gps_state==GPS_WAIT_HEAD) // 횇챰챘챔 챈채쨍챙 챠횪첨횪챘챤 챰챤챤찼첫책챠챔첼. { if (USART3->DR=='$') { gps_state=GPS_WAIT_TAIL; // 횉횪챦챔챰청창횪챵체 창 찼처척책챨 챔 챈채횪챵체 챗챤챠철횪 챰챤챤찼첫책챠챔첼. uart3_rx_bit=0; // 횉횪챦챔챰청창횪챵체 챰챘책채처첸첫챔책 찼횪챕챵청 챰 챠처챘책창챤찾챤 첵챘책챙책챠챵횪 찼처척책챨횪. _spin_m(PORTC,1<DR; // 횕챤챙책첫횪책챙 챦챨챔챠첼챵청챕 찼횪챕챵 창 찼처척책챨. // 횇챰챘챔 창 찼처척책챨 챦챨챔챠첼챵 챔 챦책챨책채 챠챔챙 . if ((uart3_rx_buf[uart3_rx_bit]==0x0A)&&(uart3_rx_buf[uart3_rx_bit-1]==0x0D)) { //if ((uart1_rx_buf[2]=='G')&&(uart1_rx_buf[3]=='L')&&(uart1_rx_buf[4]=='L')) if ((uart3_rx_buf[3]=='G')&&(uart3_rx_buf[4]=='L')&&(uart3_rx_buf[5]=='L')) { gps_state=GPS_CHEK_MSG; } else {gps_state=GPS_WAIT_HEAD;} } uart3_rx_bit++; // 횒횪챨횪첫챔창횪책챙 챰첨쨍챵첨챔챗 찼횪챕챵챤창 찼처척책챨횪. } } if (USART3->SR&USART_SR_TC) // 횇챰챘챔 챦챨책챨청창횪챠챔책 챦챤 챌횪창책챨첩책챠챔첸 챦책챨책채횪첨챔. { USART3->SR&=~USART_SR_TC; // 횓첨챔챰챵챔챵체 척챘횪찾 "횕책챨책채횪첨횪 챌횪창책챨첩책챠횪". } }