stm32F103R8TB AD中断和TIM1中断里不能SPI

2019-07-14 14:50发布

最近在用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核吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
wdc596933938
1楼-- · 2019-07-14 20:20
本帖最后由 witty01-302388 于 2018-7-30 13:58 编辑

SPI没有用中断,就是在AD中断里使能,然后就收发2个byte.SPI的响应挺快的,我现在波特率寄存器设的是16分频,很快,时间够用
wdc596933938
2楼-- · 2019-07-14 20:30
TOPCB 发表于 2019-1-3 14:00
楼主,你的systick配置是250us?我们一般是1ms。我认为是AD中断太快,SPI根本响应不了。8us是怎么算出来的?

改的,之前是500us的。为了快点读角度,改成250us了。
AD中断不快了,跟载波一个频率。
8us是在示波器上,用IO口测出来的,执行spi的时候IO置位,退出的时候清零, 测高电平时间
TOPCB
3楼-- · 2019-07-14 20:59
楼主,你测试的是SPI的CS引吗?我就是想不明白,为什么非要在中断中做这个处理呢?
wdc596933938
4楼-- · 2019-07-15 02:31
TOPCB 发表于 2019-1-3 14:45
楼主,你测试的是SPI的CS引吗?我就是想不明白,为什么非要在中断中做这个处理呢?

我的SPI是好用的,功能都全,放在systick里定时读,没问题的

wdc596933938
5楼-- · 2019-07-15 05:21
 精彩回答 2  元偷偷看……
wdc596933938
6楼-- · 2019-07-15 07:39
找到原因了,在AD中断里调用SPI是可以的,但是我错在 把spi的初始化放在了AD中断之后。AD中断之后就开始进中断了,这个时候SPI还没有初始化,然后就虾米了,唉,

一周热门 更多>