13589|19

96

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

关于STM32H7的HAL库(V1.1.0)中SPI的BUG [复制链接]

 
最近在玩stm32h743xi,感觉芯片也比较强大。测试SPI过程中,发现调用HAL_SPI_Transmit函数发送多个字节一直不成功,而仅仅只发送第一个字节。调试发现hal库在发送成功一个字节没有清除TXTF标志,导致后续发送不成功。
解决方法:在第652行后添加
/* check TXTF flag */
if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXTF))
{
    __HAL_SPI_CLEAR_TXTFFLAG(hspi);
}


希望对后续调试这个的人有帮助。
此帖出自stm32/stm8论坛

最新回复

是啊,时间紧是没办法啊  详情 回复 发表于 2018-1-29 09:19
点赞 关注(1)
 

回复
举报

483

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
赞一个
此帖出自stm32/stm8论坛
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
应该弄个专栏,论HAL库的bug
此帖出自stm32/stm8论坛
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 
遇到了同样的问题
此帖出自stm32/stm8论坛
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

5
 
再填一个坑,H7的hal库的spi驱动中,调用HAL_SPI_TransmitReceive函数会出现接收到的数据出错问题,例如应该接收01 01 64...而实际接收01 00 01 64...,问题的原因还是在于清除TXTF标志位过早,原始发送接收数据的循环为先TXDR写入发送的数据,再清除TXTF,再读取RXDR寄存器数据。应该为先往TXDR写入发送的数据,再读取RXDR寄存器数据,再清除TXTF。不然读出数据一直出错。
此帖出自stm32/stm8论坛

点评

你这个不对,如果是接收就要用RXNE标记,发送空并不意味着接收完成,因为发送是带缓冲的。  详情 回复 发表于 2018-1-9 15:54
 
 
 

回复

4008

帖子

0

TA的资源

版主

6
 
dige 发表于 2018-1-9 15:32
再填一个坑,H7的hal库的spi驱动中,调用HAL_SPI_TransmitReceive函数会出现接收到的数据出错问题,例如应 ...

你这个不对,如果是接收就要用RXNE标记,发送空并不意味着接收完成,因为发送是带缓冲的。
此帖出自stm32/stm8论坛

点评

这边测试的结果是,如果清空TXTF标志位,RXNE标记也被清除了,接收数据就存在问题。  详情 回复 发表于 2018-1-9 16:22
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

7
 
huo_hu 发表于 2018-1-9 15:54
你这个不对,如果是接收就要用RXNE标记,发送空并不意味着接收完成,因为发送是带缓冲的。

这边测试的结果是,如果清空TXTF标志位,RXNE标记也被清除了,接收数据就存在问题。
此帖出自stm32/stm8论坛

点评

这里面有微小的时间差,通过仿真器看到的不一定是正确的。  详情 回复 发表于 2018-1-9 21:28
 
 
 

回复

4008

帖子

0

TA的资源

版主

8
 
dige 发表于 2018-1-9 16:22
这边测试的结果是,如果清空TXTF标志位,RXNE标记也被清除了,接收数据就存在问题。

这里面有微小的时间差,通过仿真器看到的不一定是正确的。
此帖出自stm32/stm8论坛

点评

请教接收如何修改可行?测试是通过SPI读写铁电存储器。目前是调整顺序,铁电的读取正常,如果不调整,读取的如之前所述的出错。不知有什么更为合理的修改。  详情 回复 发表于 2018-1-9 22:26
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

9
 
huo_hu 发表于 2018-1-9 21:28
这里面有微小的时间差,通过仿真器看到的不一定是正确的。

请教接收如何修改可行?测试是通过SPI读写铁电存储器。目前是调整顺序,铁电的读取正常,如果不调整,读取的如之前所述的出错。不知有什么更为合理的修改。
此帖出自stm32/stm8论坛

点评

行啊,能用就得了,我用F405 SPI收发中断还没弄成功,以前f103能行,拿到f4就不行。  详情 回复 发表于 2018-1-10 10:56
 
 
 

回复

4008

帖子

0

TA的资源

版主

10
 
dige 发表于 2018-1-9 22:26
请教接收如何修改可行?测试是通过SPI读写铁电存储器。目前是调整顺序,铁电的读取正常,如果不调整,读 ...

行啊,能用就得了,我用F405 SPI收发中断还没弄成功,以前f103能行,拿到f4就不行。
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

11
 
huo_hu 发表于 2018-1-10 10:56
行啊,能用就得了,我用F405 SPI收发中断还没弄成功,以前f103能行,拿到f4就不行。

H7的SPI 架构改了, 和以前的模式不一样了
此帖出自stm32/stm8论坛
 
 
 

回复

1903

帖子

0

TA的资源

版主

12
 
建议不要用库,很垃圾啊,还是直接配置寄存器踏实啊,一切都在掌控之中啊
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

13
 
楼主 你有测试过 H7 SPI的DMA吗?
此帖出自stm32/stm8论坛

点评

测试过,SPI的接收DMA有如下问题,一是将接收fifo阈值从08修改为SPI_FIFO_THRESHOLD_01DATA,不然接收数据一直有一部分存在fifo中,二是将如下代码屏蔽,不然接收的数据长度不对。希望对你有帮助。 // if ((hspi  详情 回复 发表于 2018-1-24 16:40
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

14
 
小Q玉米 发表于 2018-1-17 18:59
楼主 你有测试过 H7 SPI的DMA吗?

测试过,SPI的接收DMA有如下问题,一是将接收fifo阈值从08修改为SPI_FIFO_THRESHOLD_01DATA,不然接收数据一直有一部分存在fifo中,二是将如下代码屏蔽,不然接收的数据长度不对。希望对你有帮助。
//    if ((hspi->RxXferCount & 0x1U) == 0x0U)
//    {
//      hspi->RxXferCount = hspi->RxXferCount >> 1U;
//    }
//    else
//    {
//      hspi->RxXferCount = (hspi->RxXferCount >> 1U) + 1U;
//    }
此帖出自stm32/stm8论坛
 
 
 

回复

1万

帖子

16

TA的资源

版主

15
 
应向ST公司反应一下
此帖出自stm32/stm8论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1903

帖子

0

TA的资源

版主

16
 
st的库就是一个深渊,无底洞啊,非常的讨厌,都是时间紧迫的才用,一般都自己写,从不用库
此帖出自stm32/stm8论坛

点评

自己写和用库各有各的好处,H7才出来,库的问题多点,后面应该会完善成熟了。我也是没办法,要急着出产品,发现坑好多,不过现在都顺畅了。  详情 回复 发表于 2018-1-29 08:24
那样会很累啊  详情 回复 发表于 2018-1-26 20:48
 
 
 

回复

4008

帖子

0

TA的资源

版主

17
 
star_66666 发表于 2018-1-26 15:07
st的库就是一个深渊,无底洞啊,非常的讨厌,都是时间紧迫的才用,一般都自己写,从不用库

那样会很累啊
此帖出自stm32/stm8论坛
 
 
 

回复

1903

帖子

0

TA的资源

版主

18
 
是有点累,累并快乐吧
此帖出自stm32/stm8论坛
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

19
 
star_66666 发表于 2018-1-26 15:07
st的库就是一个深渊,无底洞啊,非常的讨厌,都是时间紧迫的才用,一般都自己写,从不用库

自己写和用库各有各的好处,H7才出来,库的问题多点,后面应该会完善成熟了。我也是没办法,要急着出产品,发现坑好多,不过现在都顺畅了。
此帖出自stm32/stm8论坛
 
 
 

回复

1903

帖子

0

TA的资源

版主

20
 
是啊,时间紧是没办法啊
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表