打印
[KungFu32位 MCU]

成功解决KF32F350官方例程中SPI_FLASH读取乱码的问题。

[复制链接]
13745|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
编号10086|  楼主 | 2021-7-23 13:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
KF32F350_SPI.zip (1.97 MB)

官方350开发板提供的例程,SPI读写会乱码。
我怀疑是否是个例,后来搁置了一段时间,今天抽空把它解决了。
解决方法可以看我另外一个帖子。


然后我把之前做的安富莱例子中的SPI例程移植过去了,提供了一个SPI测试的demo。
如果有官方功夫开发板的朋友,可以直接烧录,调试串口用的串口2,波特率115200。
通过串口2,给板子发命令,可以测试SPI_FLASH的读写功能。

【1 - 读串行Flash, 地址:0x0,长度:4096字节】
【2 - 写串行Flash, 地址:0x0,长度:4096字节】
【3 - 擦除整个串行Flash】
【4 - 写整个串行Flash, 全0x55】
【5 - 读整个串行Flash, 测试读速度】
【Z - 读取前1K,地址自动减少】
【X - 读取后1K,地址自动增加】


其中,4,5命令要花很长很长很长的时间,我怀疑是不是两边SPI不一样所以有问题。
其余的命令我试过,都是可以很快出结果的。



使用特权

评论回复
沙发
编号10086|  楼主 | 2021-7-23 13:52 | 只看该作者
另外我怀疑是不是KF32手册中SYSTICK章节的中,嘀嗒定时器时钟源的地方写反了。

因为安富莱例程中测试了读写时间,我发现测试得到的时间比真实值大了一倍。然后才去查嘀嗒中断的时间,发现是2ms。
而我是按照手册计算得出的明明是1ms。

所以我会怀疑是不是手册写反了。把SCLK写错为了SCLK/2???

使用特权

评论回复
板凳
编号10086|  楼主 | 2021-7-23 13:55 | 只看该作者
我定时器配置在bsp_timer.c/bsp_InitTimer这个函数中。
大家如果有官方开发板的话,可以帮我测试一下这个程序。

看看是不是手册里ST_CTL寄存器的STCLKS描述写反了?

使用特权

评论回复
地板
编号10086|  楼主 | 2021-7-23 14:03 | 只看该作者
编号10086 发表于 2021-7-23 13:52
另外我怀疑是不是KF32手册中SYSTICK章节的中,嘀嗒定时器时钟源的地方写反了。

因为安富莱例程中测试了读 ...

我知道了...原来还有一个STCLKREF位和ST_CTL->STCLKS共同控制时钟源...所以我之前的配置其实没起到作用...

使用特权

评论回复
5
sparrow054| | 2021-8-11 15:29 | 只看该作者
是时钟配置的问题么

使用特权

评论回复
6
编号10086|  楼主 | 2021-8-12 08:50 | 只看该作者
sparrow054 发表于 2021-8-11 15:29
是时钟配置的问题么

不是。
1.我怀疑这个板子的硬件SPI可能就是有问题的。
2.这个帖子中遇到的问题:SPI有四种模式,板载的SPI_FLASH支持其中两种。但是官方配置的不是这两种。
可是,还是虽然配置错误,SPI的数据还是可以歪歪扭扭的读出来,只是有一部分乱码。把模式改回去,就不会有乱码了。

3.但是后来我还是遇到了问题,这个帖子里面没贴(因为后来我不用芯旺微了,所以没有去深究它)
这个问题就是多个SPI设备用同一个MISO,MOSI,CLK线的场景,我把两个SPI设备(他们CS线不同,其余都相同)连到同一个SPI线上,出现了一个问题,就是只接入一个设备的时候,是可以正常通讯的。接入第二个设备,第一个设备读写就乱码了。(后来我想用软件SPI去做,不过由于要移植另外一款芯片,就没有继续深究这个问题了,我觉得改成软件SPI应该就可以解决这个问题。)

使用特权

评论回复
7
编号10086|  楼主 | 2021-8-12 08:54 | 只看该作者
sparrow054 发表于 2021-8-11 15:29
是时钟配置的问题么

时钟配置,是由于安富莱例程中,提供了程序执行时间测试的函数。
我用这个函数去测试SPI_FLASH读写时间,发现比实际电脑时钟的时间长1倍。

后来就去找原因,发现了芯旺微如果要配置时钟的话,需要设置两个地方。
这个导致了,我之前配置的参数没有起到作用,整体嘀嗒时钟从1ms变成了2ms。

之前一直没有发现这个问题,算是写这个SPI程序附带找到原先程序中存在的一个BUG吧,但是这个不是SPI读写乱码的原因。

使用特权

评论回复
8
daichaodai| | 2021-8-13 21:05 | 只看该作者
谢谢楼主,最近刚好在学习这块的代码。

使用特权

评论回复
9
sparrow054| | 2021-9-2 09:11 | 只看该作者
编号10086 发表于 2021-8-12 08:54
时钟配置,是由于安富莱例程中,提供了程序执行时间测试的函数。
我用这个函数去测试SPI_FLASH读写时间, ...

真不错,学习了

使用特权

评论回复
10
勇敢的大白菜| | 2021-9-6 09:25 | 只看该作者
感谢楼主的分享,不错的经验。

使用特权

评论回复
11
caigang13| | 2021-9-7 12:32 | 只看该作者
谢谢楼主分享避坑经验

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

76

帖子

0

粉丝