|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
* R7 r$ Z& E6 ?0 v4 N7 z- O, X
STM32F1的SPI配置问题,卡在等待发送完成,高手帮忙看下哪里配置的有问题??$ W9 N+ v" ^ R* U) @
% ^$ P5 B; I0 `
void SPI2_Init(void)
- Y+ V" O' Y6 q) A# I{
2 e: D5 q7 L- Y# f- a/ a! T8 q GPIO_InitTypeDef GPIO_InitStructure;
4 ]# H/ g# z, k- V' U2 R- H SPI_InitTypeDef SPI_InitStructure;8 R3 }9 p4 s4 E3 G
6 x* t7 w5 Y+ e; Z2 @9 a* j
RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOB, ENABLE);# \' O' F; }" O; f/ U8 I7 R
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);; s e$ D7 K) D! Z/ U3 l
RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
4 R, F4 J- e. s' S, \
w; ?2 A4 H3 l- W& M6 }, Q, S GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //Flash Power
# z- J0 e; L: b1 [& ^0 c. N GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
$ O5 _$ K) M2 S' k, e3 T- C GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;% B* v, J1 f+ y# x b
GPIO_Init(GPIOB, &GPIO_InitStructure);
- f4 e3 R7 d" m( M
( [# x0 o1 M0 L GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //CS 接 NSS
$ I' v% y( i0 F8 X4 @+ R GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; " Q0 ~ |* M2 L, _: ~8 n
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
7 |. \( L/ L0 C6 v. x. o: U2 ~ GPIO_Init(GPIOB, &GPIO_InitStructure);
5 y2 W# {1 p4 i- E( d 0 T( l8 e7 `& l2 I/ d" E
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; //SCK,MOSI
% Q4 g( a8 |; i6 s GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
! Z& P* ^/ \/ v7 w% N" M1 B GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;" u- V# e. c- P; }7 J
GPIO_Init(GPIOB, &GPIO_InitStructure);
* T- B+ [8 Q( Q0 |( f
: z! S9 a, g3 z# | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //MISO
% J4 {; N; D* Z }& C% L3 _! o GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;
# M5 D6 p2 p0 A( H4 G GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
% Y& {2 G: f% a9 c GPIO_Init(GPIOB, &GPIO_InitStructure);
4 w+ I" Q, Z- Y% y, x" s& @
8 ~+ u; P* l) ?/ v5 y x# Y4 z GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
; u8 c. }0 }6 y+ h9 W+ `6 g & _ [2 }/ s3 M, N/ @: |
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- @; g5 D1 h- f& X SPI_InitStructure.SPI_Mode = SPI_Mode_Master; 5 T( ^; S* q6 F. o2 p
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; 2 ^5 ]- I9 H. @/ D
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
T+ R& f4 i* ^: i' E3 I SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; , J, \1 T- J p( c. s
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; ; u! l4 I- j7 c3 |( A; u
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
' _9 e {3 Q& C SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; ' [, f1 e3 j; O8 K& E) r
SPI_InitStructure.SPI_CRCPolynomial = 7;
& h! m& ]0 |8 c! Z, t2 ?* L SPI_Init(SPI2, &SPI_InitStructure); 7 M" c8 p9 y8 W1 t. N
SPI_Cmd(SPI2, ENABLE);
1 M3 O/ a; w1 I) g0 ~! @' J
# ^$ i% b8 J, j5 S) T //SPI_SSOutputCmd(SPI2, ENABLE);+ J4 p5 \( _! @) C; N( M
// if(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) != RESET){
& n8 B. m2 \7 d" M. O// SPI_I2S_ReceiveData(SPI2);
% B3 e2 T0 C( q7 F& J4 e# ^// SPI_I2S_CleaRFlag(SPI2, SPI_FLAG_CRCERR);
@' I) f/ ]" [) ]+ D8 ]// }
& e. B7 i- _5 C4 m+ h; s" F) D
% }# N) t% {$ ^9 x( ^' ^ g4 K SPI2_ReadWriteByte(0xff);
6 Q. L. U( V+ H$ p# ]}
: {2 ]7 q/ j: \9 ~( d8 o* I7 Y3 ?* y& k. P( ?8 n: @
uint8_t SPI2_ReadWriteByte(u8 TxData)* W: ?$ O) @* X' E3 [7 Y7 N* G. [
{
. l( |* B6 \; w8 P; ^: g" I: y; z6 i" e+ U
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){} //卡死在这里
) B3 O9 h% {1 B W& c+ p m SPI_I2S_SendData(SPI2, TxData); 6 T' K0 Z, }; a& a4 t3 Z5 ^9 T8 _8 Z
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){}) d, n" L+ q' f+ e! ^ |& I- f
return SPI_I2S_ReceiveData(SPI2); ( _' J8 m) A" j+ ]
}& n) H1 _! L- E9 ?$ ^0 F: d/ ~5 G
|
|