|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
& v' @3 t/ ` L9 `STM32F1的SPI配置问题,卡在等待发送完成,高手帮忙看下哪里配置的有问题??
$ N6 M9 g6 r9 r2 s& T( \" u! q, _7 Z: b7 p6 |$ `, c' y
void SPI2_Init(void)
6 O. w6 M* j; Z8 n5 S. q) i{ 5 F8 @; ~4 p! a2 b5 t; V7 i2 T
GPIO_InitTypeDef GPIO_InitStructure;* X9 J; V3 O: E8 D+ F
SPI_InitTypeDef SPI_InitStructure;
4 L" l, x2 }) A
$ t2 \/ C: F. j1 a1 }! B RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOB, ENABLE);' t0 ~1 s0 f9 a. T5 Z2 Q+ W( ?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);8 S! e2 Z) R2 Q4 K' F; F- J3 e3 C0 ]! j
RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
$ e/ }9 [1 i' z. ]' ` , h1 J- k( y/ I3 W' @& [* q
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //Flash Power8 P2 X$ `: W, E
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
9 i. R+ q8 D" s6 W. ~! F& [5 T GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;# s! v6 J6 T. @3 L9 w# R1 k1 L
GPIO_Init(GPIOB, &GPIO_InitStructure);
% `1 j5 Y: M2 ?% w& r0 R' Z7 J
, L# T' R! D- a6 a, v4 _$ N% ^3 G7 u GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //CS 接 NSS1 y. y0 e( L4 N; w$ B
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ' Y: G" E4 V% W$ g, w7 [! C
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
0 c9 O3 d$ I6 K4 h, S GPIO_Init(GPIOB, &GPIO_InitStructure);: e" A0 O2 m! F; {/ u
1 f+ H/ z3 F7 p& s! B" s
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; //SCK,MOSI
+ P* W8 @( I/ `0 j GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;; @- U& S5 g. e# a: Z
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;* C! B- E; Q2 }
GPIO_Init(GPIOB, &GPIO_InitStructure);
( G3 u5 _7 V' `# f8 Y u: A. D8 A: D# N$ |) b
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //MISO
7 y; J* k$ W9 O7 M0 j, w GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG;# H; x+ [$ m- Z0 {. z* q) n
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;7 l' h5 F7 M" R+ x. M
GPIO_Init(GPIOB, &GPIO_InitStructure);
- D* b1 d+ R. N / P3 t8 h: W" |8 g! ~
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); : `7 B0 {) p7 m
9 ?6 z1 s/ O1 S, y( I4 D
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; * {1 s4 q2 Y: W+ C- A z6 y
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; 9 ^9 r5 V! `" H3 [9 ]
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
p8 Y4 S9 c6 M2 G& e# D SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
0 h8 E' v6 P: G# v7 L SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; + h& ]) @" p: \- d& D) o$ d
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 3 [; A: a3 Z4 H; E6 u; i5 l
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; & X+ {. t" d; {/ f
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
) t% _" H/ Q" ^$ e J- t5 d SPI_InitStructure.SPI_CRCPolynomial = 7; . Q8 n4 A* b7 ~' d @$ _# t6 S
SPI_Init(SPI2, &SPI_InitStructure);
: ^- t( U0 h1 l; K5 W SPI_Cmd(SPI2, ENABLE);
0 Z1 ]- E' p" `5 ~9 I- C2 Q8 g
* i( k6 B& t, s/ K //SPI_SSOutputCmd(SPI2, ENABLE);) m5 P! N& q4 M0 ?1 Q2 Q# \
// if(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) != RESET){
; g; j' `7 `1 [+ ?1 l// SPI_I2S_ReceiveData(SPI2);. d7 n% C" F5 T9 K2 n( Z. r
// SPI_I2S_CleaRFlag(SPI2, SPI_FLAG_CRCERR);
( G5 U1 ^# b: K; A' K m// }% r. ~8 _; z# n2 J/ X8 [
, x0 y1 O9 N' q2 v8 x
SPI2_ReadWriteByte(0xff); 8 f6 k5 J B9 Z
} L6 G* a/ }$ ?; t0 C$ @
1 U$ d: [# G, m+ r! W* `/ {) t. U
uint8_t SPI2_ReadWriteByte(u8 TxData)
! C+ U+ V0 |. |( L! W{
5 Z' c4 p. R' N, ^8 _7 `9 J; G S# r' ~
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){} //卡死在这里
0 r: }, v" ], y$ A% W4 c. W# l SPI_I2S_SendData(SPI2, TxData); % W8 A8 q1 w y2 E4 I: g' C2 p; l
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){}+ e" I1 h j9 o, c& r, y6 ?* |
return SPI_I2S_ReceiveData(SPI2);
( H/ O2 T) w% J) k% J0 T9 K} x2 L( ~* N. Z4 \9 a- b# I( F" b& E5 D
|
|