文档章节

stm32 C++开发初探

kangxin1234
 kangxin1234
发布于 2015/08/21 07:48
字数 720
阅读 1519
收藏 4

    听说stm32支持C++开发,就想尝试一下。好久没看过stm32了再重看一下。把keil 4卸了装了个keil MDK 5。装了MDK的时候记得把stm32用的pack装一下。

    工程建立:新建工程选择芯片,进入库文件选取界面。如下:

    

这里以使用简单GPIO为例说明一下库文件的选择。

勾选CMSIS中的core。Device中的Startup启动文件。然后开始勾选外设库,勾选时钟库RCC,GPIO库,然后一定勾选Framework,它是必要的什么标准外设库框架,其实它对应着misc.c也就是与中断优先级有关的库。不要单独去找misc,找不到的。如果不勾选它,其他对勾位置会呈黄色说明,勾选的库有问题。勾选没有问题的话对勾都会呈绿色。如下图:

创建完之后没有main函数,右键SourceGroup1添加main.cpp在里面写上main函数编译一下。有可能一堆断言错:arrest_param什么的。这时候就点魔术棒C/C++中Define一栏中添加一个宏USE_STDPERIPH_DRIVER。如下图:

然后在Debug中勾选你的调试方式我用的是J-link。我使用的开发板会有下不进去程序的情况。Error:Flash Download failed = "Cortex-M3".解决办法如下选择小魔术棒Utilities中的seting把ize从0x00080000改为0x00040000就行了。

然后就可以写C++程序了,我就写了一个Led闪烁的程序,比较简单。添加一个led.h文件。写一个类。

#ifndef _LED_H_
#define _LED_H_

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

class Led{
	public:
		Led(){
			ledInit();
		};
		void led1On();
		void led1Off();
		void led2On();
		void led2Off();
		void ledDelay();
	private:
		void ledInit(void);
		GPIO_InitTypeDef GPIO_InitStruct;	
};

void Led::ledInit(void)
{
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOG, ENABLE); 
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;	
	GPIO_Init(GPIOD, &GPIO_InitStruct);
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;
	GPIO_Init(GPIOG, &GPIO_InitStruct);	
}

void Led::led1Off()
{
	GPIO_ResetBits(GPIOD, GPIO_Pin_13);	
}
void Led::led2Off()
{
	GPIO_ResetBits(GPIOG, GPIO_Pin_14);
}

void Led::led1On()
{
	GPIO_SetBits(GPIOD, GPIO_Pin_13);	
}

void Led::led2On()
{
	GPIO_SetBits(GPIOG, GPIO_Pin_14);
}

void Led::ledDelay()
{
	for(int32_t i=0xfffef; i>0; i--);
}

#endif

主函数文件main.cpp:

#include "stm32f10x.h"
#include "led.h"

int main()
{
	Led led;
	while(1)
	{
		led.led1On();
		led.led2On();
		led.ledDelay();
		led.led1Off();
		led.led2Off();
		led.ledDelay();
	}
}

编译下载就行了,功能简单就不在加注释了。

    stm32的GPIO有八种模式。每一个IO口都可以配置为中断模式。八种模式四种输入,四种输出分别如下:

typedef enum
{ GPIO_Mode_AIN = 0x0,//模拟输入
  GPIO_Mode_IN_FLOATING = 0x04,//浮空输入
  GPIO_Mode_IPD = 0x28,//弱下拉输入
  GPIO_Mode_IPU = 0x48,//弱上拉
  GPIO_Mode_Out_OD = 0x14,//开漏输出
  GPIO_Mode_Out_PP = 0x10,//推挽输出
  GPIO_Mode_AF_OD = 0x1C,//复用开漏输出
  GPIO_Mode_AF_PP = 0x18//复用推挽
}GPIOMode_TypeDef;

    用C++写stm32程序的感觉,用C和C++写都行,反正大多数人感觉就是C++更加的高大上,用C写还是用C++全看个人爱好了。没有必要非要用哪个。自己用着舒服就行了。

    keil工程链接

© 著作权归作者所有

kangxin1234

kangxin1234

粉丝 38
博文 51
码字总数 35417
作品 0
程序员
私信 提问
加载中

评论(2)

开o源p中e国n
开o源p中e国n
好是好,能不能写个带中断的例子? :)
X-wolverine
X-wolverine
高级,感觉main函数比c写得高级多了,赞
C语言程序设计之STM32,在这里轻松学习嵌入式编程

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/03/25
0
0
【上海,漕河泾】2+寻找嵌入式linux开发项目进行兼职开发,不需要付报酬!

本人目前在上海漕河泾开发区一家公司上班,做嵌入式软件开发工作并做驱动开发,2+工作经验。 使用语言:C/C++。 熟悉平台:STM32芯片,MTK平台。 本人想往嵌入式LINUX方向转,已经购买FL240...

行者无疆在杭州
2013/04/02
756
4
stm32f103单片机OV7725RGB图像处理程序(识别橘黄色乒乓球)

经过几天的努力,实现了在stm32单片机的RGB565图像简单处理,识别橘黄色乒乓球,同时单片机通过串口向上位机输出,乒乓球的重心坐标,和与图像中心线的夹角,在者可以输出的RGB565数据,通过...

qq_34675909
2018/01/27
0
0
GuiLite 2.2 发布:更清晰的文档,更有效的帮助

为了节省GUI的开发时间,降低学习成本;我们做了如下尝试: 降低代码数量(目前为5千行;C++语言是降低代码量的关键,C很难做到这一点) 降低代码复杂度(仅仅使用C++的基本特性:类及虚函数...

idea4good
05/08
1K
0
RTKLIB应用开发

RTKLIB移植,RTKLIB是基于X86平台的C++代码,需要把RTKLIB移植到STM32单片机或FPGA平台。 有意向承接项目者,请添加QQ:36806433咨询项目费用、周期、具体细节等等。...

swiki
2016/04/25
67
0

没有更多内容

加载失败,请刷新页面

加载更多

SIPC的保全存证变现应用才是先见之明

Facebook发起的Libra在接连退群后终于在联盟链上线前官宣成立联盟,同时Telegram公链TON在主网上线前被美国SEC要求退回私募非法所得。两个都拥有活跃用户数上亿的社交平台,一个以1000万美元...

SimpleChain
23分钟前
2
0
Node_初步了解(3)回调,作用域,上下文

本文转载于:专业的前端网站➧Node_初步了解(3)回调,作用域,上下文 1. 1 //回调:回调是异步编程最基本的方法,node.js需要按顺序执行异步逻辑的时候,一般采用后续传递的方式,将后续逻辑...

前端老手
23分钟前
2
0
好程序员Java教程分享Java的五大特点

好程序员Java教程为大家分享Java的五大特点希望对初学者有所帮助。 一、Java的(五大)特点: 1.简单性 相对于c语言来说 c语言的核心 指针(保存地址)*p Java中没有指针的概念(使用的是引用概念...

好程序员官网
25分钟前
2
0
移动端rem适配各种屏幕字体

在页面中引入这个js文件,可以实现各个屏幕的字体自适应: (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : ......

流年那么伤
27分钟前
3
0
2019我最喜爱的绿色应用活动投票开始,谁能突出重围?

在去年第一届软件绿色联盟开发者大会上,共有36个绿色应用荣获“2018年度我最喜爱的绿色应用”奖项。活动得到了消费者、开发者与应用厂商的一致好评,刚过完十一假期就有小伙伴们后台留言,问...

软件绿色联盟
38分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部