1. 程式人生 > >STM32IO口8位操作移位的方式

STM32IO口8位操作移位的方式

當我們採用並口傳輸資料的時候都會用如下的方法進行資料傳輸

#define DATAOUT(x) GPIOB->ODR=x;

STM32IO口都是16位的,所以當呼叫DATAOUT的時候就直接對GPIOB的16個IO口總體進行操作。但是我們如果只是選擇高8位或者低8位的時候就需要進行移位操作,到底該怎麼移位呢現在我們來看如下程式碼。

如果我們選擇的是0-7位IO口那麼傳輸資料的時候程式碼如下

void LCD_DrawPoint_16Bit(u16 color)
{
#if LCD_USE8BIT_MODEL==1
LCD_CS_CLR;
LCD_RD_SET;
LCD_RS_SET;//дµØÖ·  

 
DATAOUT(color>>8); //先傳輸高8位所以把高8位先往低8位移動
LCD_WR_CLR;
LCD_WR_SET;
DATAOUT(color); //直接傳輸低8位
LCD_WR_CLR;
LCD_WR_SET;  
LCD_CS_SET;
#else
LCD_WR_DATA(color); 
#endif
}

由上面可以看到如果是選擇的低8位資料都是往低8位移動。


void LCD_DrawPoint_16Bit(u16 color)
{
#if LCD_USE8BIT_MODEL==1
LCD_CS_CLR;
LCD_RD_SET;
LCD_RS_SET;//дµØÖ·  

 
DATAOUT(color); //由於是先傳高位所以這裡不用移位(io口選擇的時候高8位)
LCD_WR_CLR;
LCD_WR_SET;
DATAOUT(color<<8); //低8位的時候需要把低8位資料往高8位移動
LCD_WR_CLR;
LCD_WR_SET;  
LCD_CS_SET;
#else
LCD_WR_DATA(color); 
#endif
}

這是選擇高8位IO口程式碼都是把低8位資料往高8位方向移動。