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

采用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];
; ?& j' D% f' U& B$ R, _; K6 p
然后主程序中使能SPI端口:HAL_SPI_MspInit(&hspi1);
最后就是读取ID命令了,如下图
捕获.JPG
此时Rxdata=0xEF14,这个就是W25X16的ID号。
读取ID正确了,剩下的就是对Flash的操作了。

2 N: w8 F% V" O, A

. z4 }) e' D2 I! i
6 B  X' y" d! n2 Q3 l) n+ T  c% J( v1 D/ _
赞 收藏 3 评论27 发布时间:2015-1-13 16:35

举报

27个回答
为它停留 回答时间:2015-1-31 15:38:30
为它停留 发表于 2015-1-31 15:357 F, j* o% R5 i3 W& M+ j
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?
. g# \( L2 t% |. s1 l$ zvoid SPI_FL ...

# @: _4 M" T5 Y8 X) t* vvoid SPI_FLASH_WriteEnable(void)
2 N: a) C$ ]% g$ s{' E( b: {& d9 ~" x! v
  SPI_FLASH_CS_LOW();! a# r9 I" k* `. W% J( J, f
  HAL_SPI_Transmit(&hspi1, &W25X_WriteEnable, 1, 100);2 b: I4 y; ]2 N4 F) \& Z
  SPI_FLASH_CS_HIGH();
' k; l' R! h: k& W$ }; I) s}
% Y3 @2 S- p' x9 N; ~uint8_t SPI_FLASH_SendByte(uint8_t byte)5 w) X9 [4 |6 `; h: N2 X
{
( d* F+ m6 ~/ B: O! q        uint8_t temp;
  L3 z% v  k! L        uint8_t temp1[1];
1 ~+ @/ k2 M+ a. J4 M        HAL_SPI_TransmitReceive(&hspi1, &byte, &temp1[0], 1,100);+ M0 j9 ?  f. W+ B
        temp=temp1[0];
! \6 {* U1 f8 b  s* k        return temp;
" Y: A) h- L( k! G9 L. N}* N. ]+ V; Z2 a, F
void SPI_FLASH_WaitForWriteEnd(void)  
! P" U; ?' ]# {+ Z9 q" s7 |{   : c2 O0 T$ h$ I
        uint8_t FLASH_Status=0;! ~6 n# E! c' _  G7 J
        uint8_t temp1[1];
) o" Y& s: G! l* O1 F        SPI_FLASH_CS_LOW();! ^6 ?& B$ H: l& a5 T4 ^$ c
  HAL_SPI_Transmit(&hspi1, &W25X_ReadStatusReg, 1, 100);        ) X+ C5 B' y% O! a8 Y! O
        do
8 x2 O1 |  C% ]4 O  {/ r: e9 [5 I( K. R+ ]1 _
                HAL_SPI_TransmitReceive(&hspi1, &Dummy_Byte, &temp1[0], 1,100);
; Y( @$ N  q  g2 Q# `1 A5 T                FLASH_Status = temp1[0];# S1 r' E& j1 a1 G+ |
  }
: e( O* L; }. ~# K0 z# P1 l        while ((FLASH_Status & WIP_Flag) == SET);
# u# w; y. m% ]2 _        SPI_FLASH_CS_HIGH();; q' ^/ ~1 S5 A" X+ B) J
}
+ M6 x. K, W1 s/ d2 H这是用调用到的函数
为它停留 回答时间:2015-1-30 11:37:38
feiante 发表于 2015-1-30 11:15' c5 r7 q3 f8 I3 a. g( l
一般不应该是0,如果读不到,应该是FF
! B" ?3 R0 @! w2 f2 [: m
SPI的引脚配置可以这样设置吗?    /**SPI1 GPIO Configuration    ) n2 r' R! o# g: B
    PB3     ------> SPI1_SCK7 U% [. c9 {( e" L
    PB4     ------> SPI1_MISO
, d0 U8 v0 J& b+ N9 v    PB5     ------> SPI1_MOSI ! c( l/ c% h. {# o
    */
+ l8 R/ _3 v5 E. b, {' I    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
% v/ j& F$ d. M4 u: L. R* ^    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
& @8 D% I* K, ~/ g6 W6 v7 A    GPIO_InitStruct.Pull = GPIO_NOPULL;
0 k) }* q+ f: Q4 V) Y    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;' m, ^! R  }1 _. X! x9 ?
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
0 P, A2 F# G9 v    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
为它停留 回答时间:2015-1-31 15:35:56
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?* q8 p7 z8 J0 w) A, i( }% C; |
void SPI_FLASH_SectorErase(uint32_t SectorAddr)$ z9 n7 t9 S, X# m
{3 t3 w& k& }( ]' q1 P
  SPI_FLASH_WriteEnable();
: R) s8 ^% L1 o* Y  {  SPI_FLASH_CS_LOW();
/ S3 J/ b4 e+ ~% E- |2 J& t' q/ O  c  SPI_FLASH_SendByte(W25X_SectorErase);
. m5 L8 |# o9 @$ w9 G4 X  SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
* Q& ?# @1 F2 R8 v2 }$ _  SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);* u3 e9 B: Z# j, p# d% {
  SPI_FLASH_SendByte(SectorAddr & 0xFF);* a( E5 D" i' ^" n7 W' Y
  SPI_FLASH_CS_HIGH();
% s1 Q5 `3 _+ E7 N$ R- ]  SPI_FLASH_WaitForWriteEnd();
: S$ j6 T6 P6 w}
沐紫 回答时间: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
7 M3 R1 R# W  [0 Z2 n哥们,按你的方法我的还是ID都为0,可以把你的工程分享一下吗?我的邮箱
1 r3 K* _: m" ~' I/ P1 b
一般不应该是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 手机版