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

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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵