|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
最近在做利用STM32f103rct6的SPI3接收NRF24l01的问题,SPI的大体配置是遵照SPI1和SP2的,但是SPI1和SP2在写NRf24L01的地址时都是正常的,但是SPI3写地址就不行了,配置地址为5位失效。单个读写寄存器时有效的,通道设置都是可以的。但是唯独地址的修改不行。以下是配置代码。请搞过SPI3通信的帮忙看一下,找找问题。, `9 h) W% d; G8 K- u
</p>
) b% J& _! ^9 l5 w6 B< p>
' s& }/ y( [" G7 m s3 r static void Initial_SPI(SPI_TypeDef* SPIx) //??????IOB????<br />
- ~9 c5 Z! M6 i' w {<br />
6 x! t" q! k# p, ^5 W; b3 `. Z' X GPIO_InitTypeDef GPIO_InitStruct;<br />
4 K$ E7 a9 o7 U& l3 w SPI_InitTypeDef SPI_InitStruct;<br />+ E) v* N0 {$ v% \5 @( F
IF(SPIx==SPI1)<br />
9 j& n* k* s( _; E {<br />
# h( o; m! M) B% C! X- f( b RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);<br />, V4 @3 F: N L7 S
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
5 |6 }+ v3 c. J* \< /p>
; H% e; r. e( }) x< p>8 z- |& P7 E3 D0 R' l3 Y
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;<br />
7 B5 t, I" M f0 s- `/ i! j1 S GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;<br />; W; H# a7 |* G, v# [ Y& K, [
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;<br />
3 h6 A3 c; X6 r( f4 G" c6 F <br />. c( A% \( m' `/ h
GPIO_Init(GPIOA, &GPIO_InitStruct);<br />" n+ R8 ?$ t* `9 ?2 Z4 a& v
}<br />* H$ }. r6 r) `, Z. J- N8 e0 |* L; X1 }
else if(SPIx==SPI2)<br />
* M! }) z4 B5 W' p% j5 t$ ?2 U5 v- I {<br />; Q- z6 b$ x% ?: R- {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);<br />1 F+ }# a5 f w! G$ z& o0 {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);5 y0 z% V* w9 I
< /p>0 ]8 K* t1 _- s8 }5 z- }
< p>7 Q7 t: O7 P# f& A% z
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;<br />& K8 c/ A) j, H- X0 a2 Q! d! f, l
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;<br />4 @- g+ _5 R8 I2 ?/ N) E
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;<br />% ?- Z% t H ?# _
<br />; i7 T: ?7 u; X/ K, P
GPIO_Init(GPIOB, &GPIO_InitStruct);<br />- k+ g- v2 u2 H/ V( y9 V
}
* {4 u" ~( `$ |& D, ]5 D+ v< /p>
M. i+ {% Q9 g* t7 L. u< p>4 g( f. b$ q3 e6 _
else if(SPIx==SPI3)<br />* L+ P' X' \6 S4 a z4 n4 Q
{<br />
?( h3 j8 t& z! d4 j& G0 J, e RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);<br />
/ w2 F' N) i' R) v RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE);
l! J! Q) x3 u' ^# z' ?< /p>( U7 B2 d6 t4 m
< p>
& R, Z- t; w0 u GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);<br />
7 `$ x, l. L5 v. l% F //GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE);<br />: z6 v5 F) a1 M2 \# x" f
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE);1 n' @6 ~' j( h: q6 a4 t3 A
< /p>. H7 x- o/ n# a4 t {, J: k: d8 b( F
< p>
5 P: m1 P7 J0 J/ `) c6 I1 S GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;<br />
0 d5 I( q. D: \5 q GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;<br />
) ?2 v; f" c6 ^0 ~ GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;<br />
7 O8 h# m" W+ ^5 | <br />% p: ^0 I) e+ N# `! P
GPIO_Init(GPIOB, &GPIO_InitStruct);<br />6 c' ], }/ T6 H8 W' W) Y* L
}
% x2 ~7 A. C8 ^: M< /p>
# ^9 q# y7 I! G, i7 O5 ?< p>0 l* g% B2 o! s$ n
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;<br />5 h9 d1 L$ U/ K' V6 X5 b: \
SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;<br />" [6 f: ^+ x: S
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;<br />
( R3 G* [8 _. M5 n2 R V SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;<br />
8 O4 W0 u6 `% j% F! @/ ? SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;<br />7 B# j2 J$ p! _+ W
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;<br />9 f1 ], X: N' I8 J0 K+ G- H+ Y
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;<br />
2 g" Q* a4 d6 ?) g" G: Q$ ^' c/ t SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;<br /> t! m* i+ B/ P* V# j3 T- `8 Q4 {
SPI_InitStruct.SPI_CRCPolynomial = 7;<br />
* o5 T y2 r1 P! i8 ? k# B SPI_Init(SPIx, &SPI_InitStruct);1 @, H) n+ \0 ~) s3 C
< /p>3 y7 c5 V% S8 l- @) w
< p>: \8 G# a1 h0 \' Z* Q
SPI_Cmd(SPIx, ENABLE);<br />
1 a" Y1 V. u5 ]* L }9 w, F. \$ d( E! Y8 P8 @1 p
< /p>
0 l2 w! N4 n" y, N< p>( Y- g' z8 w; ~/ l+ T% [- u* {
<br />, [1 P/ d% C% i/ I5 Y' M
< /p>
; J, w" y* I7 E$ X0 ^< p>
1 Q, f2 n8 [! H: |/ d, I static void SPI_Send_byte(SPI_TypeDef* SPIx,u8 data)<br />* Q3 J% @' V' f+ U4 v4 r8 r
{<br />
/ M- w2 D& ^, z* i' a while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET);<br />
& A( H5 ^$ x0 C3 u& p Y, {8 t SPI_I2S_SendData(SPIx,data);
( a% i5 x/ z5 }6 u2 S& u2 n N< /p>& @" K/ C5 `3 X7 ^
< p>
; F! `& y B0 k7 | while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET);<br />) j* c, |8 o: L: }# d4 P# j
SPI_I2S_ReceiveData(SPIx);<br />1 ]' [* o. z( m$ `/ h* t; H9 j
}5 L z! M4 g5 Q, M
< /p>/ z$ b) X+ w" T- X9 w. N
< p>& }! y% B2 Q. |; E5 [$ j9 W
static u8 SPI_Receive_byte(SPI_TypeDef* SPIx,u8 data)<br />% Z3 \1 z7 G/ z
{<br />+ Y2 B: y2 c+ k# U, c9 ]
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET);<br />
. {3 x+ {! L9 [ SPI_I2S_SendData(SPIx,data);0 d( D; l' `% d" o8 z6 r. \- n' J
< /p> T. S3 H$ d. Y4 R
< p># h% [( }" O# Y% U
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET);<br />$ Y% Z4 Z; D6 S; ~/ J$ ^- U# w
return SPI_I2S_ReceiveData(SPIx);<br />
7 X; O2 A- g2 T3 o. [! V) s9 g8 J" q }
) k/ m' n) B# y4 ~7 m( s< /p>
5 I- a8 ~; N R7 @9 E) k9 w< p>/ G7 t l* F# f9 k8 [4 @8 }+ E
static void delay1us(u8 t)<br />
2 W' c5 w& | R' H% T {<br />
) ?# v2 M* k0 l0 }5 R7 V while(--t);<br />2 U8 T/ u- D( g t+ V
}2 T! N5 }5 v0 ?4 V1 m% s
< /p># b6 Z1 e$ P, `9 P! |% R
< p>' @, F- e: x- Z4 H
<br />
+ R& G" b) B) M< /p>; h. x# d6 X, |, K; f
< p>5 {+ R; A7 G/ t) W
/****************????bytes×?????????*******************/<br />" D7 H1 g" @" [
u8 SPI_Write_Buf_2(u8 reg,u8 *pBuf,u8 bytes)<br /># u; D' K) O/ v& P5 m8 h$ V8 @
{<br />6 l, w5 M9 H9 z" x! K
u8 status,byte_ctr;<br />
3 u" X n& [4 k8 l+ I! l CSN(0);<br />. V6 v; h4 a7 i( U3 k7 k. d2 k: \
status=SPI_Receive_byte(SPI3,reg); <br />6 q0 B, V2 X& m' A/ q' d
delay1us(1);<br />
( b3 b/ u1 R) \0 d, R3 l for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)<br />' Y" l l3 I% F- s! N8 G* ^* @- M
{<br />
. K: s1 s. }! o$ F3 R4 x6 t SPI_Send_byte(SPI3,*pBuf++);<br />2 g. Q' C% K" n$ w$ R
}<br />
0 x) X/ a# Z+ D% c) Y, T8 Q CSN(1);<br />
' v5 ~7 e3 D; r2 T: A, ^ N9 Q return(status);<br />
. Z( f; {9 i. J( J4 G0 _* ?; V; A }
; l0 G1 K" ~7 R< /p>
' ~% g h6 `! u9 K' W& ^< p> g; x0 ]/ S2 o& H& U# c G5 Q# p
<br />, s! V' F; T p" h4 \# \8 p
< /p>
+ e8 ]1 K5 v$ R< p>4 e( A1 `0 b8 A
void RX_Mode_2(void)<br />
+ u! a" K; m) v/ R3 }) n3 J& v3 r {<br />" {% ~7 T+ a/ z. w6 Y" D& m
CE(0);<br /> u1 k# k* R+ Y
SPI_Write_Buf_2(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS,TX_PLOAD_WIDTH); <br /> H, p* \& C# {8 C( X3 k% `
//SPI_Write_Buf_2_1(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS,1) ;<br />
; s9 }2 M9 |+ I SPI_RW_Reg_2(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH); <br />& m& x- R7 U5 W
// SPI_RW_Reg_2(WRITE_REG_NRF24L01 + RX_ADDR_P0, 0x20); <br />
2 p3 z* B0 X0 V/ V C SPI_RW_Reg_2(WRITE_REG_NRF24L01 + EN_AA, 0x00); // ?????????¨??0×???????<br />0 Y2 [/ S7 S% O2 w
SPI_RW_Reg_2(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3f); // ?????????¨??0<br />
9 c, f/ a5 x& ]" _1 B) s4 _' j SPI_RW_Reg_2(WRITE_REG_NRF24L01 + RF_CH, 40); // ?????????¨??0x404 i( S4 A7 ?( e3 H2 t! l
< /p>
+ I: Q |% m. Q/ e9 T< p>/ n: o$ B' b. o6 i
SPI_RW_Reg_2(WRITE_REG_NRF24L01 + RF_SETUP, 0x0f); <br />
& `2 |0 F) v/ N8 s9 n1 [ SPI_RW_Reg_2(WRITE_REG_NRF24L01 + CONFIG, 0x0f); // CRC??????16??CRC???é????????????????<br />
+ m5 X9 r1 B, |2 V; \, l CE(1);<br />
+ z) x6 D$ n5 C# y' A }
4 w R! m4 |4 E4 A2 v< /p> & }/ K3 ]5 J1 \
|
|