搜索
查看: 3282|回复: 12

[已解决] stm32F103R8TB AD中断和TIM1中断里不能SPI

[复制链接]

该用户从未签到

2

主题

13

帖子

3

蝴蝶豆

初级会员

最后登录
2018-11-8
发表于 2018-7-30 09:58:19 | 显示全部楼层 |阅读模式
本帖最后由 witty01-302388 于 2018-7-30 12:00 编辑

最近在用F103R8T6做电机控制,SPI定时读旋变解码信号,获得位置信息。2.0的库,角度是在做电流环控制的时候读的,是在AD中断里做的,和载波周期一个频率。
这个SPI如果在systick中断里定时读,完全没有问题,结果放在AD中断里就不成功,一直停在spi的等待while里。开始以为是时间不够用,后来发现根本不是。就是这个AD中断里,SPI的功能貌似不行了。后来开了tim1中断做spi,结果同AD中断。时间完全够用的,就是SPI功能没了。

现在能跑的程序是将spi放在systick里,250us定时读角度值。因系统执行pwm计算的周期是69us,我觉得如果250us定时读,那每次做角度变换的值都不是最新的,如果放在69us的中断里去读,每次都是最新的,比250u好,结果spi不能用了。

250us定时读电机是可以运行。只是想知道为什么spi放在AD中断里不能用了。
有人碰到过这个问题吗?普通MCU貌似不会这样,是因为arm核吗?

回复

使用道具 举报

该用户从未签到

3

主题

1306

帖子

929

蝴蝶豆

版主

最后登录
2021-3-31
发表于 2018-7-30 11:20:07 | 显示全部楼层
如果你的SPI放在中断,你的spi是否用了中断或者DMA模式?

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

回复 支持 1 反对 0

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2018-7-30 10:02:39 | 显示全部楼层
AD配置的中断采集时间是多长?另外,不建议中断中处理这些,如果有需要,建议用系统来做。终端中做的事情越多,程序出问题的几率越高。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

13

帖子

3

蝴蝶豆

初级会员

最后登录
2018-11-8
 楼主| 发表于 2018-7-30 11:54:15 | 显示全部楼层
butterflyspring 发表于 2018-7-30 11:20
如果你的SPI放在中断,你的spi是否用了中断或者DMA模式?

SPI读数据发送数据的功能放在AD中断里了,SPI没开中断,因为只有一个数据,也没用DMA
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

13

帖子

3

蝴蝶豆

初级会员

最后登录
2018-11-8
 楼主| 发表于 2018-7-30 11:58:37 | 显示全部楼层
安 发表于 2018-7-30 10:02
AD配置的中断采集时间是多长?另外,不建议中断中处理这些,如果有需要,建议用系统来做。终端中做的事情越 ...

ad中断执行时间19us,周期69.4us. spi时间8us。所以时间都够用。
现在能跑的程序是将spi放在systick里,250us定时读角度值。因系统执行pwm计算的周期是69us,我觉得如果250us定时读,那每次做角度变换的值都不是最新的,如果放在69us的中断里去读,每次都是最新的,比250u好,结果spi不能用了。

现在250us定时读可以运行。只是想知道为什么spi放在AD中断里不能用了
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2018-7-30 12:00:31 | 显示全部楼层
    SPI是否用了中断?如果用了中断话,中断优先级不能比ADC、TIM2中断优先级高。
    优先级高的中断可以打断优先级的低的中断,相同优先级的中断,也不能打断。

    评分

    参与人数 1蝴蝶豆 +3 收起 理由
    zero99 + 3

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    133

    主题

    4688

    帖子

    239

    蝴蝶豆

    版主

    最后登录
    2021-4-10
    发表于 2018-7-30 13:42:24 | 显示全部楼层
    楼主,你的systick配置是250us?我们一般是1ms。我认为是AD中断太快,SPI根本响应不了。8us是怎么算出来的?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    13

    帖子

    3

    蝴蝶豆

    初级会员

    最后登录
    2018-11-8
     楼主| 发表于 2018-7-30 13:56:02 | 显示全部楼层
    本帖最后由 witty01-302388 于 2018-7-30 13:58 编辑
    toofree 发表于 2018-7-30 12:00
    SPI是否用了中断?如果用了中断话,中断优先级不能比ADC、TIM2中断优先级高。
    优先级高的中断可以打断优先 ...

    SPI没有用中断,就是在AD中断里使能,然后就收发2个byte.SPI的响应挺快的,我现在波特率寄存器设的是16分频,很快,时间够用
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    13

    帖子

    3

    蝴蝶豆

    初级会员

    最后登录
    2018-11-8
     楼主| 发表于 2018-7-30 13:57:49 | 显示全部楼层
    安 发表于 2018-7-30 13:42
    楼主,你的systick配置是250us?我们一般是1ms。我认为是AD中断太快,SPI根本响应不了。8us是怎么算出来的? ...

    改的,之前是500us的。为了快点读角度,改成250us了。
    AD中断不快了,跟载波一个频率。
    8us是在示波器上,用IO口测出来的,执行spi的时候IO置位,退出的时候清零, 测高电平时间
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    133

    主题

    4688

    帖子

    239

    蝴蝶豆

    版主

    最后登录
    2021-4-10
    发表于 2018-7-30 14:09:36 | 显示全部楼层
    楼主,你测试的是SPI的CS引吗?我就是想不明白,为什么非要在中断中做这个处理呢?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-28 21:41 , Processed in 0.212817 second(s), 46 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表