跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1L系列
  4. UART外设接收非定长数据字节数如何获得

UART外设接收非定长数据字节数如何获得

已定时 已固定 已锁定 已移动 已解决 YTM32B1L系列
15 帖子 5 发布者 4.2k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 赵瑞元赵 离线
    赵瑞元赵 离线
    赵瑞元
    写于 最后由 赵瑞元 编辑
    #1

    利用UART外设接收非定长数据时,在接收数据字节小于最大接收数据字节时,如何获取接收到存储在数组里的数据字节数?(已使用空闲中断)

    1 条回复 最后回复
    0
    • DigaD 离线
      DigaD 离线
      Diga
      写于 最后由 编辑
      #4

      通常,uartState 内会记录从开启传输后,到任意时刻,接收到的数据个数

      image.png

      J 1 条回复 最后回复
      1
      • DigaD 离线
        DigaD 离线
        Diga
        写于 最后由 编辑
        #2

        开启接收中断后,每当接收到UART数据,中断会搬运 UART 的数据至用户的buffer中(rx_buff),所以任意时刻点,只要有收到数据,就会同步显示到 rx_buff 内

        1 条回复 最后回复
        0
        • 赵瑞元赵 离线
          赵瑞元赵 离线
          赵瑞元
          写于 最后由 编辑
          #3

          因为是变字节长度接收总线数据,我不清楚rx_buff里的字节数量,我接入的另外的api接口要求的数据是单字节传入,也就是说我需要知道rx_buff内的字节数量才能将数据完整传入

          1 条回复 最后回复
          0
          • DigaD 离线
            DigaD 离线
            Diga
            写于 最后由 编辑
            #4

            通常,uartState 内会记录从开启传输后,到任意时刻,接收到的数据个数

            image.png

            J 1 条回复 最后回复
            1
            • 赵瑞元赵 离线
              赵瑞元赵 离线
              赵瑞元
              写于 最后由 编辑
              #5

              好的,非常感谢!

              1 条回复 最后回复
              0
              • samliuS 离线
                samliuS 离线
                samliu
                写于 最后由 编辑
                #6

                发现ME在接收长数据时,容易出现接收不响应现象,短的数据则正常,有办法改善不?

                DigaD 1 条回复 最后回复
                0
                • J 离线
                  J 离线
                  JMHL
                  在 回复了 Diga 最后由 JMHL 编辑
                  #7

                  Diga 那个好像是剩余个数 要总个数-rxrize 才是接收个数!

                  DigaD 1 条回复 最后回复
                  0
                  • DigaD 离线
                    DigaD 离线
                    Diga
                    在 回复了 JMHL 最后由 编辑
                    #8

                    JMHL 嗯,所以是 rxSize 而不是 rxCount,另外右边的注释是有介绍这个参数的意义的

                    1 条回复 最后回复
                    0
                    • DigaD 离线
                      DigaD 离线
                      Diga
                      在 回复了 samliu 最后由 编辑
                      #9

                      samliu ME0的UART应该是中断接收模式,可能是UART通信速率较快,在接收长数据时,如果被其他中断打断或者抢占,会导致有部分数据由于接收Buffer已满而被丢弃,接收数据个数未满足预设值,从而影响最终的传输状态。如果要改善,尽量合理分配程序运行时间与中断优先级,或者降低UART传输速率。

                      1 条回复 最后回复
                      0
                      • samliuS 离线
                        samliuS 离线
                        samliu
                        写于 最后由 编辑
                        #10

                        没有其它中断在跑,只跑串口程序,加大了发数据的间隔,也是会挂机,接收短的数据是正常的,长数据就不行。我们是用串口来进行数据升级。

                        1 条回复 最后回复
                        0
                        • DigaD 离线
                          DigaD 离线
                          Diga
                          写于 最后由 编辑
                          #11

                          你说的挂机是什么现象?数据接收有误?数据个数不对?还是什么

                          samliuS sailing0505S 2 条回复 最后回复
                          0
                          • samliuS 离线
                            samliuS 离线
                            samliu
                            在 回复了 Diga 最后由 编辑
                            #12

                            Diga 刚客户发现问题了,接收的buffer设置的小了,设置为100,实际数据150,所以挂机了,问题解决了,感谢支持!

                            1 条回复 最后回复
                            0
                            • samliuS 离线
                              samliuS 离线
                              samliu
                              写于 最后由 编辑
                              #13

                              我说的挂机就是没响应了,也不给接收反馈了

                              1 条回复 最后回复
                              0
                              • sailing0505S 离线
                                sailing0505S 离线
                                sailing0505
                                在 回复了 Diga 最后由 编辑
                                #14

                                Diga 想问下,如果不确定接收的数据长度,比如给串口的buffer大小500字节,但是一次性来了600字节,在接收满500字节时是会触发FULL回调,这个时候如何处理,才不至于让后续的501~600造成ERR中断?

                                1 条回复 最后回复
                                0
                                • DigaD 离线
                                  DigaD 离线
                                  Diga
                                  写于 最后由 编辑
                                  #15
                                  1. 如果你是想要丢弃后续数据,那直接关闭接收就行了
                                  2. 如果你想继续接收,可以重启那个接收API,换个 buffer 继续接收
                                  3. 一般接收不定长,得把长度设大,大于你的预期值
                                  1 条回复 最后回复
                                  0
                                  • ,FrankieF Frankie 将这个主题转为问答主题
                                  • ,FrankieF Frankie 将这个主题标记为已解决

                                • 云途开发生态介绍

                                  快速上手云途开发生态

                                • 云途论坛规则/Yuntu Forum Rules

                                  发帖前请查看

                                • YT CONFIG TOOL调查问卷

                                  帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                                • can
                                  25
                                  demo
                                  22
                                  lin stack
                                  13
                                  uds
                                  13
                                  md14
                                  6
                                  yt-link
                                  6
                                  fbl
                                  5
                                  adc模块
                                  4
                                  Online Users
                                  OliverChenO
                                  OliverChen
                                  • 登录

                                  • 登录或注册以进行搜索。
                                  • 第一个帖子
                                    最后一个帖子
                                  0
                                  • 版块
                                  • 最新
                                  • 标签
                                  • 热门