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

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

% ^; a' f& k! c9 L. P, H# y& U
然后主程序中使能SPI端口:HAL_SPI_MspInit(&hspi1);
最后就是读取ID命令了,如下图
捕获.JPG
此时Rxdata=0xEF14,这个就是W25X16的ID号。
读取ID正确了,剩下的就是对Flash的操作了。

2 X+ s: X- v# \% B/ G7 A
4 |$ D1 x1 B  O) m
, f) y: @' j) e: h8 F* \2 f

. l. I. B0 C0 C$ J8 h1 l4 @: q
收藏 3 评论27 发布时间:2015-1-13 16:35

举报

27个回答
为它停留 回答时间:2015-1-31 15:38:30
为它停留 发表于 2015-1-31 15:35* Q. d! e( g3 b1 W$ m5 ]
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?
6 p% k, G2 K; ~$ T/ Ovoid SPI_FL ...

: U2 S# y2 ^3 {6 j. T8 K" Hvoid SPI_FLASH_WriteEnable(void)
! [' j* z7 Q  |% Z: X' }% S{3 i( z; E" v; ?, b
  SPI_FLASH_CS_LOW();. r: y! q& H: @. R: m, H1 t
  HAL_SPI_Transmit(&hspi1, &W25X_WriteEnable, 1, 100);( o- T9 d6 s( e/ m3 W
  SPI_FLASH_CS_HIGH();
" H3 P2 V5 A4 }% P' Y}
4 w: a' m% y2 {2 Z9 s( Q* Uuint8_t SPI_FLASH_SendByte(uint8_t byte)
, `4 R( o' v8 j5 j. q, P' P, r{
' l1 u) t- n% P) @) `3 A0 k" \        uint8_t temp;
% a. R. K) ?6 ~! ~5 e9 g% {        uint8_t temp1[1];: q0 |; @( m5 H1 `! F# P, `) f
        HAL_SPI_TransmitReceive(&hspi1, &byte, &temp1[0], 1,100);
5 m. e3 s7 Y9 W+ Q3 n        temp=temp1[0];
, Y0 l( ^1 k7 m' `: C        return temp;
5 c" k" G/ q( P! f( u}
7 \7 r( @2 e5 }: o% f; R1 yvoid SPI_FLASH_WaitForWriteEnd(void)  
2 I7 B6 K( Q$ K, ~! c, T! @{   3 g4 C3 |; _. j! a% W. r6 L
        uint8_t FLASH_Status=0;
/ C! [+ @  Y) Q- N        uint8_t temp1[1];
: s5 n( U) R9 e0 h        SPI_FLASH_CS_LOW();* a6 K4 I: {1 V) a: L0 p$ z) |
  HAL_SPI_Transmit(&hspi1, &W25X_ReadStatusReg, 1, 100);       
, G8 x& T1 H3 Z- n7 s        do- F6 B) q5 i- H* f- a2 {" A5 s/ A
  {4 r: `. T  Z0 v* u
                HAL_SPI_TransmitReceive(&hspi1, &Dummy_Byte, &temp1[0], 1,100);: ^9 m0 v8 X* Y) P' k/ z( z
                FLASH_Status = temp1[0];- M# f3 f4 J* ?7 n- X3 d
  }
0 e0 p0 N" g3 F. u3 I4 Y        while ((FLASH_Status & WIP_Flag) == SET);
/ j. |0 i+ c% B# z- ^3 |1 t        SPI_FLASH_CS_HIGH();
; k* [2 c8 l0 B}
  H+ I1 O7 d, r- n+ U这是用调用到的函数
为它停留 回答时间:2015-1-30 11:37:38
feiante 发表于 2015-1-30 11:15
0 I% b' @# {) ~5 i7 E一般不应该是0,如果读不到,应该是FF
4 w2 _4 A# o. g* U/ q, s3 W
SPI的引脚配置可以这样设置吗?    /**SPI1 GPIO Configuration    9 @% T: b- q# u  X1 D
    PB3     ------> SPI1_SCK
9 U8 V# u  ^, k5 s3 f    PB4     ------> SPI1_MISO2 N8 j" x( m3 ?7 K1 y  u
    PB5     ------> SPI1_MOSI
! d: A% ^) _7 v. o$ `' `1 K    */
6 U5 c# e  P; H  j4 ^! |( l7 P    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;2 D5 r0 f: t4 p3 W, E
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
9 [# f/ n6 r0 @6 a! _- g0 R    GPIO_InitStruct.Pull = GPIO_NOPULL;
3 F9 s" l! t8 L6 z    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
. j8 L- r. D, J: P    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
/ ]& H) F5 _$ L- H: a* Q+ Y6 m3 v    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
为它停留 回答时间:2015-1-31 15:35:56
我的ID读正确了,还是时候问题,我的是F407,用cube不能进行擦除,你看看我的代码哪有有问题?' v' t; @: |1 \; k2 H
void SPI_FLASH_SectorErase(uint32_t SectorAddr)
; m+ h' C7 J* `& P2 O; h% u( a$ e2 K{
1 s4 N, `7 w5 k$ S, U) `  SPI_FLASH_WriteEnable();9 B8 ^* r" T, n5 q" K5 |- u& Z0 F
  SPI_FLASH_CS_LOW();
6 h2 v, O) [4 _  SPI_FLASH_SendByte(W25X_SectorErase);
  }6 a$ y5 e, s' k" X6 t6 t6 {3 E  SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
( Z, A: @0 J. h/ s7 q2 ]0 k  SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);
% o: Q% H# v% K5 v  SPI_FLASH_SendByte(SectorAddr & 0xFF);4 n5 J4 T! l0 B3 P9 b6 {; \
  SPI_FLASH_CS_HIGH();
3 T  \2 Z  ~% l8 e  SPI_FLASH_WaitForWriteEnd();. L4 n$ C0 D* r# \( _5 T+ 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$ O4 B- D) h, `. z% t# w
哥们,按你的方法我的还是ID都为0,可以把你的工程分享一下吗?我的邮箱
4 d; a& t" d/ Z, B5 o8 ^
一般不应该是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 手机版