研究僧-彬彬 2024-05-23 22:51 采纳率: 50%
浏览 18
已结题

STM32G471芯片spi设置了8位,总是发送16位

img


芯片是STM32G471,已经按照数据手册配置了各类参数,其中DS代表数据长度,我设置了7,代表数据长度为8,已经通过仿真查看了寄存器,设置正确。

img


通过逻辑分析仪发现,我只发送一次06H,但是后面会跟着00,一共发送了16位。

img

读取flash芯片id,发送9F 45 45 45,每个字节后面都被迫加上了00。

  • 写回答

15条回答 默认 最新

  • 阿里嘎多学长 2024-05-23 23:09
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    从您提供的信息来看,您在STM32G471芯片上配置SPI通信时遇到了数据长度的问题。尽管您已经设置了DS为7,代表8位数据长度,但实际通信中仍然发送了16位数据。这个问题可能由几个方面的原因造成:

    1. SPI配置错误:确保除了DS位外,其他相关的SPI配置位也正确设置。例如,确保没有启用额外的数据位,或者没有其他配置位影响了数据长度。

    2. 硬件问题:检查硬件连接是否正确,确保SPI数据线没有短路或者连接错误。

    3. 固件问题:检查您的C语言代码,确保在发送数据时没有错误地发送了额外的字节。

    4. 逻辑分析仪设置:确认逻辑分析仪的设置是否正确,有时候逻辑分析仪的配置错误也会导致显示不正确的数据长度。

    5. Flash芯片特性:有些Flash芯片在读取ID时可能会返回额外的数据,需要检查Flash芯片的数据手册,确认其通信协议。

    6. STM32G471的特定问题:查阅STM32G471的参考手册,看是否有关于SPI通信的特定注意事项或者已知问题。

    针对您的问题,以下是一些可能的解决方案:

    • 重新检查SPI初始化代码:确保在初始化SPI时,所有相关的配置参数(如CR1寄存器中的DFF位,用于设置数据帧格式)都正确设置。

    • 检查SPI中断服务例程:如果您的程序使用了中断来处理SPI通信,确保中断服务例程中没有错误地发送了额外的数据。

    • 使用HAL库或LL库:如果您使用的是STM32CubeMX生成的代码,确保HAL库或LL库中的SPI配置是正确的。

    • 软件模拟SPI通信:尝试使用软件模拟SPI通信,以排除硬件问题。

    • 更新固件:检查是否有固件更新,有时候芯片制造商会发布固件更新来修复已知的问题。

    • 联系技术支持:如果以上步骤都无法解决问题,可以考虑联系STM32的技术支持寻求帮助。

    希望这些建议能帮助您解决问题。如果需要更具体的帮助,请提供更多的代码或配置细节。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月24日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 爬取网页内容并保存需要完整的python代码
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 铜与钢双金属板叠加在一起每种材料300mm长,18mm宽,4mm厚一端固定并加热至80℃,当加热端温度保持不变时另一端的稳态温度。ansys
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了