C++ 屬於面向對象的編程語言,OOP的思想不必多說,特別對於復雜的軟件工程來說,利用OOP絕對是事半功倍,相對於傳統的C來說;
當然用C來寫單片機程序無可厚非,已經延續了一個傳統,從大學時學的開始到工作崗位,好多人都是一直用C來做,但是既然Keil支持C++編譯,
可以用C++來編寫你的代碼,可以利用高級語言來結構化,清晰化你的程序,為嘛不用呢!哈哈,個人看法!下面進入正題:
C++ 兼容C,所以STM32的庫都是可以被C++使用的,既然這樣,那就簡單了!在建立好新的STM32工程時候,那就可以直接進行C++編程了;
利用C++的方式,建立好文件,我寫的一個Demo:
.h文件-- #ifndef __PLED__ #define __PLED__ #include "stm32f10x.h" class PLed { public: PLed(); ~PLed(); public: void LED_GPIO_Config(void); void TurnOn(uint16_t port,bool status); private: }; #endif .cpp文件-- #include "PLed.h" PLed::PLed(){LED_GPIO_Config();} PLed::~PLed(){} void PLed::LED_GPIO_Config() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_SetBits(GPIOE,GPIO_Pin_5); GPIO_SetBits(GPIOE,GPIO_Pin_6); } void PLed::TurnOn(uint16_t port,bool status) { if(status) GPIO_SetBits(GPIOE,port); else GPIO_ResetBits(GPIOE,port); }
main文件-- #include "stm32f10x.h" #include "misc.h" #include "stdio.h" #include "PSysTick.h" #include "PLed.h" int main(void) { PSysTick pst; pst.SysTick_Init(); PLed pled; while (1) { pled.TurnOn(GPIO_Pin_5,true); pled.TurnOn(GPIO_Pin_6,false); pst.Delay(500); pled.TurnOn(GPIO_Pin_5,false); pled.TurnOn(GPIO_Pin_6,true); pst.Delay(500); } }
Systick 文件 #ifndef __PDELAY_H #define __PDELAY_H #include "stm32f10x.h" class PSysTick { public: PSysTick(); ~PSysTick(); public: void Delay(u32 nTime); void SysTick_Init(); static u32 TimingDelayx; }; #endif #include "PsysTick.h" PSysTick::PSysTick() {} PSysTick::~PSysTick() {} void PSysTick::Delay(u32 nTime) { TimingDelayx = nTime; while(TimingDelayx != 0); } void PSysTick::SysTick_Init() { while(SysTick_Config( SystemCoreClock / 1000)); } u32 PSysTick::TimingDelayx=0;
中斷函數: extern "C" { void SysTick_Handler(void) { if(PSysTick::TimingDelayx!=0x00) { PSysTick::TimingDelayx--; } else PUsart::SendData('E'); } }
整個工程C++代碼如上,直接進行編譯即可;當然如果你的main還是用.c,也可以不用修改后綴,直接在main.c的屬性里修改為C++sourcefile 即可,用到了中斷文件,那中斷文件也同樣要改為C++類型的,
這樣編譯之后,和正常的C編寫一樣,下載文件到單片機即可;
差不多就這樣了!以后有問題,繼續研究!