天天看點

瘋狂單片機--用C++寫STM32程式

現單片機已經白菜價了,可用的資源也不斷豐富起來.

有一天我突發奇想,用C++寫單片機不是更友善.(相信很多人有類似的想法,不過在網上找到的參考資料也太少了)

話說很多編譯器本身是支援C++,大部分人認為C++效率C低,我想說的是當年Android剛出來的時候,也受到了很多人的抵觸...

手上正好有塊STM32開發闆,就拿它開刀了:

一.把庫中的.C檔案改成.CPP

瘋狂單片機--用C++寫STM32程式

二.定義一個GPIO的類

單片機的helloworld,那就是流水燈.

瘋狂單片機--用C++寫STM32程式

要是能夠簡化定義成這樣子就好了解了

STM32PIN DS1_N(PF,6);

STM32PIN DS2_N(PF,7);

STM32PIN DS3_N(PF,8);

STM32PIN DS4_N(PF,9);

于是我定義了下面這麼一個類

從上面的類,可以看到,讓GPIO拉高使用high(),拉使用low(),

為了能産生高效的代碼,其中大部分函數使用内聯,

将 GPIO_SetBits() GPIO_ResetBits()函數調用改寫成寄存器方式

 //GPIO_SetBits(m_gpio.port, m_gpio.pin);

  inline void high(void)

{

m_gpio.port->BSRR = m_gpio.pin;

}

//GPIO_ResetBits(m_gpio.port, m_gpio.pin);

 inline void low(void)

        m_gpio.port->BRR = m_gpio.pin;

 }

于是流水燈的程式就可以寫這樣子:

瘋狂單片機--用C++寫STM32程式

接着讓USER2鍵按下,流水燈反過來計數,隻要這樣定義

STM32PIN USER2(PD,3,GM_IN_FLOATING);

使用的時候這樣寫

if( USER2.islow() ) 

//要執行的動作

未完待續....

繼續閱讀