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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. YTM32B1HA0芯片uart不进中断

YTM32B1HA0芯片uart不进中断

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

    发送用DMA,可以正常发送,接收用的Uart Idle Interrupt做不定长接收,发送的同时有数据要接收
    问题现象:接收不进中断,读取不到数据,波特率250k,具体现象数据如下:
    e3c067e7-226e-49fc-b2b1-8a5fa7c56ecb-image.png
    0030afa6-782b-402f-bbec-f4b248df365a-image.png
    a504e393-c89b-4ea4-bf59-f4ce5e81e453-image.png

    1 条回复 最后回复
    0
    • uangfeinengU 离线
      uangfeinengU 离线
      uangfeineng
      写于 最后由 编辑
      #12

      “通过 UART Start 位检测来判断接收数据开始,并且开启 Timeout 超时”,这个方案有参考demo?

      1 条回复 最后回复
      0
      • 车友车行车 离线
        车友车行车 离线
        车友车行 YunTu
        写于 最后由 编辑
        #2
        1. 先调接收函数再调发送函数
          2.发送也用中断模式或者Polling模式试试
        1 条回复 最后回复
        0
        • uangfeinengU 离线
          uangfeinengU 离线
          uangfeineng
          写于 最后由 编辑
          #3

          先调接收函数再调发送函数,使用中断模式,分别测试波特率250K,500k,1M和2M四种波特率,情况如下:
          250K和500k能正常接收
          1M和2M接收不到数据,不进接收中断
          我们的应用是用串口做显示,需要高速刷新,需要使用DMA串口发送做刷新,波特殊2M,现在是不断降低波特来率查找问题

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

            用不定长接收的时候,你设置的接收数据长度要大一点。
            比如你期望收10个数据,那你的接收长度可以设置为 20.
            另外不定长接收判断数据帧结束,是监测总线上的空闲时间,例如当 MCU 收到几个字节后,总线空闲,随后超时,进入超时中断,超时中断中判断该数据帧完成。这个超时时间需要根据具体配置,可以参考 demo 实现

            uangfeinengU 1 条回复 最后回复
            0
            • uangfeinengU 离线
              uangfeinengU 离线
              uangfeineng
              在 回复了 Diga 最后由 编辑
              #5

              Diga
              1.用不定长接收的时候,你设置的接收数据长度要大一点。
              比如你期望收10个数据,那你的接收长度可以设置为 20.
              这个情况都试过,长度大的和相等的情况都试过,现在现象是不进接收中断;

              2.另外不定长接收判断数据帧结束,是监测总线上的空闲时间,例如当 MCU 收到几个字节后,总线空闲,随后超时,进入超时中断,超时中断中判断该数据帧完成。这个超时时间需要根据具体配置,可以参考 demo 实现
              按照demo的100测试过,设置最大4095也测试过,也是不进中断
              01aa168a-1750-4acc-ba46-5e4a5ae19ff7-image.png
              没理解错的话这个值是按uart位时间计算的

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

                无论是啥原因,在开启接收后,要么接收完成,进入回调,要么接收超时,进入回调,不至于进不了回调。
                中断传输的话,回调是从 LINFlexD UART 的中断中进入的;
                DMA 传输的话,完成回调从 DMA 中断中进入,超时回调从 LINFlexD UART 中断中进。
                如果啥都没有,你看一下中断有没有问题

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

                  另外超时中断是在MCU 收到任意数据后才会开启,说明 MCU 压根没收到数据,可以看一下你的波特率配置的有没有问题

                  1 条回复 最后回复
                  1
                  • uangfeinengU 离线
                    uangfeinengU 离线
                    uangfeineng
                    写于 最后由 编辑
                    #8

                    初始化函数
                    image.png
                    中断回调函数
                    image.png
                    image.png

                    uart引脚上都能抓到波形,MCU发送的数据和从机ACK的数据没有问题,所以波特率不会有问题的

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

                      拉个会简单看一下?

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

                        会议链接: https://work.weixin.qq.com/webapp/tm/4sjNxaXVZebjQl5hKgtmN9
                        #会议号: 106-286-802

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

                          大概问题确认了,LINFlexD 在 2Mbps 情况下,如果 TX 使用DMA 发送,RX 使用 中断接收,可能没法做到全双工传输,接收数据可能会来不及读取,产生 overrun 事件。

                          建议都用 DMA 进行传输,即发送用 DMA,接收也用 DMA。同时当前 SDK 不支持用 DMA 传输模式时,接收不定长数据。

                          下方代码仅提供参考,可以通过 UART Start 位检测来判断接收数据开始,并且开启 Timeout 超时

                          linflexd_uart_driver.zip

                          uangfeinengU 1 条回复 最后回复
                          0
                          • uangfeinengU 离线
                            uangfeinengU 离线
                            uangfeineng
                            写于 最后由 编辑
                            #12

                            “通过 UART Start 位检测来判断接收数据开始,并且开启 Timeout 超时”,这个方案有参考demo?

                            1 条回复 最后回复
                            0
                            • uangfeinengU 离线
                              uangfeinengU 离线
                              uangfeineng
                              在 回复了 Diga 最后由 编辑
                              #13

                              Diga “linflexd_uart_driver.zip”这个代码替换原有代码编译不过,怎么修改?
                              39e1a1ba-77c6-4413-a3f8-faa9b2b20bd1-image.png
                              616841d3-43bc-4ffc-b974-2943a1104da5-image.png

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

                                加一个 enum 定义

                                #if (FEATURE_LINFlexD_HAS_STA_IRQ)
                                LINFlexD_UART_RECEIVE_EDGE_DETECTION_FLAG = LINFlexD_UARTSR_SDF_MASK,
                                #endif /* FEATURE_LINFlexD_HAS_STA_IRQ */

                                image.png

                                uangfeinengU 2 条回复 最后回复
                                0
                                • uangfeinengU 离线
                                  uangfeinengU 离线
                                  uangfeineng
                                  在 回复了 Diga 最后由 编辑
                                  #15
                                  此主題已被删除!
                                  1 条回复 最后回复
                                  0
                                  • uangfeinengU 离线
                                    uangfeinengU 离线
                                    uangfeineng
                                    在 回复了 Diga 最后由 编辑
                                    #16

                                    Diga DMA不定长接收的超时时间也是和中断的方式一样么?也是按uart位时间计算的么?初始化代码如下:
                                    e201ece5-a02b-417d-8329-9695971e3166-image.png

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

                                      配置仍沿用之前的,只是之前的代码,在启用 DMA 进行 RX 接收时,无法开启超时,也就无法识别帧结束。现在通过 start 位来判断开始接收,也就可以正常开启超时

                                      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
                                      • 登录

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