#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; // 횓첨챔챰챵챔챵체 척챘횪찾 "횕책챨책채횪첨횪 챌횪창책챨첩책챠횪".
}
}