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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. SPI 读取在定时器中调用异常

SPI 读取在定时器中调用异常

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

    我这边环境是 YTM32B1MC0 SDK 1_4_0

    然后我这边使用SPI读值的时候发问题:
    SPI_DRV_MasterTransferBlocking Task任务中调用的时候读值正常;但是放到lpTMR0_IRQHandler的时候,直接导致程序崩溃;
    SPI_DRV_MasterTransferPolling 放到lpTMR0_IRQHandler的时候读值,但是陀螺值偶尔变成346.34765625,没法用;

    想问下我在定时器SPI采集数据,有什么更好的方式吗;目前暂时还是 SPI_DRV_MasterTransferBlocking 然后在 Task任务采集,不过由于新算法耗时较长,所以要把采集放到定时器保证采集的稳定;

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

      不要在中断里调用 SPI 传输。Blocking 方式是阻塞式的,会等 SPI 中断来传输,或者 Systick 中断提醒超时,如果你放在中断里调用,且优先级一致,那么会发生 MCU 无法响应 SPI 中断与 Systick 中断,自然卡死。
      正确的做法是在 timer 中断里刷新某一个状态,主循环根据这个状态去调用传输函数。中断里不要占用太长时间

      yu_10086Y 1 条回复 最后回复
      0
      • yu_10086Y 离线
        yu_10086Y 离线
        yu_10086
        回复了Diga 最后由 编辑
        #3

        Diga 也就是建议我新写个优先级高点任务来专门采集是吗,因为算法执行耗时3ms,采集要求频率1KHz, 所以前面才说切定时器执行采集。

        1 条回复 最后回复
        0

      • 云途开发生态介绍

        快速上手云途开发生态

      • 云途论坛规则/Yuntu Forum Rules

        发帖前请查看

      • YT CONFIG TOOL调查问卷

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

      • can
        28
        demo
        26
        uds
        14
        lin stack
        13
        md14
        6
        yt-link
        6
        fbl
        5
        adc模块
        4
        Online Users
        yjf4819Y
        yjf4819
        yifeng_xieY
        yifeng_xie
        • 登录

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