问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F303RCT6 SPI通信问题

单片机 国产芯片 嵌入式 技术交流

GD32F303RCT6 SPI通信问题

xiaofei20222022-05-23
使用SPI发送多字节数据,每个字节最后一个bit时钟异常,有大佬碰到这种情况吗
回答 +关注 0
2039人浏览 8人回答问题 分享 举报
8 个回答
  • 官方提供的移植资料,可以借鉴一下。2.7.1 CLK线重复配置
    有客户反馈当SPI处于主模式下,重复配置SPI的CLK线会引起内部计数器紊乱:
    问题代码: GPIO->CRL&=0x000fffff;
    GPIO->CRL|=0xBBB00000;
    上面这段代码是执行SPI口的IO初始化,调用两次后会使CLK上面产生一个脉冲。引起内部计数器出错,ST的
    在SPI再次初始化的时候会将内部计数器清零,GD不会将内部计数器清零。
    修改办法: vu32 temp;
    temp=GPIOA->CFL;
    temp&=0x000fffff;
    temp|=0xbbb00000;
    GPIOA->CRL=temp;
    先进行运算再去进行赋值,内部的SPI 计数器就不会因为CLK数据的变化引起误操作。
    2.7.2 SPI 通信BSY标志位
    在SPI程序编写的过程中,轮询使用BSY作为检测标志位,传送数据丢失或者是错误。这是因为GD的BSY
    标志位不是在写入DR后就置位的,而是有很小的一个延时后才置起的。传输过程中不要使用BSY作为每次传
    输的判断,使用TXE和 RXNE来进行判断。
    2.7.3 SPI 控制寄存器1(SPI_CR1)配置流程
    客户如果从低到高一位一位配置该寄存器会出现MODF的错误,经过排查是由于GD的MCU在SPE使能之
    前就开始检测是否有模式错误,而ST是在SPE使能之后,所以在MSTR写1之前要保证模式正确。SSM为0时
    保证外接高电平或者SSM和SSI都写1或者是把SSOE打开。130\150没有该问题.
    案例:BIDIMODE=0; RXONLY=0;MSTR=1;DFF=0;CPOL=0;CPHA=0;SSM=1;
    SSOE=1;TXEIE=1;BR=2;LSBFIRST=0;CRCPOLY=7;SPE=1;
    这个顺序在ST上正常,在GD上出现MODF错误,解决的话可以将整个寄存器一次写入,也可调整初始化顺
    序,同时加上SSI的配置。


  • 目前在移植项目,SPI这块 ST的移到 GD,也是有异常状态
  • 分享一下
  • 应该是SPI配置的问题吧??

  • 分享下 解决方法,大家一起成长学习

  • 什么原因?
  • 已解决
  • 示波器图片
    qwer345 2022-5-24 19:10 回复TA
    波形上哪个异常啊 

您需要登录后才可以回复 登录 | 注册