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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. UART发送过程中直接进入到HARDFAULT错误

UART发送过程中直接进入到HARDFAULT错误

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

    MCU在启动后运行一到两个小时后会发送PUTDATA函数中直接进入到HARDFAULT中去,试过在UART_ERROR_HANDLE中打断点,但是从来没进去过。调用堆栈和寄存器情况如图。
    71c9f071-08e5-41d0-8fac-3c8566bd4293-image.png 57395d42-302c-418b-83e6-ffb7454d4d9f-image.png 3dbd6773-8f39-4dba-a36d-d9df9b548543-image.png
    在进入错误之前MCU还会发送一段时间的错误数据,之后才会进入到错误中,并且只有头部数据正常。
    b2afc557-6209-499e-8573-a70eb6740bf9-image.png
    下图为异常数据:
    1a1045b4-224e-4300-b65b-2e30e376d186-image.png
    下图为正常数据:
    92c4bf3a-3433-45d6-a055-fb9407ce98cf-image.png
    并且MCU内的数据也能正常接收到这些异常数据:
    4a81cbd7-61ee-455a-b246-6f6a4960790c-image.png 3a25ddfa-75a3-44a8-ae34-9497222bd838-image.png
    该问题困扰了我几天,求指教。

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

      看一下 hardfault 原因是什么
      看起来像溢出了

      guangnanG 1 条回复 最后回复
      0
      • guangnanG 离线
        guangnanG 离线
        guangnan
        在 回复了 Diga 最后由 编辑
        #3

        Diga 你好,我这边暂时没有头绪查出hardfault原因,因为是直接跳转进去的,尝试过把堆栈加大,而且传输结束后都会清除buf里面的数据。能请教一下怎么查看这个原因吗?

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

          IAR 应该是有个可以查看 hardfault 原因的,另外可以看一下 Core 的寄存器,SCB->SHCSR

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

            Diga 附上CPU和Core寄存器的情况0a72ff13-2a37-4ded-8bb9-70a662c0dee5-image.png 35de8e08-41a5-44e0-b132-df3b7b814b98-image.png dd029bbb-2439-44f2-9b04-88ee522776bf-image.png

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

              初步看是 bus fault,bus fault 的错误地址是 0x20010000
              看起来像是你的 tx buff 这个指针在野蛮生长,已经超出 RAM 范围了

              guangnanG 1 条回复 最后回复
              0
              • guangnanG 离线
                guangnanG 离线
                guangnan
                在 回复了 Diga 最后由 guangnan 编辑
                #7

                Diga 我这边查看的linflexd_uart_config1_State的txBuff确实是越界了,但是重复几次现象也没有看到这个txbuff在疯狂变化,直接就从正常指针地址跳到 0x20010000。进错误之前传进去的数据还是正常的。这边检查了有操作linflexd_uart_config1_State.txBuff的也只有这个发送回调函数。
                b1d58fb9-d1b8-4717-95fc-ffc83858eb97-image.png 1c3702c2-290b-4c49-9d0b-837f6c10350c-image.png

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

                  看起来像 state->txBuff 指向的是一个局部变量,位置应该是在栈内,然后这个位置被你的代码冲掉了
                  你可以把你的 txDataAddr 拿出来当全局变量,固定占一个坑

                  guangnanG XgqX 2 条回复 最后回复
                  0
                  • guangnanG 离线
                    guangnanG 离线
                    guangnan
                    在 回复了 Diga 最后由 guangnan 编辑
                    #9

                    Diga 刚刚尝试了把这个txDataAddr 修改为全局变量还是会出错。

                    1 条回复 最后回复
                    0
                    • HarlanH 离线
                      HarlanH 离线
                      Harlan YunTu
                      写于 最后由 编辑
                      #10

                      Debug排查到,主函数与中断都有调用“LINFlexD_UART_DRV_PutData()”函数,存在函数重进入的情况;机缘巧合下txsize会自减2次,如果txsize是1,则会自减为0xffffffff(0D4,294,967,295),最终导致txbuff爆掉,进入Hardfault。

                      image.png
                      image.png

                      解决方法:①避免中断和主函数都调用同一个函数,②通过其他方式做好逻辑管理。

                      1 条回复 最后回复
                      3
                      • XgqX 离线
                        XgqX 离线
                        Xgq
                        写于 最后由 编辑
                        #11

                        请问一下串口的DMA发送怎么配置?

                        1 条回复 最后回复
                        0
                        • XgqX 离线
                          XgqX 离线
                          Xgq
                          在 回复了 Diga 最后由 编辑
                          #12

                          Diga 你好,方便指导一下MC0的串口DMA配置吗?DMA初始化有点迷糊

                          1 条回复 最后回复
                          0
                          • qinzhaoQ 离线
                            qinzhaoQ 离线
                            qinzhao YunTu
                            写于 最后由 编辑
                            #13

                            直接在uart的配置里选DMA:
                            image.png,然后DMA模块不需要配置,
                            image.png;在串口初始化之前增加DMA初始化函数
                            image.png。就可以使用了。

                            1 条回复 最后回复
                            0
                            • qinzhaoQ 离线
                              qinzhaoQ 离线
                              qinzhao YunTu
                              写于 最后由 编辑
                              #14

                              增加一个DEMO:
                              UART_IDLE_DMA.zip

                              XgqX 1 条回复 最后回复
                              0
                              • XgqX 离线
                                XgqX 离线
                                Xgq
                                在 回复了 qinzhao 最后由 编辑
                                #15

                                qinzhao 我这边测了下,使用这个函数UART_DRV_SendData()发送6个8位数据需要大概200us,有没有直接使能DMA传输标志位就可以不用MCU管理的方法?

                                1 条回复 最后回复
                                0

                              • 云途开发生态介绍

                                快速上手云途开发生态

                              • 云途论坛规则/Yuntu Forum Rules

                                发帖前请查看

                              • YT CONFIG TOOL调查问卷

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

                              • can
                                20
                                demo
                                20
                                uds
                                13
                                lin stack
                                10
                                md14
                                6
                                fbl
                                5
                                yt-link
                                5
                                adc模块
                                4
                                Online Users
                                FrankieF
                                Frankie
                                frankieqqF
                                frankieqq
                                ColinC
                                Colin
                                z123456111Z
                                z123456111
                                AlexzA
                                Alexz
                                HAIYANGH
                                HAIYANG
                                SelinhuangS
                                Selinhuang
                                PedroCaoP
                                PedroCao
                                majorM
                                major
                                车友车行车
                                车友车行
                                zhaodong1Z
                                zhaodong1
                                jinyiJ
                                jinyi
                                limanjiangL
                                limanjiang
                                yt0503Y
                                yt0503
                                runR
                                run
                                DerrickD
                                Derrick
                                • 登录

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