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

采用stm32cubemx进行SPI设置的方法  

[复制链接]
feiante 发布时间:2015-1-13 16:35
试验目的:芯片采用F0芯片,通过配置SPI1完成W25X16的读写。片选CS为PA1,SCK为PB3,MISO为PB4,MOSI为PB5
具体配置:
捕获.JPG
捕获.JPG
由于没有使用中断和DMA,所以中断配置不选。
捕获.JPG
程序分析:
首先要读取W25X16的ID号,需要发送0x90,加2个伪数据+0x00。同时由于ID号为2个8位数据构成,并且ST的F0芯片的SPI是要读取时需要先写,所以定义
uint8_t Data1[4] = {0x90,0x00,0x00,0x00}
uint8_t Data2[2]= {0x00,0x00}
uint8_t Rxdata[2];
$ Q2 G! w8 J  k0 }7 a
然后主程序中使能SPI端口:HAL_SPI_MspInit(&hspi1);
最后就是读取ID命令了,如下图
捕获.JPG
此时Rxdata=0xEF14,这个就是W25X16的ID号。
读取ID正确了,剩下的就是对Flash的操作了。
/ v2 P' T9 S- n4 R6 o+ s
& P. r  m* j# R0 w
2 ]; f" O3 y* `
0 q, @5 C8 M3 m, n4 ^
收藏 3 评论27 发布时间:2015-1-13 16:35

举报

27个回答
为它停留 回答时间:2015-1-31 15:38:30
为它停留 发表于 2015-1-31 15:35& T0 y: a7 y. ?* a8 @) h# n, M* S
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?
( ?* N( @& i7 c8 ~1 l. m. J6 Gvoid SPI_FL ...

& ^1 S- w$ u3 Z/ r& b6 avoid SPI_FLASH_WriteEnable(void)
6 V2 o' k6 n$ K8 G6 ^- k5 `{
% K" B: m6 [! T# v  SPI_FLASH_CS_LOW();
$ k" [* N# W9 C0 g  HAL_SPI_Transmit(&hspi1, &W25X_WriteEnable, 1, 100);
/ b+ p  ~' u$ P2 a  SPI_FLASH_CS_HIGH();! C. e0 Z, P; [- ?
}; {. E5 [) D& i" _* E: E
uint8_t SPI_FLASH_SendByte(uint8_t byte)
) l( P/ d8 _$ C* A3 L/ _{5 V+ D5 l4 t0 l7 e/ S
        uint8_t temp;
& c2 F; q3 a: Y- W* v! `        uint8_t temp1[1];
# |8 f9 J7 b/ Z: @. j; u        HAL_SPI_TransmitReceive(&hspi1, &byte, &temp1[0], 1,100);% Q* l  N7 u7 C+ N
        temp=temp1[0];7 [) `( [6 e+ R) D/ Z% u/ h, v$ E
        return temp;. R8 j+ R3 ~/ O+ E6 W. b' r9 [; w
}( L* T% k, _. G% x
void SPI_FLASH_WaitForWriteEnd(void)  ' H! T8 v, O% f5 }, D, d! ~
{   " p+ W9 [9 E( c; J) z% h
        uint8_t FLASH_Status=0;% C5 r9 L# I0 d* }
        uint8_t temp1[1];. l' t! l' p6 f  z0 t. M: Z
        SPI_FLASH_CS_LOW();
9 Z" p0 i8 \+ _, C  HAL_SPI_Transmit(&hspi1, &W25X_ReadStatusReg, 1, 100);       
  m2 W0 V8 P1 z/ {( j6 n, {' F5 r        do
- e, b: w6 x! u$ O  {
# {! l% k( X& b* |                HAL_SPI_TransmitReceive(&hspi1, &Dummy_Byte, &temp1[0], 1,100);
! S6 P5 V. `2 m, I9 s                FLASH_Status = temp1[0];3 L/ k3 \5 v) g7 L
  }/ a& L  u8 L3 i+ B$ @" F& S
        while ((FLASH_Status & WIP_Flag) == SET);
/ G( Z( A+ H; c3 V: a) E        SPI_FLASH_CS_HIGH();# N+ m8 x! j' N7 @3 ?' q9 S
} 9 ?0 E3 N4 |( i; f
这是用调用到的函数
为它停留 回答时间:2015-1-30 11:37:38
feiante 发表于 2015-1-30 11:15* p7 K6 ~# u; i2 I; ^1 P0 U0 _& o/ g
一般不应该是0,如果读不到,应该是FF

& U& F" d. Q# u: bSPI的引脚配置可以这样设置吗?    /**SPI1 GPIO Configuration   
( N6 ]2 p' s! Q+ c1 J3 I  k    PB3     ------> SPI1_SCK
% H" h, d. N# n& J" R% S    PB4     ------> SPI1_MISO
  @5 C9 t, H$ K5 D$ B. d& ~    PB5     ------> SPI1_MOSI ) N, T! h) ^' ^1 `, O, N& R  ~+ v
    */
( A7 F3 c% {. Z3 t    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
" m& _' p. `' p1 s  V: O) s0 t    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
# o) w' Z* p$ K% _6 i; D6 y5 A    GPIO_InitStruct.Pull = GPIO_NOPULL;
! E4 w. `; t1 m& T' V, q; r; H! J    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;/ u+ p! ]- P, h+ K6 x
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;- ]( c  [5 W' f+ X
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
为它停留 回答时间:2015-1-31 15:35:56
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?
8 G, P7 a9 I( z7 c7 Mvoid SPI_FLASH_SectorErase(uint32_t SectorAddr)
& |; V; U: C: d/ D# ?- r% V{
. ~9 L# ~! W/ v0 t  SPI_FLASH_WriteEnable();
8 l# I) _! n" R4 q# t9 n; E' q! {  SPI_FLASH_CS_LOW();) S& k' A. Q1 S/ f: l3 ]
  SPI_FLASH_SendByte(W25X_SectorErase);
; C0 \/ T2 H9 ^  ]  SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
2 C/ y# R  n% s. r6 o# P8 H, g0 F1 e& w0 J  SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);$ T- _$ `/ n/ P" Z! Q3 w
  SPI_FLASH_SendByte(SectorAddr & 0xFF);" b- T  {8 Q" [# o: O% Q, r
  SPI_FLASH_CS_HIGH();5 _' O% }8 a6 D  g
  SPI_FLASH_WaitForWriteEnd();
, \0 t7 k2 |3 {}
沐紫 回答时间:2015-1-13 16:47:47
谢谢
埃斯提爱慕 回答时间:2015-1-14 11:40:28
提示: 作者被禁止或删除 内容自动屏蔽
lkl0305 回答时间:2015-1-14 13:10:54
学习哈!
为它停留 回答时间:2015-1-29 18:00:41
哥们,按你的方法我的还是ID都为0,可以把你的工程分享一下吗?我的邮箱1305886705@qq.com
kqh1120 回答时间:2015-1-29 18:44:38
学习了 1.png 1.png
宛仔 回答时间:2015-1-29 19:01:45
cube确实很方便,期待中文的cube库函数说明。
拼命三郎 回答时间:2015-1-30 08:17:46
stm32.jpg
ataudio 回答时间:2015-1-30 09:31:35
好帖,谢谢分享。

二十四节气~大雪

二十四节气~大雪
feiante 回答时间:2015-1-30 11:15:45
为它停留 发表于 2015-1-29 18:00) n/ ^/ Q: J% z, r6 G- u5 o
哥们,按你的方法我的还是ID都为0,可以把你的工程分享一下吗?我的邮箱
" G+ _& t8 h& J" O
一般不应该是0,如果读不到,应该是FF
时光碎了天 回答时间:2015-1-30 11:26:27
好贴,谢谢了
逍遥李 回答时间:2015-1-31 10:29:41
感谢分享,
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版