分享

SPI接收发送函数程序 – 瑞生网

 袁先森lemon 2020-04-27
unsigned char SPI_RW(unsigned char byte)
{
    unsigned char bit_ctr;
    for(bit_ctr=0;bit_ctr<8;bit_ctr++) 
    {
        NRF_MOSI=(byte&0x80); // MSB TO MOSI
        byte=(byte<<1);    // shift next bit to MSB
        NRF_SCK=1;
        byte|=NRF_MISO;            // capture current MISO bit
        NRF_SCK=0;
    }
    return byte;
}

上面是用单片机引脚模拟的SPI通信发送和接收函数。关于SPI,你首先需要知道,SPI通信是双向通信的,当你发送一个字节,就会收到一个字节。所以,在上面的函数中,你会看到,我们可以带进去一个字节,最后返回一个字节。

有些仔细的童鞋会发现,上面发送和接收用的字节变量,都是byte,会不会相互影响呢,比如,发送的字节还没有完全发送出去,已经开始把接收到的位与byte进行操作了。我们不妨用自己的大脑,当成单片机,模仿单片机运行一遍程序。例如,现在要用SPI发送数据0x0F,0x0F写成二进制即0000 1111, NRF_MOSI=(byte&0x80); 这条语句,是把0x0F的最高位输出;byte=(byte<<1);这条语句,是把最高位输出以后,再把原来的字节左移1位,即变成了0001 1110;byte|=NRF_MISO;这条语句的作用是获取从机的MISO引脚状态,就是接收从机的数据,MISO不是0就是1,所以结果是0001 1110或上一个0或者1,我们发现,结果并不会影响字节的前7位,然后如此循环8遍。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多