天天看点

疯狂单片机--用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() ) 

//要执行的动作

未完待续....

继续阅读