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

YunTu Forum

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

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

已定时 已固定 已锁定 已移动 YTM32B1M系列
15 帖子 5 发布者 216 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 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
            编写于 最后由 编辑
            #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
                  编写于 最后由 编辑
                  #13

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

                  1 条回复 最后回复
                  0
                  • qinzhaoQ 离线
                    qinzhaoQ 离线
                    qinzhao
                    编写于 最后由 编辑
                    #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

                      发帖前请查看

                    • YCT离线License申请流程

                      帮助没办法联网的电脑使用YCT

                    • YT CONFIG TOOL调查问卷

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

                    • demo
                      12
                      can
                      9
                      lin stack
                      6
                      yt-link
                      5
                      vscode
                      3
                      adc模块
                      2
                      i2c
                      2
                      uuid
                      2
                      Online Users
                      • 登录

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