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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. 串口卡死或不进中断使用注意事项

串口卡死或不进中断使用注意事项

已定时 已固定 已锁定 已移动 YT SDK
2 帖子 2 发布者 27 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 吴超群吴 离线
    吴超群吴 离线
    吴超群
    写于 最后由 吴超群 编辑
    #1

    问题描述:客户在使用串口的过程中会概率性的出现丢数据和卡死的情况,表现为串口中断不再响应或者进入Hardfault中断;
    b77f8618-9068-4456-854e-38e287f84795-image.png

    解决办法:
    1、检查串口是否会产生ERROR事件,若产生ERROR事件,需要对ERROR事件进行处理,SDK自带的ERROR事件处理完以后会关闭接收,如果需要连续接收需要在Uart_RxCallback函数UART_EVENT_ERROR事件里面设置重新启动串口接收;
    a9a82f1f-b841-4a32-9e56-e29fd811c1f3-image.png

    2、检查串口接收模式为连续接收模式还是非连续接收模式,如果为非连续接收模式,发送方为不定长时间间隔的数据过来就会存在漏接收的情况,这种情况发生在串口Uart_RxCallback执行完未能立即重新启动串口接收,需要在主循环里面启动接收就会有一定的非接收窗口期,这种情况主要在TIMEOUT中断模式上比较容易出现。解决这个问题就需要把串口的接收模式配置为连续接收模式不要开TIMEOUT中断,只配置LINFlexD_UART_DRV_InstallRxCallback回调函数就行,另外设置接收buf为1个字节,在Uart_RxCallback回调函数的UART_EVENT_RX_FULL事件里面通过LINFlexD_UART_DRV_SetRxBuffer函数继续设置一个字节的接收缓冲区,继续下一次接收,重复不断!
    b6cd21a5-dfbe-4dfa-a867-71e3dfc84c9c-image.png

    3、检查Flash的擦写代码执行位置是否合理,如果用户数据存放的Flash和运行程序的Flash在同一个PFlash,在操作PFlash的时候就需要关闭全局中断再操作,这样就会造成其他的中断任务被打断或者出错进入hardfault,建议PFlash的操作在数据接收任务不是很急迫的时候进行,比如串口或者CAN空闲的时候或者在掉电前关闭外设后再去操作Flash,起到一个保险的作用。
    ff134289-2fb7-417f-8000-a4a8a87f46c3-image.png

    附件:Linflexd_Uart_Continuous_Transmission_Demo.zip

    1 条回复 最后回复
    0
    • HarlanH 离线
      HarlanH 离线
      Harlan YunTu
      编写于 最后由 编辑
      #2
      此主題已被删除!
      1 条回复 最后回复
      0
      • xianghanX xianghan 从 SDK BUGS 移动了该主题

    • 云途开发生态介绍

      快速上手云途开发生态

    • 云途论坛规则/Yuntu Forum Rules

      发帖前请查看

    • YT CONFIG TOOL调查问卷

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

    • can
      29
      demo
      26
      uds
      14
      lin stack
      13
      fbl
      6
      md14
      6
      yt-link
      6
      adc模块
      4
      Online Users
      • 登录

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