首页 > 代码库 > STM32 Keil C++编写单片机程序

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编写一样,下载文件到单片机即可;

 

差不多就这样了!以后有问题,继续研究!

 

 

 

 



 

STM32 Keil C++编写单片机程序