原创 02 STM32 C++库使用举例及使用C++目的

2011-2-8 21:41 3440 6 7 分类: MCU/ 嵌入式

attachment download一、      举例功能


举例将STM32的时钟配置常用的72MHz,并循环翻转的操作GPIOA的Pin0。


二、      应用代码


#include "rcc.h"


#include "flash.h"


#include "gpio.h"


 


void Delay(UINT32 i)


{


  while(i--);


}


int main(void)


{


  GPIO_Init Init;


  STM32_RCC &RCC = STM32F10X::RCC();


  RCC.DeInit();


  RCC.HSEConfig(STM32_RCC::c_HSE_ON);


  bool HSEStartUpStatus = RCC.WaitForHSEStartUp();


  if(HSEStartUpStatus == true){


    STM32_FLASH &FLASH = STM32F10X::FLASH();


    FLASH.PrefetchBufferCmd(STM32_FLASH::c_PrefetchBuffer_Enable);


    FLASH.SetLatency(STM32_FLASH::c_Latency_2);


    RCC.HCLKConfig(STM32_RCC::c_SYSCLK_Div1);


    RCC.PCLK2Config(STM32_RCC::c_HCLK_Div1);


    RCC.PCLK1Config(STM32_RCC::c_HCLK_Div2);


    RCC.PLLConfig(STM32_RCC::c_PLLSource_HSE_Div1,STM32_RCC::c_PLLMul_9);


    RCC.PLLCmd(true);


    while(RCC.GetFlagStatus(STM32_RCC::c_FLAG_PLLRDY) == false){


 


    }


    RCC.SYSCLKConfig(STM32_RCC::c_SYSCLKSource_PLLCLK);


    while(RCC.GetSYSCLKSource() != 0x08){


 


    }


  }


  RCC.APB2PeriphClockCmd(STM32_RCC::c_APB2Periph_GPIOA,true);


  RCC.APB2PeriphClockCmd(STM32_RCC::c_APB2Periph_AFIO,true);


 


  STM32_GPIO  &GPIOA  = STM32F10X::GPIO(STM32F10X::GPIOA);


  Init.speed = GPIO_Speed_50MHz;


  Init.mode = GPIO_Mode_Out_PP;


  Init.pin = STM32_GPIO::c_Pin_0;


  GPIOA.Init(&Init);


 


  while(1){


  Delay(1000000);


  GPIOA.WriteBit(STM32_GPIO::c_Pin_0,true);


  Delay(1000000);


  GPIOA.WriteBit(STM32_GPIO::c_Pin_0,false);


  }


}


三、      使用C++目的


上面的代码应该是在STM32上比在串口上搞出“Hello World”简单的多。可以看到如果使用原版的STM32的库,我们可以少写很多字符就可以实现相同的功能。这些都是C++使用类封装的原因,然而多写这么多字符是很有用处的。它帮我们的程序少出很多低级错误。


当然使用C++的目的不在于把寄存器这类硬件用的多么的出神入化,更多的好处是在应用程序上,能以一个物体的形式看待所操作的对象,特别是以相同的方法操作不同的对象时(多态)。


C++标准中有很多标准库,比如STL这是一个现成的软件,而C语言并没有相同的标准库可以使用,而且C++的0x标准的boost库又是一个超级强大的库,我们没有理由拒绝C++吧。


当然使用C++是需要付出代价的,比如为了操作GPIO需要先定义一个GPIO才能使用GPIO的功能。同样的功能C++所实现的代码肯定比C语言大。我想STM32都可以运行到72MHz了,而且内部Flash和RAM都是相当大的,应该足够可以实现C++所需要的运行环境了。而且现在的C++编译器做的也并不比C语言差。


IAR都可以在8051上编译运行C++,我想STM32应该没有问题吧。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1659247 2013-2-16 11:25

很不错啊 呵呵
相关推荐阅读
用户572615 2011-03-10 21:25
.netMF 4.1 移植阶段完成 VS2010 可以调试STM32了
经过近1个月的努力,.netMF PortingKit 终于可以在安福来(www.armfly.com)的STM32F103ZE-EK上运行了。感谢CSDN里yefanqiu和norains对我的帮助...
用户572615 2011-02-18 21:40
让MDK4.1.4支持.NetMF PortingKit编译
.NetMF4.1发布有一段时间了。本想以为4.1版本可以支持MDK4.0版本以上的结果还是只支持MDK3.1和MDK3.80A。 一直都是安装两个MDK版本,一个MDK4.14用于调试,一个MDK3...
用户572615 2011-02-18 20:37
03 RCC
attachment download一、      数据结构struct STM32_RCC{  volatile UINT32 CR;  volatile UINT32 CFGR;  volati...
用户572615 2011-02-08 21:41
01 STM32 C++库 头文件
attachment download一、      头文件组织结构头文件由芯片的头文件和每个种类外设的头文件。1.1    芯片头文件芯片头文件的文件名为“STM32F10X.h”。其中包含基本类型...
用户572615 2011-01-30 11:09
STM32 的C++ 版本lib
公司放假,自己闲下来没有什么事。于是乎神经质的想把STM32的库文件搞成真正的.cpp文件,所有的外设都搞成类。说干就干,不过一开始就把我搞没有气了。在MDK里添加启动文件和中断函数的时候就搞了我好几...
我要评论
1
6
关闭 站长推荐上一条 /1 下一条