打印

模拟SPI CLK有波形,但是MOSI没有波形

[复制链接]
3150|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
victor3l|  楼主 | 2013-4-20 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用IO模拟SPI,发现始终MOSI没有波形,不知为何?当我在主函数中调用WriteSpi(0xaa)时。

void SDGPIOInit(void)
{
        RCC->APB2ENR |= 1<<2;//打开Porta端口的时钟
        GPIOA->CRL &= 0x000fffff;//PA5,6,7
        GPIOA->CRL |= 0x33800000;//PA6,7配置成推挽输出,PA5配置成上拉输入
        GPIOA->ODR |=0xc0;//把最高两位置1,其余都为0
        RCC->APB2ENR |= 1 << 3;//打开PB
        GPIOB->CRL &= 0xffffff0f;//设置PB0
        GPIOB->CRL |= 0x000000030; //PB0推挽输出
        GPIOB->ODR |= 0x01 ;
}

u8 ReadSpi(void)
{
        u8 temp = 0;
        u8 i = 0;

        CLK = 1;
        for(i = 0; i < 8; i++)
        {
                temp <<= 1;
                CLK = 0;
                delay_us(5);
                temp |= MISO;
                CLK = 1;
                delay_us(5);
        }
        return temp;
}

void WriteSpi(u8 data)
{
        u8 i = 0;

        CLK = 1;
        for(i = 0; i < 8; i++)
        {
                MOSI = (data & 0x80);
                CLK = 0;
                delay_us(5);
                CLK = 1;
                delay_us(5);
                data <<= 1;
        }
}
沙发
hawksabre| | 2013-4-20 20:22 | 只看该作者
不是很了解   楼主   顶起来   希望有高手能够解决   顶起来

使用特权

评论回复
板凳
hawksabre| | 2013-4-20 20:22 | 只看该作者
不是很了解   楼主   顶起来   希望有高手能够解决   顶起来

使用特权

评论回复
地板
王紫豪| | 2013-4-20 23:19 | 只看该作者
你的宏定义呢???

MOSI = (data & 0x80);??????????

两种可能,MOSI = 0; 毋庸置疑可以的

MOSI = 0x80???

推荐写成这样

if(data & 0x80){
      MOSI = 1;
}else {
      MOSI = 0;
}


使用特权

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

本版积分规则

77

主题

308

帖子

5

粉丝