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

采用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];

8 z1 o0 _2 a/ M# L' u" M
然后主程序中使能SPI端口:HAL_SPI_MspInit(&hspi1);
最后就是读取ID命令了,如下图
捕获.JPG
此时Rxdata=0xEF14,这个就是W25X16的ID号。
读取ID正确了,剩下的就是对Flash的操作了。

6 Y6 g# M2 V: `% S8 R

9 l1 J; |: U4 v" O% q0 d0 q/ r8 C6 {8 |1 F( q

0 }) G  {  k6 h" f! Q
赞 收藏 3 评论27 发布时间:2015-1-13 16:35

举报

27个回答
为它停留 回答时间:2015-1-31 15:38:30
为它停留 发表于 2015-1-31 15:35. R1 @1 m3 @9 R$ o
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?
8 S/ |9 l5 I4 Y9 kvoid SPI_FL ...

* [8 [# _8 c/ `1 K, t+ kvoid SPI_FLASH_WriteEnable(void)9 S9 {6 e' a" g7 |
{1 O3 f" [0 P9 |
  SPI_FLASH_CS_LOW();8 j) u0 o0 t/ |0 g
  HAL_SPI_Transmit(&hspi1, &W25X_WriteEnable, 1, 100);2 d, x  d% m! Y2 U0 o
  SPI_FLASH_CS_HIGH();
; e. c5 }' U. g" s6 n( F8 A$ J}3 c/ R9 L( e& {. W* m0 |3 I& e1 R
uint8_t SPI_FLASH_SendByte(uint8_t byte)4 l) r" S$ j: e. D
{, c0 ]6 `$ E. O- k8 z) I. V6 e
        uint8_t temp;
" N- e/ }; \1 {: Q3 A        uint8_t temp1[1];: T  x! g* j; d: a$ W' C- K" _
        HAL_SPI_TransmitReceive(&hspi1, &byte, &temp1[0], 1,100);  O7 L  o4 W- A5 b, T+ `
        temp=temp1[0];; L, `9 L9 w0 f5 V7 [
        return temp;
4 Z6 D) s+ K3 E  ]6 \2 s/ X5 H3 K}
9 T( R7 T3 S# G5 uvoid SPI_FLASH_WaitForWriteEnd(void)  , t% s4 R; L, a1 B
{   & {; K1 F! Q( W" ~$ b  v
        uint8_t FLASH_Status=0;: C- F2 z1 p2 V1 Q
        uint8_t temp1[1];4 y( ]. ^9 S- |& z/ `
        SPI_FLASH_CS_LOW();8 E* C1 `+ k* y0 n. V
  HAL_SPI_Transmit(&hspi1, &W25X_ReadStatusReg, 1, 100);        : s. W. [- B2 Q. N; L+ O
        do8 Q0 N" T" `7 u" D$ ^) n3 C
  {* _9 b! M, ]% E& F5 k
                HAL_SPI_TransmitReceive(&hspi1, &Dummy_Byte, &temp1[0], 1,100);  ]0 ?" |6 g+ r' P) d$ _
                FLASH_Status = temp1[0];+ k4 v0 A( i( p+ n6 i
  }
- d( y1 n: g$ Y7 B6 D9 Z! I8 w. ]        while ((FLASH_Status & WIP_Flag) == SET);
) J* s" k- O+ T' m( t& P        SPI_FLASH_CS_HIGH();
' `( s) y/ @* E}
. }0 R( {; X, h! P- h  H4 @这是用调用到的函数
为它停留 回答时间:2015-1-30 11:37:38
feiante 发表于 2015-1-30 11:15
0 E0 j5 l1 k7 Q( p7 L+ E, M) D一般不应该是0,如果读不到,应该是FF

# B: p9 m8 o1 m6 e/ gSPI的引脚配置可以这样设置吗?    /**SPI1 GPIO Configuration   
# ^/ B0 j# \; T  U) D, _- G" [    PB3     ------> SPI1_SCK
  h' l& J+ z6 l; a' B    PB4     ------> SPI1_MISO
7 T+ O6 S; F* Z( N* u; \' ^    PB5     ------> SPI1_MOSI 1 _6 j2 Y6 N5 c+ G% p& l: k3 F
    */
5 e8 B: L; N2 y- \  i    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
' }0 H8 p  e" a, a4 J. K/ Z$ w. Y    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- E3 H) t+ c9 N" [: G- |( y6 k/ O" j    GPIO_InitStruct.Pull = GPIO_NOPULL;5 n% m; v$ X; [4 p
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
7 [6 ]& i  X7 D( b    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;! U( d7 _# n& o( \. a
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
为它停留 回答时间:2015-1-31 15:35:56
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?& G# ^2 G. R' w6 q8 c- C) Y' k
void SPI_FLASH_SectorErase(uint32_t SectorAddr)9 \8 ^9 t: N( i/ I
{
# N5 C+ P0 O  f9 ^- \  SPI_FLASH_WriteEnable();
- x; B4 Y5 U" N7 c9 Q4 Z% c! c% z  SPI_FLASH_CS_LOW();
7 G" w1 T- w& q9 o  y- S( ^- U# J  SPI_FLASH_SendByte(W25X_SectorErase);
5 K- \% j' S* ]1 A( B  SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
/ v! I4 J1 d% c0 y, {& a  SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);
5 }6 w5 Y1 y2 e$ _4 d+ W  SPI_FLASH_SendByte(SectorAddr & 0xFF);. m# M. J* D9 ]; O! z" R6 n2 d
  SPI_FLASH_CS_HIGH();0 g* B- z0 q+ L! k# Q9 P$ z" K
  SPI_FLASH_WaitForWriteEnd();
; [& O" s' x! |1 t" h% v$ _, ?# z}
沐紫 回答时间: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# F$ K" q5 D7 n$ i
哥们,按你的方法我的还是ID都为0,可以把你的工程分享一下吗?我的邮箱
' J; I+ Y2 l) d
一般不应该是0,如果读不到,应该是FF
时光碎了天 回答时间:2015-1-30 11:26:27
好贴,谢谢了
逍遥李 回答时间:2015-1-31 10:29:41
感谢分享,
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版