在使用stm32f405做SPI从机,使用cube产生的代码。 当使用HAL_SPI_TransmitReceive_IT时,发现芯片只在复位后的第一次传输时能够接收到数据,以后的传输既没有中断产生,也没有数据更新。 有没有遇到过这种情况的朋友,麻烦给点建议。谢谢。
当系统存在多个从机时,stm32做从机,在自身不参与通信时,要把SPI外设关掉,当自身参与通信时,再打开。如此操作,便能正常通信了。
评分
查看全部评分
我这里做过类似的测试,压缩包里面有主机与从机的源代码
坚果云分享下载地址:
http://www.jianguoyun.com/p/Dfyj1LkQyYiWBhjomjI
你需要注意的是设置SPI通讯的波特率,主机与从机都要设置成一样的,如果要排查的话可以先适当调低,测试成功了再调高。
cube的软件里没有设置从机波特率的地方,你是在生成代码后,修改了代码中的配置吗?
他说的波特率应该是分频值。
即便是分频值,在cube软件上和生成的代码中,关于从机都没有相应的设置。
没有用过从机模式,设置时钟应该是没有,从机的时钟是主机给的。
建议先不要用中断式接收,我之前调试主机模式时直接用的中断函数,收发也有异常。为了节省时间改成HAL_SPI_TransmitReceive()接收再调试就好了。
使能了
我尝试了HAL_SPI_TransmitReceive,依然有问题。理想状态是用HAL_SPI_TransmitReceive_IT,不过当前总是有各种问题。不使用中断,和使用DMA都尝试。不知道SPI从机会不会像I2C从机一样,芯片存在BUG。
不存在bug,产品都出很多了