|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
7 j0 b' M* n2 [% j' gSTM32F1的SPI配置问题,卡在等待发送完成,高手帮忙看下哪里配置的有问题??
, m$ t0 ~9 c0 }# q5 L9 U% [
8 f* K$ v" v3 b$ b1 `void SPI2_Init(void)
4 F+ I% ~8 _0 k" p% r* F7 A x{ ; P) U. h- L/ w& D- G" ^8 J
GPIO_InitTypeDef GPIO_InitStructure;- Z A/ V: ~. K! a4 U
SPI_InitTypeDef SPI_InitStructure;& _8 s1 ]9 ]1 G' o2 {
# L0 g/ U: ?; y/ ?7 q1 @3 S) b6 o3 U
RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOB, ENABLE);
?" A/ F8 S3 A {: I6 \ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
9 R2 r4 O; r1 o) V RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);8 a. f1 L$ M5 h4 z
; ?- H) t0 P2 @1 E0 Z
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //Flash Power& }* t( ?, E9 P5 ~: {3 [+ ~
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
) m! B+ W/ u) } GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;% h' l/ f: t, q
GPIO_Init(GPIOB, &GPIO_InitStructure);
7 }2 l$ @, L! @* n. G9 m
4 g u3 X: n2 d! z( _# W- a GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //CS 接 NSS
4 v, L, O0 ^2 g( D/ G GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
$ K) u/ r' N6 ]# a" e6 A. V6 [ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
0 E4 a# W w" [4 I GPIO_Init(GPIOB, &GPIO_InitStructure);
8 Q) d5 D6 c4 s! Q2 ]9 f! u: e# i
* x( X1 U/ ^0 i# j' c# {+ n GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; //SCK,MOSI
# A4 L# M6 I- E/ K" n% m1 _ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
; z# _& S8 T# z# t& P4 h GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
t9 j( a- m2 Z. v# z) g GPIO_Init(GPIOB, &GPIO_InitStructure);9 N" c* W+ C z0 @! V. ]6 ^
9 v* ~0 k1 B d. Z
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //MISO, R) C. f/ z N
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;) @# ~4 w) w9 c" a$ p2 X5 j
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
8 k5 f4 e0 r9 O# J( [# t& ^ GPIO_Init(GPIOB, &GPIO_InitStructure);
) ]: f1 C1 U2 v' w w 5 I A) h3 h- {+ S8 Q6 v8 {
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); / G6 f5 C4 x0 X7 Q# V
! u& n. C; o: }2 }( ]+ t9 g) f SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; S0 ], V# j d6 i3 k! }
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; 4 F6 ~6 i% E6 h/ `' u! E2 Y |
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; $ G/ A& p$ f, I/ w/ w$ X
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; 1 e F+ V% p7 N6 [- J
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; ' y7 Z; c# f& Y3 ]2 Q" v
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 9 n) Y) i7 k: V3 D, i7 u9 m- C
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
4 t* |- }* `% q" I( q- n* o SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
6 x' l' g% B7 E V" V. w SPI_InitStructure.SPI_CRCPolynomial = 7;
' P, n6 S5 Q" }8 J/ k2 v SPI_Init(SPI2, &SPI_InitStructure);
, u" ]: N6 w0 N# g$ S' O9 X; V SPI_Cmd(SPI2, ENABLE); : F. O( j" m; E5 m) u
* A9 A9 O- Z# a; U# D. V, c
//SPI_SSOutputCmd(SPI2, ENABLE);
3 h( l' a" u: @" ?# K7 Z3 d// if(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) != RESET){
" s. o5 r3 ^, Z5 _$ N7 ~// SPI_I2S_ReceiveData(SPI2);5 L7 b- b x7 u4 i% y. Q e
// SPI_I2S_CleaRFlag(SPI2, SPI_FLAG_CRCERR);- R( x2 [) q! N6 k4 ~0 ]7 j
// }- _8 ?. k+ e+ f: o2 E: [6 k- ?
6 Q+ d; Y* A! R* k4 }
SPI2_ReadWriteByte(0xff); 2 [* A( A1 k- a" M
}
1 }+ C: d# n* |- d5 j9 N7 E+ G
1 N/ x h- c* y. z9 e ^# Wuint8_t SPI2_ReadWriteByte(u8 TxData). Y* @1 D8 q) a: Y7 l1 Z/ c! w
{
3 \/ ?+ A8 k1 n
1 L3 L5 q$ d! h6 G" I4 [# l* B% S while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){} //卡死在这里
9 E( F3 L$ r- x. @3 N SPI_I2S_SendData(SPI2, TxData);
/ `/ r; A9 B! d& A while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){}
. I. p4 C+ Z! w: W% }: ^% e d return SPI_I2S_ReceiveData(SPI2);
! O7 c" t s: W% n. n. n4 M, y}8 {9 E. ]0 t+ K- n0 L c" U4 b
|
|