在线时间613 小时
UID252169
注册时间2010-12-5
NXP金币0
TA的每日心情 | 开心 2019-2-14 16:49 |
---|
签到天数: 296 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 4473
- 最后登录
- 2020-4-14
|
本帖最后由 zhjb1 于 2016-1-8 14:05 编辑
二、准备工作
GPS信号读取与显示需要用到串口的收和发:接收GPS发送过来的TTL数据到KL26单片机,由单片机再讲信号通过串口输出给PC
的串口,通过PC串口软件——本例采用网友温子祺编写的大名鼎鼎的单片机多功能调试助手[串助]作为PC的上位机显示GPS数据,以便
在单片机上处理这些数据。单片机处理数据后分行列显示在屏幕上,当单片机能完成所有定位功能后——说白了此类低能儿只能
显示坐标类的信息,无法与地图结合的,但将来开发定位的东西是有用的,比如:小车、飞行器等。
描述功能大致是:
读取GPS数据,分类存储在内存中,计算送到LCD显示屏上,送到PC端显示,周而复始。
1理解GPS信号
GPS信号是1秒1组,本二手GPS4800波特率,属于较慢的一种;
停车位前文描述的6组,GPGGA中的有用数据做多,作为主数据读取存放;GPRMC的单位信息和有用信息也较多作为辅助数据读
取存放;GPGSV也有不少有用的信息,作为有选择数据存放。其他的看单片机的处理速度,如果足够,可以将所有信息都放在屏
幕上,初设采用1.8寸TFTLCD,可以显示1行16个8X8的ASCII码,一共有20行,如果不够再考虑2.4存的TFTLCD。
2理解KL26的UART
查看案例UART带终端的那个,查找uart0Init()初始化函数,可以在MKL_UART.c中找到次函数,分析可以得到:
UART0的TXD为A1口,RXD为A2口[PORTA_PCR1 = PORT_PCR_MUX(0x2);//UART0_TXD||PORTA_PCR2 = PORT_PCR_MUX(0x2);//UART0_RXD]
此外在这个程序中还可以找到另一个很重要的函数uart0GetChar(),从UART0获得数据。
为此UART0的启动由向A1口申请接收数据,则A1口自动接收一次[一组]数据。
3验证设想理解函数
为了验证是真,将uart案例中的main程序添加:
在延时之前加:unsigned int getChar;
在while(1)中加上两句:
getChar=uart0GetChar();
printf("\r\n"+getChar);
而后找一个PC-TTL,USB转串口的TTL连接器,将连接器的RX连接到KL26的A2口,将TX连接到A1口
打开J-Link连上KL26,USB接到PC机上,打开串助,测试如下:
在串助下边输入任意字符[本例12345678],单击发送,在上边的接收窗口就收到一组信号:12345678。证明思路是对的。
4测试GPS实验
接着,我们改一下硬件连接:
RX到KL26的A2口不变,将A1口连接到GPS的TX输出口,就是将GPS信号直接送到KL26,由他接收,而后传送给串助,显示在PC机上。
运行结果非常令人振奋,GPS那几组数据如约而至显示在串助上。至此初期实验算告一段落,给以后的实验铺平了基础道路。
改的程序如下:
#include "includes.h"
unsigned int getChar;
int main(void){
SystemCoreClockUpdate();//时钟配置
PORT_ENABLE_CLK(MKL_PORTA);//GPIO时钟使能
PORT_ENABLE_CLK(MKL_PORTB);
PORT_ENABLE_CLK(MKL_PORTC);
PORT_ENABLE_CLK(MKL_PORTD);
PORT_ENABLE_CLK(MKL_PORTE);
uart0Init(4800,0,0,8,1);//UART0初始化
printf("MCU test Uart Start,Now you can input anykey\r\n");
printf("UART0 Get:\r\n");
while(1){
while(UART0_S1_REG(UART0_BASE_PTR) & UART0_S1_RDRF_MASK){//清除中断标志
uart0SendChar(UART0_D_REG(UART0_BASE_PTR));//返回接收数据
}
getChar=uart0GetChar();
printf("\r\n"+getChar);
}
}
两组运行照片如下:
|
-
UART0串口实验
-
UART0串口连接GPS实验
|