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

采用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];
$ ]: E$ z/ P0 b' X" g
然后主程序中使能SPI端口:HAL_SPI_MspInit(&hspi1);
最后就是读取ID命令了,如下图
捕获.JPG
此时Rxdata=0xEF14,这个就是W25X16的ID号。
读取ID正确了,剩下的就是对Flash的操作了。

1 m9 [, p. c4 n; v$ ~, S& n7 G( A

5 a& R. s2 c1 G) I/ p. U8 C4 W. Q. e3 A( {8 C

  K4 ?) P8 f" B' t8 e; q4 Z8 j4 g
收藏 3 评论27 发布时间:2015-1-13 16:35

举报

27个回答
为它停留 回答时间:2015-1-31 15:38:30
为它停留 发表于 2015-1-31 15:35
% D9 o# G  D, O5 }" \7 |: U我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?
7 s7 |( o8 f4 u! J, Yvoid SPI_FL ...

% ^2 k9 ^! s4 \9 b# n8 ?; \. h! Wvoid SPI_FLASH_WriteEnable(void)$ I6 _6 l0 ?2 J5 H+ @: t
{, D! A# A. P4 q, V
  SPI_FLASH_CS_LOW();/ k5 K# w2 [! f6 ?5 G* Y8 R4 R/ ~
  HAL_SPI_Transmit(&hspi1, &W25X_WriteEnable, 1, 100);. i* ]. t/ J( W6 U
  SPI_FLASH_CS_HIGH();* i, E5 l9 z' G9 O0 X3 |
}6 A5 E& m& `5 J% x9 E+ _7 t! f8 M
uint8_t SPI_FLASH_SendByte(uint8_t byte)
0 o$ u5 j& ]( N6 R{- a0 I  z# o  }3 `2 c9 [: s
        uint8_t temp;/ e2 k6 Q: @8 k5 j) `
        uint8_t temp1[1];) a2 l( S# p( n0 H1 I  s
        HAL_SPI_TransmitReceive(&hspi1, &byte, &temp1[0], 1,100);
8 L7 r' D0 g* N+ _        temp=temp1[0];) E3 B3 d) g* r% g% X4 T: d
        return temp;
" k- r$ E+ L- v; u}0 y6 s$ b2 v5 `- l
void SPI_FLASH_WaitForWriteEnd(void)  - A3 A7 G3 p9 m
{   " h9 a/ o/ Q# Z0 G- h. p  y1 m
        uint8_t FLASH_Status=0;
0 l8 h9 b. S% I8 R$ \; f( l        uint8_t temp1[1];! [6 M# C6 F- x+ i$ m! I
        SPI_FLASH_CS_LOW();7 D* \" @9 @. \/ {) d0 Q1 ]
  HAL_SPI_Transmit(&hspi1, &W25X_ReadStatusReg, 1, 100);        " _# Q9 K3 Z! N  v3 {- G$ P( p
        do
# F  ]' B3 A3 w" `& V1 v. T  {
9 M+ g# M& @! U                HAL_SPI_TransmitReceive(&hspi1, &Dummy_Byte, &temp1[0], 1,100);
" b' v( v( R5 H( d0 ]+ ~                FLASH_Status = temp1[0];
' ~% y4 a4 q5 v8 |  }
9 n" J& q0 u6 b) P" M% t        while ((FLASH_Status & WIP_Flag) == SET);
2 M5 X* Y8 A& y        SPI_FLASH_CS_HIGH();
6 r- F  n+ a, H+ H; o/ O}
4 R! e+ a$ z9 H, C5 |7 v4 ]# K这是用调用到的函数
为它停留 回答时间:2015-1-30 11:37:38
feiante 发表于 2015-1-30 11:15
: K. i% ^& ^+ R# X9 |一般不应该是0,如果读不到,应该是FF

- P$ f- z- Z# g! r( sSPI的引脚配置可以这样设置吗?    /**SPI1 GPIO Configuration    ' u6 H8 g. f9 N( K
    PB3     ------> SPI1_SCK
* b! v& }# v1 S2 E    PB4     ------> SPI1_MISO# x% x5 }1 ^5 |* d! [( j
    PB5     ------> SPI1_MOSI
/ K' v( b# F0 e( n, U    */
6 V3 w: W/ H) B+ Z    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
& Y, F! E1 K, w3 _    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;: [; B4 {. v+ Q3 y* E: K
    GPIO_InitStruct.Pull = GPIO_NOPULL;
, |  ?$ ]! |$ b2 R$ B1 o" D    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
, Q8 n# c! ?0 c5 F; [    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
6 c1 P" E: \9 o1 o    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
为它停留 回答时间:2015-1-31 15:35:56
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?8 ~4 [( A8 J& w0 `" P" U4 V9 u
void SPI_FLASH_SectorErase(uint32_t SectorAddr)
7 R- z! B' J2 g! q0 a9 c& _{' p( X9 X2 E; A! x+ x: y9 m% ]( G
  SPI_FLASH_WriteEnable();& L+ l6 s' m5 y- I
  SPI_FLASH_CS_LOW();
- d+ `2 U) @& N: j6 a/ X  SPI_FLASH_SendByte(W25X_SectorErase);
! @2 w% i3 C5 t) g% m& S+ y  SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
( i2 ~) L3 S! B) @  SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);% G0 `9 E3 q/ R  d0 }
  SPI_FLASH_SendByte(SectorAddr & 0xFF);9 h1 Y# l  B. @; j/ W
  SPI_FLASH_CS_HIGH();
" P9 ~! O) S- ?) s; ~& W( o% ], r  SPI_FLASH_WaitForWriteEnd();
1 d  q; L. |; Q% {9 J' g$ q5 K}
沐紫 回答时间: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
' @' B7 Q8 h( R5 r1 Y哥们,按你的方法我的还是ID都为0,可以把你的工程分享一下吗?我的邮箱
/ P) {: f* a; |1 U3 S3 I+ T
一般不应该是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 手机版