你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030F4的SPI问题

[复制链接]
是老王啊 提问时间:2022-5-5 00:13 / 未解决

大家好,我最近用STM32F030F4的SPI驱动一块3.5寸LCD,是三线的,LCD要求时序如下

SPI时序.PNG

于是我配置SPI为9bit,主频28兆,4分频为7兆,配置如下

SPI.PNG

使用的HAL_SPI_Transmit发送函数,发现执行到数据写入DR时就进硬件错误中断了

stm32f03xx_hal_spi.c中,,执行到下面就硬件错误了.

err.PNG

使用IO模拟是没有问题的,整的我一时摸不着头脑了,网上找了一圈也没有具体方法,请教下大家怎么搞.

收藏 评论8 发布时间:2022-5-5 00:13

举报

8个回答
老牛洋车 回答时间:2022-5-5 08:06:15

我也一直都是用模拟SPI驱动显示屏,硬件SPI有点摸不着头脑。

废鱼 回答时间:2022-5-5 08:25:40

发送函数如何调用的?可能是因为发送的数据内容和实际长度不符合,导致内存溢出后进入错误中断。

xmshao 回答时间:2022-5-5 11:38:56
如果说发生硬错的话,极有可能跟你的用户代码密切相关,请注意数组边界、数据宽度对齐方面的问题。
butterflyspring 回答时间:2022-5-5 15:42:24

发送数据定位为9位,看看发送缓冲区定义等是否造成了最终内存溢出。 测试了一下,如果都是定义为8位的,可以发送出数据,会造成hardfault。

是老王啊 回答时间:2022-5-5 17:40:14

butterflyspring 发表于 2022-5-5 15:42
发送数据定位为9位,看看发送缓冲区定义等是否造成了最终内存溢出。 测试了一下,如果都是定义为8位的 ...

[md]我发送数据定的unsigned short,按说应该没问题的啊HAL_SPI_Transmit(&hspi1,(uint8_t *)CMD,1,1000);这样传过来的CMD为0x011时不会死在那,但是看DR还是0x0000,

改CMD为0x11时,HAL_SPI_Transmit(&hspi1,(uint8_t *)(CMD&0xeff),1,1000);就会出错

是老王啊 回答时间:2022-5-5 23:28:40

xmshao 发表于 2022-5-5 11:38
如果说发生硬错的话,极有可能跟你的用户代码密切相关,请注意数组边界、数据宽度对齐方面的问题。 ...

东搞西搞,没硬件错误时候调试看DR寄存器数据也是不对劲的

废鱼 回答时间:2022-5-6 08:28:19

(uint8_t *)(CMD&0xeff),你这个是取(CMD&0xeff)的地址,这是个非法的地址。我不知道你这里想怎么用,如果只是想修改CMD的值,要单独写。

是老王啊 回答时间:2022-5-6 18:30:39

OK终于搞定了,

具体配置如下:

image.png

image.png

微信图片_20220506182632.jpg

不过SPI刷屏速度很蛋疼,还是尽量并口把!

代码:

F030F4.zip

image.png
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版