[STM8] STM8S207RB GPIO的设置问题

[复制链接]
1166|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

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