用keil编写C语言流水灯程序,简述关于Keil、STM32 用C++编写流水灯程序
通常来说,在单片机上编程,要么汇编,要么C语言,而用C++++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案是肯定可以的,下面讲讲基于Keil、STM32,用C++编写流水灯程序的一些内容。
1为什么很少用C++开发单片机
不知道大家对面向过程和面向对象的理解有多少?
C语言面向过程的语言,C++是面向对象的编程语言。结合本文来说,面向过程相比面向对象的编程,代码量更小,运行效率更高。
所以,C语言相比C++具有更小代码量、更快的运行速度。
当然,这里是C相对C++而言。其实,汇编相对C而言,具有更小代码量和更快的运行速度。可以参看文章:用 汇编 和 C语言 写流水灯程序有什么不一样?
因为单片机的RAM和Flash资源相比较小,运行速度也相对较低,所以,你会发现:很少有人在单片机上面用C++开发项目。
其实,随着单片机的存储资源以及运行速度的增加,目前有些工程师开始用C++开发单片机项目了。
2准备工作
在Keil MDK开发环境下,用C语言开发STM32比较常见了,什么开发环境安装、创建工程等这些步骤,本文不讲述
然后就是需要懂一些C++的基础语法,本文讲述的内容比较基础,用到C++很基础的知识。比如:类、对象这些基础内容。
没学过C++也没关系,只要懂C语言,在网上现学C++基础知识,难度都不大。
3使用说明
在KeilMDK环境下,使用的是ARM编译器(Arm Compiler),很多网上教程使用V6编译,其实V5和V6版本都是支持C++编程语言的。
在工程中添加C++源代码(比如:main.cpp)
使用V5和V6,工程配置的选项有些差异:
ST的开发库都已经做了支持,你会看到这么一段代码:
#ifdef __cplusplus extern "C" {#endif
//这里C源代码
#ifdef __cplusplus}#endif
什么意思呢?
这是一段预处理,从预处理代码可以看得出来,大概意思就是:支持C和C++混合编程。
4定义LED类
在本文默认大家掌握了用C语言开发STM32流水灯的知识,直接描述C++代码内容。
本文讲述一个很基础的例子"LED灯",比如创建一个main.cpp源代码文件。
首先,定义一个LED类:
class LED_Class{}
然后定义私有成员(当然,public也可以):
class LED_Class{private: GPIO_TypeDef *GPIOx; uint16_t GPIO_Pin; uint32_t RCC_APB2Periph;}
再次就是用到的函数:初始化GPIO、打开、关闭LED等。
class LED_Class{private: GPIO_TypeDef *GPIOx; uint16_t GPIO_Pin; uint32_t RCC_APB2Periph;
public: LED_Class(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin, uint32_t RCC_APB2Periph){ LED_Class::GPIOx = GPIOx; LED_Class::GPIO_Pin = GPIO_Pin; LED_Class::RCC_APB2Periph = RCC_APB2Periph; }
void Init(void){ GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOx, &GPIO_InitStruct);
RCC_APB2PeriphClockCmd(RCC_APB2Periph, ENABLE); }
void Open(void){ GPIO_SetBits(GPIOx, GPIO_Pin); }
void Close(void){ GPIO_ResetBits(GPIOx, GPIO_Pin); }};
这个代码是不是很简单,即使你不会C++,只要懂C语言,相信都能看懂。
5流水灯实现(main函数)
用C++的思路和C语言类似,先初始化,然后再实现:
int main(void){ LED_Class LED1(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF); LED_Class LED2(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);
LED1.Init(); LED2.Init();
while(1) { LED1.Open(); LED2.Open(); Delay(10);
LED1.Close(); LED2.Close(); Delay(10); }}
还有一种初始化:
int main(void){ LED_Class *LED1 = new LED_Class(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF); LED_Class *LED2 = new LED_Class(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);
LED1->Init(); LED2->Init();
while(1) { LED1->Open(); LED2->Open(); Delay(50);
LED1->Close(); LED2->Close(); Delay(50); }}
编译出来的代码量相对更大:
然后,如果有开发板,直接下载即可运行LED闪烁的现象。
是不是很简单,看到这里,你学废了吗?
编辑:jq
用keil编写C语言流水灯程序,简述关于Keil、STM32 用C++编写流水灯程序相关推荐
- 【嵌入式基础】用C语言编程、寄存器实现LED流水灯程序;stm32CubeMX+Keil使用HAL库点亮流水灯
本文主要介绍STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置步骤.利用C语言编程和寄存器点亮流水灯以及stm32CubeMX+Keil使用HAL库点灯 目录 一.STM3 ...
- 如何使用emacs编写c语言程序,并编译运行
vi和emacs被分别被称为编辑器之神和神之编辑器.vi的入门精通都很难,emacs入门容易,精通难:vi使用起来不停地切换模式,而emacs则不停地ctrl,meta等组合键.因此,高德纳大师说操作 ...
- c语言最简单的程序编写,C语言简单程序编写.doc
C语言简单程序编写 项目一 C语言简单程序编写 1.1学习目标 本项目达到的目标为: 掌握程序设计的基本思路 掌握C语言的基本结构 了解流程图的符号含义 掌握C语言的关键字 会设计和编写简单的C应用程 ...
- c语言五子棋人机对弈算法_从零开始编写C语言五子棋程序1
从零开始编写C语言五子棋程序 C语言程序是国科大计算机系本科生必修课程,我选修的是武成岗老师的C语言课程.除了课上回答问题,实验课competitive programming的成绩之外,最终的大作业 ...
- VC6.0(VC++6.0)使用教程(使用VC6.0编写C语言程序)
VC6.0(VC++6.0)使用教程(使用VC6.0编写C语言程序) Visual C++ 6.0简称VC或者VC6.0,是微软1998年推出的一款C/C++ IDE,界面友好,调试功能强大.VC6. ...
- 使用VS编写C语言程序遇到的scanf错误
我相信有很多初学者都和我一样会遇到这个报错,在vs编译器中,编写c语言程序的时候,使用scanf实现键盘输入,但是当你运行程序的时候,会像下面一样..... 这里的错误提示,scanf不安全,建议使用 ...
- c语言程序如何在keil中运行,keil c51中C程序的启动过程
汇编是从org 0000h开始启动,那么keil c51是如何启动main()函数的?keil c51有一个启动程序startup.a51,它总是和c程序一起编译和链接.下面看看它和main()函数是 ...
- Ubuntu系统中编写c语言程序教程
目录 1.准备工作 1.1 安装GCC及必要软件包 2.使用GCC编写C语言程序 2.1 编写一个整型运算反回浮点型的程序 2.2 在windows系统下使用编译工具编译该程序 3.使用Makefil ...
- Ubuntu中编写C语言程序
Ubuntu中编写C语言程序 1.准备工作 1.1 安装GCC 2.使用GCC编写C语言程序 2.1 编写一个Hello World程序 2.2 编写一个主程序文件main1.c和子程序文件sub1. ...
最新文章
- NET中的设计模式---单件模式
- python要不要装pycharm-Python和pyCharm安装
- CodeSmith(9)访问数据库多个表
- Day 24: 使用Yeoman自动构建Ember项目
- 【深度学习】深度学习语义分割理论与实战指南.pdf
- 电子科大计算机大类包括专业,电子科技大学a类学科有哪些?附电子科大a类学科名单...
- 【TinyML 实践 - 1:What Why TinyML】
- HTTP GET 和 POST 的区别
- 2013-07-23 IT 要闻速记快想
- Monotonic Renumeration- codeforce
- ASP.NET WebAPI导入EXCEL数据
- DOS 系统安装工具
- 笔记本外接2-3个屏幕
- 电机扭矩计算机公式由来T=9950*P/
- luogu P4593 [TJOI2018]教科书般的亵渎
- 2017报计算机热不热,【2017年10月份热吗】2017年10月份热不热_亲亲宝贝网
- 逻辑回归实现鸢尾花分类
- 深圳大学物计算机黄yilin,中国科学引文数据库(CSCD)收录本校教师论文情况.doc...
- C++算法设计与分析课后习题(第三章)
- 考取阿里云认证后有什么用?能得到什么工作?