硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2982|回复: 3
收起左侧

[STM32F7] F7 SPI的一个bug

[复制链接]

56

主题

904

回帖

1072

积分

至尊会员

积分
1072
发表于 2019-2-3 16:19:31 | 显示全部楼层 |阅读模式
本帖最后由 roguebear 于 2019-2-3 16:23 编辑

用的都是最新的cubemx和库。
我用模拟的方式测试芯片dac8552 , 一切正常,输入0xffff的时候是5v输出。

用spi的时候。
1: cubemx的bug:    选择transmit only master ,  生成的代码里面还是hspi1.Init.Direction = SPI_DIRECTION_2LINES;   每次手工改1LINE.

2:   应该是芯片bug?   波特率已经是最低256分频了。
使用HAL_SPI_Transmit( &__SPIx, Buf, 3, 0xffffu );   或者自己写的  _spi_send_8(CPU_INT08U val)
各种乱跳。要么是输入0xffff时输出2.5V,只有正常的一半。    要么时不时没有响应。

我看了下hal里面的代码。。。
if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
      {
        if (hspi->TxXferCount > 1U)
        {
          /* write on the data register in packing mode */
          hspi->Instance->DR = *((uint16_t *)pData);





我自己写的_spi_send_8也是等待txe。
但是网上看到这么一个文字
https://www.cnblogs.com/swblog/p/3344736.html
经试验发现,在单线模式下,只能使用SPI_I2S_FLAG_BSY标志来判断设备是否空闲,而不能使用SPI_I2S_FLAG_TXE发送完成标志。
SPI1->DR = byte;    while((SPI1->SR & SPI_I2S_FLAG_BSY) != RESET);  //等待SPI忙完,这里不能使用SPI_I2S_FLAG_TXE发送完成标志,只能使用SPI_I2S_FLAG_BSY标志

迷茫了。。。


试验3:我用了全双工2LINE模式测试,还是发现芯片不太稳定,表现为有时候输入没反应。。。
回复

使用道具 举报

2

主题

85

回帖

91

积分

初级会员

积分
91
发表于 2019-2-3 17:14:08 | 显示全部楼层
哥哥,这可是H7论坛
回复

使用道具 举报

56

主题

904

回帖

1072

积分

至尊会员

积分
1072
 楼主| 发表于 2019-2-4 16:49:49 | 显示全部楼层
我试验过了用SPI1不行, 换成SPI6 (相同的引脚)就正常。仅仅换SPI,其他一切都不变。。。
整个系统其他用到了SPI2 SPI4。
难道是SPI的bug?

目前cubemx设置1LINE时还是生成2LINES。


回复

使用道具 举报

56

主题

904

回帖

1072

积分

至尊会员

积分
1072
 楼主| 发表于 2019-2-4 17:15:18 | 显示全部楼层
tianyekpsex 发表于 2019-2-3 17:14
哥哥,这可是H7论坛

F7 H7差不多的嘛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 20:15 , Processed in 0.153239 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表