📄 main.c
字号:
/****************************************************************************
* 文 件 名:main.c---Chek_Info_GPS()
* 功 能:初试化GPSOEM后检测是否只输出RMC和ZDA语句。
* 说 明:测试程序
****************************************************************************/
#include "config.h"
#include <stdio.h>
#define UART_BPS1 9600 // 定义通讯波特率
#define UART_BPS0 115200 // 定义通讯波特率
uint8 checkmark_m1 = 0; // 检测数据接收标志,为1则表示接收到所要的数据
/******************COUNT的值需要修改****************************************/
uint8 count_m1 = 20; // RMC数据接收时间标志,超过设定的时间限报错
/****************************************************************************
* 名 称:UART1_Ini()
* 功 能:初始化串口1。设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
* 入口参数:无
* 出口参数:无
****************************************************************************/
void UART1_Init(void)
{
uint16 Fdiv;
U1LCR = 0x83; // DLAB = 1,可设置波特率
Fdiv = (Fpclk / 16) / UART_BPS1; // 设置波特率
U1DLM = Fdiv / 256;
U1DLL = Fdiv % 256;
U1LCR = 0x03;
//U0FCR = 0x81; // 使能FIFO,并设置触发点为8个字节
//U0IER = 0x01; // 使能RDA中断
}
/****************************************************************************
* 名 称:UART0_Ini()
* 功 能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
****************************************************************************/
void UART0_Init(void)
{
uint16 Fdiv;
U0LCR = 0x83; // DLAB = 1,可设置波特率
Fdiv = (Fpclk / 16) / UART_BPS0; // 设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
//U0FCR = 0x81; // 使能FIFO,并设置触发点为8个字节
//U0IER = 0x01; // 使能RDA中断
}
/****************************************************************************
* 名 称:UART0_ErrSend()
* 功 能:向串口发送Error信息。
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
uint32 UART0_ErrSend(uint32 Num)
{
uint32 t;
t = 0;
while(t<5) // 发送5个0
{
U0THR = 0;
t++;
while( (U0LSR&0x40) == 0)
NULL; // 等待数据发送完毕
}
U0THR = Num; // 发送错误号
while( (U0LSR&0x40) == 0)
NULL ; // 等待数据发送完毕
return 0;
}
/****************************************************************************
* 名 称:Check_Info()
* 功 能:检测初始化后接收到的数据是否为RMC和ZDA语句,如不是报错;如是跳出
* 入口参数:无
* 出口参数:
****************************************************************************/
uint8 Check_Info(void)
{
uint8 RCV_RZ(void);
uint8 data = 0;
count_m1 = 20; // 需要修改
while (count_m1 != 0)
{
if ((U1LSR&0x01) == 1) // 判断是否收到有效数据
{
data = U1RBR;
if (data == 0x24) // 判断是否接收到字头$
RCV_RZ(); // 进入到RMC和ZDA接收函数
}
}
// count_m1 = 3; // 恢复计数器的数值
// if (RCVMark == 0)
// RMC_RCV_Err();
return 0;
}
/****************************************************************************
* 名 称:RCV_RZ()
* 功 能:从串口接收确定是否为RMC和ZDA 语句,使用查询方式
* 入口参数:无
* 出口参数:
****************************************************************************/
uint8 RCV_RZ(void)
{
uint8 data = 0;
uint8 t = 0;
while(t < 3)
{
if ((U1LSR&0x01) == 1) // 判断是否收到有效数据
{
data = U1RBR;
t++;
}
}
if (data == 0x52) // 判断是否接受到R
{
count_m1--;
checkmark_m1 = 1;
UART0_ErrSend(1);
}
else if(data == 0x5A) // 判断是否接受到Z
{
count_m1--;
checkmark_m1 = 1;
UART0_ErrSend(2);
}
else
{
//Check_Err(); // 接收到的不是所要求的语句
count_m1 = 0; // 清零计数器,退出循环
checkmark_m1 = 0; // 重新设置接收标志
UART0_ErrSend(3);
}
return 0;
}
/****************************************************************************
* 名 称:Check_Err_GPS()---还未写!
* 功 能:当检测到不合要求的语句,报错,启动命令初始化函数Init_OEM_GPS()。
* 记住报错函数要设置好checkmark_m1的数值哦!
* 入口参数:无
* 出口参数:
****************************************************************************/
/*
uint8 Check_Err(void)
{
return 0;
}
*/
/****************************************************************************
* 名 称:main() - Chek_Info_GPS()
* 功 能:从串口UART0接收RMC数据,判断卫星是否定位
****************************************************************************/
int main(void)
{
PINSEL0 = 0x00050005; // 设置I/O连接到UART0,UART1
UART1_Init(); // 初始化UART1
UART0_Init();
while(checkmark_m1 == 0)
{
Check_Info(); // RMC接收函数
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -