打印
[STM8]

STM8S207RB GPIO的设置问题

[复制链接]
942|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
认真的人|  楼主 | 2015-2-12 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      小弟stm8新手一个,刚上手几天,遇到一个问题:

#define    SPI_MOSI       PB_ODR_ODR3         //设置推挽输出

void SPI_WriteByte(uchar byte)            
{
    uchar i;
    for(i=0;i<8;i++)
    {
      SPI_MOSI=(byte&0x80);               //write byte,send MSB bit  
       SPI_CLK=1;           
       Delay_us(20);
       SPI_CLK=0;
       byte=(byte<<1);
       Delay_us(20);
    }
}

如果这样设置的话,SPI_MOSI会一直低电平

void SPI_WriteByte(uchar byte)            
{
    uchar i;
    for(i=0;i<8;i++)
    {
       if(byte&0x80)
       {
         SPI_MOSI=1;
       }
       else
       {
         SPI_MOSI=0;
       }
       SPI_CLK=1;           
       Delay_us(20);
       SPI_CLK=0;
       byte=(byte<<1);
       Delay_us(20);
    }
}

这样设置就正常了,但是我用其他MCU设置,第一个例子没问题呢,现在还不知道具体问题所在,估计是我没定义好,现在只能用下面的程序先用着,那个大哥说说是哪里问题。
沙发
popeye021| | 2015-2-12 17:30 | 只看该作者
SPI_MOSI只是一个引脚,只有1位。byte&0x80的结果可能是0x00,也可能是0x80,是一个8位数据。
SPI_MOSI=(byte&0x80); 执行后,SPI_MOSI的值和具体编译器有关了。
能正确运行只能说是狗屎运,所以要采用第二种。

使用特权

评论回复
板凳
认真的人|  楼主 | 2015-2-13 08:51 | 只看该作者
popeye021 发表于 2015-2-12 17:30
SPI_MOSI只是一个引脚,只有1位。byte&0x80的结果可能是0x00,也可能是0x80,是一个8位数据。
SPI_MOSI=(by ...

谢谢,可能跟编译器有关,之前的MCU我是用keil,现在是IAR。

使用特权

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

本版积分规则

3

主题

4

帖子

0

粉丝