标签:class port 对象 复杂 define 相对 clu 好文 修改
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编写一样,下载文件到单片机即可;
差不多就这样了!以后有问题,继续研究!
标签:class port 对象 复杂 define 相对 clu 好文 修改
原文地址:http://www.cnblogs.com/yeshuimaowei/p/6949642.html