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

[复制链接]
1503|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空闲时为低,第一个上升沿采样
 楼主| tgwfcc 发表于 2014-11-3 13:57 | 显示全部楼层
暂时没找到原因,不行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

260

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部