This commit is contained in:
2026-04-23 10:50:18 +08:00
commit a436fda935
844 changed files with 272643 additions and 0 deletions

View File

@ -0,0 +1,120 @@
#include "usart3.h"
//<2F><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART3_MAX_RECV_LEN<45><4E><EFBFBD>ֽ<EFBFBD>.
u8 USART3_TX_BUF[USART3_MAX_SEND_LEN]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>,<2C><><EFBFBD><EFBFBD>USART3_MAX_SEND_LEN<45>ֽ<EFBFBD>
vu16 point1 = 0;
void USART3_Configuration(u32 baund)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //ʹ<><CAB9>USART3
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //GPIOBʱ<42><CAB1>
//NVIC_Configuration();
USART_DeInit(USART3); //<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1
//USART3_TX PB.10 PB.11
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3);
USART_InitStructure.USART_BaudRate = baund;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART3,&USART_InitStructure);
USART_Cmd(USART3,ENABLE);
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//<2F><><EFBFBD><EFBFBD>USART3<54>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ж<EFBFBD>
//Usart1 NVIC <20><><EFBFBD><EFBFBD>
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//<2F><><EFBFBD><EFBFBD>3<EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ<51><CDA8>ʹ<EFBFBD><CAB9>
NVIC_Init(&NVIC_InitStructure); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>VIC<49>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
USART_ClearFlag(USART3,USART_FLAG_TC); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
}
void USART3_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART3);//(USART1->DR); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(Res == 0x24)
{
point1 = 0;
}
USART3_RX_BUF[point1++] = Res;
if(USART3_RX_BUF[0] == '$' && USART3_RX_BUF[4] == 'M' && USART3_RX_BUF[5] == 'C') //ȷ<><C8B7><EFBFBD>Ƿ<EFBFBD><C7B7>յ<EFBFBD>"GPRMC/GNRMC"<22><>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
{
if(Res == '\n')
{
memset(Save_Data.GPS_Buffer, 0, GPS_Buffer_Length); //<2F><><EFBFBD><EFBFBD>
memcpy(Save_Data.GPS_Buffer, USART3_RX_BUF, point1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Save_Data.isGetData = 1;
point1 = 0;
memset(USART3_RX_BUF, 0, USART3_MAX_RECV_LEN); //<2F><><EFBFBD><EFBFBD>
}
}
// if(USART3_RX_BUF[0] == '$' && USART3_RX_BUF[3] == 'G'&& USART3_RX_BUF[4] == 'G' && USART3_RX_BUF[5] == 'A') //ȷ<><C8B7><EFBFBD>Ƿ<EFBFBD><C7B7>յ<EFBFBD>"GPRMC/GNRMC"<22><>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
// {
// if(Res == '\n')
// {
// memset(Save_Data.GGA_Buffer, 0, GPS_Buffer_Length); //<2F><><EFBFBD><EFBFBD>
// memcpy(Save_Data.GGA_Buffer, USART3_RX_BUF, point1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Save_Data.isGetData = true;
// point1 = 0;
// memset(USART3_RX_BUF, 0, USART3_MAX_RECV_LEN); //<2F><><EFBFBD><EFBFBD>
// }
//
// }
if(point1 >= (USART3_MAX_RECV_LEN-1))
{
point1 = 0;
}
}
}
//<2F><><EFBFBD><EFBFBD>3,printf <20><><EFBFBD><EFBFBD>
//ȷ<><C8B7>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>USART3_MAX_SEND_LEN<45>ֽ<EFBFBD>
void u3_printf(char* fmt,...)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART3_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART3_TX_BUF); //<2F>˴η<CBB4><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
for(j=0;j<i;j++) //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_SendData(USART3,USART3_TX_BUF[j]);
}
}