原创 01 STM32 C++库 头文件

2011-2-8 21:41 2801 1 2 分类: MCU/ 嵌入式

attachment download一、      头文件组织结构


头文件由芯片的头文件和每个种类外设的头文件。


1.1    芯片头文件


芯片头文件的文件名为“STM32F10X.h”。其中包含基本类型变量的定义和STM32F10X类的实现。


基本类型变量包含一些常用的整型变量:


typedef unsigned long  UINT32;


typedef signed   long  INT32;


typedef unsigned short  UINT16;


typedef signed   short  INT16;


typedef unsigned char  UINT8;


typedef signed   char  INT8;


这些定义将作为基本变量取代2.0.3版中stm32f10x_type.h中的所有类型,另外stm32f10x_type.h中的FlagStatus,ITStatus,bool等enum变脸都以C++的内置类型bool代替,其中SET用true,RESET用false代替。依次以自己的习惯类推。


STM32F10X类使用了如下结构,目的是和C语言相似,以方便那些还看不惯的C++代码的人,看到struct而感到亲近。另外除他们的默认属性以外,struct和class实现一个类是完全一样的。struct默认声明为 public,而class默认为private。由于这是芯片级的类,我觉得设计为public应该要好一些。


struct STM32F10X


{


。。。。。。


};


类STM32F10X中的所有变量和方法都是静态的,因为这些方法只能生成一个1实例,就没有必要去生成实例。当然芯片本身就是“静态”的,不可能new一个STM32F10X类就在软件里虚拟一个STM32芯片了。


1.2 外设头文件


外设头文件包含芯片外设的寄存器定义和具体操作方法。这些外设的定义原则上是基于2.0.3版本不变。当然也有变动的,比如nvic文件夹,由原来的nvic和SCB两个struct变为nvic类。这样更改的目的是有助于一方面C++类的实现,另一方面在操作类方法时可以最大可能的和原来的C语言版本兼容(直接操作寄存器除外)。


二、      外设使用


要使用任意外设需要包含STM32F10X类和相应的外设类才能编译通过。


2.1 单外设使用


所谓单外设就是STM32F10X芯片中拥有这种外设的数量只有一个,比如RCC。这种外设的定义方法如下:


STM32_RCC &RCC = STM32F10X::RCC();


说明一下在原来定义RCC类是本来使用的是STM32F10X_RCC的,感觉为了定义类要写这么长很累,所以就写成STM32_RCC了。创建一个实例时都使用引用来初始化变量,它只RCC寄存器所在物理内存的别名。这很符合实际的物理意义。由于RCC()方法是一个静态方法,编译器会阻止使用new来实现一个RCC。


2.2 多外设使用


所谓多外设就是STM32F10X芯片中拥有这种外设的数量不止一个,不如GPIO。这种外设的定义方法如下:


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


其中STM32F10X::GPIO(GPIOType type)方法中的GPIOType为enum类型,这样编译器会阻止这样的定义:


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


以整形代替GPIOType的错误。GPIOType是在STM32F10X中声明的enum类型,目的是为了说明这是STM32的GPIO,不是别的芯片的GPIO。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1535029 2013-7-23 16:29

相关推荐阅读
用户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
02 STM32 C++库使用举例及使用C++目的
attachment download一、      举例功能举例将STM32的时钟配置常用的72MHz,并循环翻转的操作GPIOA的Pin0。二、      应用代码#include "rcc.h"...
用户572615 2011-01-30 11:09
STM32 的C++ 版本lib
公司放假,自己闲下来没有什么事。于是乎神经质的想把STM32的库文件搞成真正的.cpp文件,所有的外设都搞成类。说干就干,不过一开始就把我搞没有气了。在MDK里添加启动文件和中断函数的时候就搞了我好几...
我要评论
1
1
关闭 站长推荐上一条 /4 下一条