找回密码
 注册
关于网站域名变更的通知
查看: 472|回复: 3
打印 上一主题 下一主题

关于nRF24L01的一个新手问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-2-28 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
刚开始学习nRF,有个很简单的问题想要请教大神们: ' q" B4 N4 E9 j. P$ `

% x; m6 y! A3 j) j4 U6 [7 z; ^下面这个函数中有几句代码我不太理解,为什么要把MOSI的最高位置1,temp又是干嘛用的?
: q1 \4 A* z: Z$ t0 r/ b/**************************************************************************************************** ; \+ e! s( e" s
函数:uint SPI_RW(uint uchar)
* ?* o; Z" K; y: P8 D% u功能:NRF24L01的SPI写
4 Z; h$ g1 i; V$ W***************************************************************************************************/ ) _6 K* ]7 J; f7 A
char SPI_RW(char data) , i% k/ q0 M* i6 t
{ 7 t6 i% _: `* Q8 t2 u4 {$ X. t
char i,temp=0;
) u& {: c7 q: W7 {6 E           for(i=0;i<8;i++) // output 8-bit # h. S( P1 m1 d: A) C
           { % p+ ?! p$ k# P0 l* x2 Q, I+ f
if(data & 0x80)
; p- r  l8 R0 M: ~- J{
' N9 Q; H9 x; I' x' q; nHign_24L01_MOSI ;         // output 'uchar', MSB to MOSI 5 K! w6 k, B  D7 _5 D- t, d
}
+ O; t" ^2 v6 e/ U: velse
5 j5 n! s8 {$ D. ?{ 7 D. a, n; Y) x/ G( D/ x/ W
         Low_24L01_MOSI;  # F( @$ H  e& L
}        6 X, v7 O7 Q" \
data = (data << 1);           // shift next bit into MSB..
' w& a! D0 O5 V2 x% r! ^temp<<=1;
) Q2 ^% L4 Q6 \- EHign_24L01_SCK ;                      // Set SCK high.. . i: f; K# i7 X7 E" ], R1 d$ k
if(Read_24L01_MISO )temp++;                  // capture current MISO bit * q* [4 u, W" ~2 n* S
Low_24L01_SCK;                       // ..then set SCK low again 6 ^8 i/ B% P  X8 z9 Q  Q
           }
) Z  A, `8 F3 y1 Q+ j    return(temp);                      // return read uchar
4 h* w& A) W; X* N}
* M' j0 z3 k$ I  t( k

该用户从未签到

2#
发表于 2023-2-28 15:29 | 只看该作者
char SPI_RW(char data)
8 o$ V3 a+ n- f" b  e{5 O- K. \) `* f% V5 w
    char i,temp=0;: j7 i1 i# J4 @! D9 \: m
    for(i=0;i<8;i++) // output 8-bit/ N8 I4 K6 A. h4 R+ S% T' Y
    {
# I/ G( ~4 Z6 P1 E$ P& p        if(data & 0x80) //最高位为1的话 就个从机发1 否则发0 通过这几句就可以向从机发送数据的最高位: k) Y! L: a: y5 e! Y
     Hign_24L01_MOSI ;# A: m" ^! G( e+ W7 C4 U
        else0 d9 y6 s7 d& s$ R, o! W0 `: j, n
        Low_24L01_MOSI;
  E# Z8 V5 K$ g' M! A0 U$ f: J                  ' b0 O4 \1 m) e& X3 c
        data = (data << 1); // 把数据的低一位移至最高位以备发送
, _( H- O' [( s6 |6 ~     temp<<=1;* X  E) n4 V' I7 Z# }8 p9 U
        Hign_24L01_SCK ; //拉高拉低写入数据                 " U0 [& K) B- A1 j# m2 d! v9 n
     if(Read_24L01_MISO )temp++;//从 从机读取一位值然后跟 temp<<=1;
3 U1 i  g6 R9 `! C                                                     //合起来实现读取八位从机向主机发送的数据! v2 [  g" t: Z1 X
     Low_24L01_SCK;                       
0 z6 s' I) L7 N" n2 W, q+ L    }. C) x1 q" W- {
    return(temp);//最后将八位集合为一个字节返回出来5 p0 U1 L9 Z# I7 a* G& [
}

该用户从未签到

3#
发表于 2023-2-28 16:47 | 只看该作者
a=(a<<1)与a<<=1表达的意思一样吗?

该用户从未签到

4#
发表于 2023-3-3 11:22 | 只看该作者
你可以直接找 SI24R1代理商那边 帮你处理  软件都差不多 13632658391
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-16 13:06 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表