12
返回列表 发新帖
楼主: zhjb1

[求助] UART获得数据问题

[复制链接]
  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-1-13 22:13:50 | 显示全部楼层
    安 发表于 2016-1-13 19:13
    建议做到缓冲区接收,然后查找完整GGA或者RMC语句。

    实际上我对Freescale的ARM系列不太知道如何设置这些。原来用XS128时,基本上弄明白一些了。现在相当于重新学习太麻烦。看手册其FIFOf是64 字节,这个长度不足以存储完整的GPS的5组数据,如果采用较新的GPS模块数据大约有6~7组,就更不够了。能给个具体点的比如看那几个.h或.c程序来找到如何设置UART的缓存区大小,倒是可以向缓冲区度GPS数据,而后程序读出分析再显示。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2016-1-14 09:48:14 | 显示全部楼层
    可以用中断接收,自己定义一个缓冲区。接收到的数据放入到缓冲区中。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-1-14 10:38:17 | 显示全部楼层
    本帖最后由 zhjb1 于 2016-1-14 10:44 编辑
    安 发表于 2016-1-14 09:48
    可以用中断接收,自己定义一个缓冲区。接收到的数据放入到缓冲区中。

    您说的这些我都明白,但如何定义缓冲区和划定存储区一头雾水,还不明白。我不是不希望别人的代码,但我更喜欢您能直接告诉在哪里看能找到设置这些的宏或者方法。我想许多网上学习的都需要是直接的回答,您说是吗?
    比如说,看MKL_uart.h其中有涉及到pucBuf缓冲区,对应的MKL_uart.c有用到的:
    //uart0 Send String UART发送一个字符串 pucBuf:待发送字符串指针
    void  uart0SendString (INT8U *pucBuf){
    while (*pucBuf != '\0'){
      uart0SendChar(*pucBuf++);
    }
    }
    可以看出pucBuf是存储缓冲区,那么在哪里设置他的地址和大小?
    在整个工程中搜不到这个的说明?
    因此无法继续按照您说的缓冲区设置的方法走下去了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2016-1-14 12:29:21 | 显示全部楼层
    楼主用的哪个例程包啊?给个链接吧 否则别人很难帮助你
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2016-1-14 15:57:16 | 显示全部楼层
    #pragma CODE_SEG __NEAR_SEG NON_BANKED
    void interrupt 20 USART0_Putch(void) //  void interrupt 20 USART0_ISR(void)
    {
       unsigned char ch;
       if(SCI0CR2_RIE==1)
       {
          u8 ch;
          if((SCI0SR1_RDRF==1)&&(SCI0SR1_OR==0)&&(SCI0SR1_FE==0)&&(SCI0SR1_PF==0))
          {
            ch = SCI0DRL;
            
            if(PointRx0 < LenDataRx0)
            {
              DataRx0[PointRx0++]=ch;
            }
          }
          else
          {
            SCI0SR1_OR=1;   
            ch = SCI0DRL;
          }
       }
    }
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-1-14 16:29:02 | 显示全部楼层
    FSL_TICS_Robin 发表于 2016-1-14 12:29
    楼主用的哪个例程包啊?给个链接吧 否则别人很难帮助你

    KL26Z的板子,例程是随板光盘中的KL25Z的。上述截的是drv\uart中的关于UART的2个函数声明文件。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2016-1-15 10:05:33 | 显示全部楼层
    本帖最后由 FSL_TICS_Robin 于 2016-1-15 10:08 编辑
    zhjb1 发表于 2016-1-14 16:29
    KL26Z的板子,例程是随板光盘中的KL25Z的。上述截的是drv\uart中的关于UART的2个函数声明文件。 ...

    我这边有一块比较老的优龙KL26板子和程序,测试下来uart例程都是发送一个即可返回一个字符。
    F:\...\YL-KL26Z 开发板\测试源码\IAR\YL-K26Z_demo_IAR\Examples\UART\Demo_Uart_Int\IAR
    F:\...\YL-KL26Z 开发板\测试源码\IAR\YL-K26Z_demo_IAR\Examples\UART\Demo_Uart_NoInt\IAR

    开发板是YL-KL26Z-V2版本的,程序是V1.0的(如下图)。如果和你的版本不同,建议你把例程上传附件或给个例程下载链接。
    uart int YL-KL26.jpg
    uart0GetChar.jpg

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-1-15 17:21:03 | 显示全部楼层
    本帖最后由 zhjb1 于 2016-1-15 17:26 编辑
    FSL_TICS_Robin 发表于 2016-1-15 10:05
    我这边有一块比较老的优龙KL26板子和程序,测试下来uart例程都是发送一个即可返回一个字符。
    F:\...\YL-KL ...

    非常感谢回答。我的问题不是这样的。这些案例都看了许多遍了,那个程序是最多可以20个连续,超过就分段了,你可以连续发超过20个01234567890......就看出来了。问题不是那么简单。
    GPS数据1秒1次[BDS或更高级的可以超过1次],1此数据有6组或更多,我手里的uBloc就有7组,此速录比前一个快多了,前1个是4800,这个是9600,BDS看手册可以达到115200。
    我不太理解如何能将固定FIFO的UART0设置成为可以随外部数据自动扩张到数百个?如果不用FIFO那么如何实现UART0读取数据直接码到指定的内存中?
    余下的计算获得实际数据就不那么困难了。
    如果实现上述功能,我想专业的GPS也就这类核心技术吧。
    我现在退回到新唐的M051——这个前一段时间玩过来,比较熟悉,已经可以实现缓冲和直接数据的读写了,当在M051实现后在移植过来试试,也不知道能否成功。不成功也会有个交代的。
    再次表示感谢。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-23 04:51 , Processed in 0.099120 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表