STM32 Keil C++編寫單片機程序


  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編寫一樣,下載文件到單片機即可;

 

差不多就這樣了!以后有問題,繼續研究!

 

 

 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM