打印
[STM32F1]

SPI模拟写入读取字节的C函数

[复制链接]
1153|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tgwfcc|  楼主 | 2014-10-14 16:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tgwfcc 于 2014-10-14 16:34 编辑

RT,程序为:
#define NRF_SCK3_L                                                GPIO_ResetBits(GPIOB,GPIO_Pin_3)
#define NRF_SCK3_H                                                GPIO_SetBits(GPIOB,GPIO_Pin_3)
#define NRF_MOSI3_H                                                GPIO_SetBits(GPIOB,GPIO_Pin_5)
#define NRF_MOSI3_L                                                GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define NRF_MISO3                         GPIOB->IDR&0x0010 //PB4  读取PB4端口的状态

u8 SPI3_WR(u8 byte)
{
        u8 k,receivedata;
        for(k=0;k<8;k++)
        {     
                NRF_SCK3_L;  //SCK拉低
                receivedata<<=1;
          if(byte&0x80)
                        NRF_MOSI3_H; //写入1,MOSI为1
          else
                        NRF_MOSI3_L;  //写入0,MOSI为0
                delay_us(1);
                NRF_SCK3_H;           //SCK拉高   
          byte<<=1;
                if(NRF_MISO3)          //读取MISO的值
                        receivedata |= 0x01;
                else
                        receivedata &= 0xfe;
                NRF_SCK3_L;
        }
        NRF_SCK3_L;
        NRF_MOSI3_L;
        return receivedata;
}
请大家帮我看看对不对,对时序图理解的不深,谢谢!




沙发
mmuuss586| | 2014-10-14 20:01 | 只看该作者

写是对的,根据实际时序(示波器看),再决定某些地方是否需要加延时;

使用特权

评论回复
板凳
huzi2099| | 2014-10-14 21:14 | 只看该作者
本帖最后由 huzi2099 于 2014-10-14 21:15 编辑

这个不好说,完整的spi根据时钟有效边沿和数据有效边沿有四种时序你用的是哪一个就不知道了.
spi硬件可以完全支持.

使用特权

评论回复
地板
tgwfcc|  楼主 | 2014-10-25 11:24 | 只看该作者
huzi2099 发表于 2014-10-14 21:14
这个不好说,完整的spi根据时钟有效边沿和数据有效边沿有四种时序你用的是哪一个就不知道了.
spi硬件可以完 ...

我用的CPOL=SPI_CPOL_Low;CPHA=SPI_CPHA_1Edge;SCK空闲时为低,第一个上升沿采样

使用特权

评论回复
5
tgwfcc|  楼主 | 2014-11-3 13:57 | 只看该作者
暂时没找到原因,不行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

260

帖子

4

粉丝