STM32的官方工程模板 修改为我们这套教材的:STM32 C++工程模板

我使用的 STM32 库的版本 : V3.5.0


注意:

  • 想学习本套 STM32 C++编程 的专栏是有点门槛的。你需要有一点点 STM32 基础 和 一点点 C++ 语言基础。

  • 完整的STM32 C++工程模板 的下载地址可以在本篇博客的最下面找到。


下面是:将 STM32的官方工程模板 修改为我们这套教材的 STM32 C++工程模板 的修改步骤:

1. 在启动文件中,增大了 的空间

原启动文件里堆栈的大小:

增大后:

  • 栈:

    编译器自动分配释放。比如说:函数语句的调用(存放函数的参数值,局部变量的值等等)、指针。

  • 堆:

    一般由程序员分配释放。由关键字 new 分配的内存,即对象,存放在 中。

Q: 为什么要增大启动文件 的空间?

A: 解释:

对于C++语言,相比C语言,它有对象的说法。如果你定义的一个对象需要分配的动态内存空间超出了STM32 启动文件里面设定的堆栈的大小,程序编译的时候是没有错误的,并且也可以烧到板子里面。但是在执行的时候没就出现错误,如果你在线调试程序,你会发现:程序死在了 stm32f10x_it.cpp 文件里的HardFault_Handler()中断函数里面出不来。

void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}

出现这种问题一般都是:数组越界,堆栈溢出所导致的,就是内存空间分配的问题。根据你的实际情况,解决办法就是:

  1. 增大数组的容量;增大启动文件中堆栈的大小。
  2. 对于我们使用C++变成,如果你不将STM32的启动文件中堆栈的大小调大一点,当程序使用了比较都的对象时,就会很容易死在HardFault_Handler() 函数里面。

2. 将一些.c文件扩展名改为:.cpp

将原模板工程里面的main.cstm32f10x_it.c的后缀名改为:.cpp

修改后为:main.cppstm32f10x_it.cpp

3. 在stm32f10x_it.cpp 文件中添加一些兼容C/C++的代码:

添加下面的声明:

#define ARMAPI extern "C"

这个声明是:在.cpp文件中,使用这个声明(ARMAPI)声明的函数,会被用 C语言 对待。

在用户可以使用的中断函数前面添加关键字:ARMAPI。比如:

ARMAPI void USART1_IRQHandler(void)
{
}

4. 我已经将一个Gpio类添加到了这个STM32 C++模板程序 里面。

Gpio类 下节再讲。

搞定


你可以到这里下载我已经做好的 STM32 C++工程模板

百度云 链接:http://pan.baidu.com/s/1bpbZ2MV 密码:esam

也可以在CSDN里面下载:http://download.csdn.net/detail/github_35160620/9621141



小结:

下一讲,我们来使用C++语言,创建一个STM32的Gpio类。

STM32 C++编程 001 工程模板的更多相关文章

  1. STM32 C++编程 002 GPIO类

    使用 C++ 语言给 STM32 编写一个 Gpio 类 我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0 注意: 想学习本套 STM32 C++编程 的专 ...

  2. STM32 C++编程 005 I2c(Soft)类

    使用 C++ 语言给 STM32 编写一个 I2c(Soft)类 我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0 注意: 想学习本套 STM32 C++编 ...

  3. STM32 C++编程 004 Adc (数模转换)类

    使用 C++ 语言给 STM32 编写一个 Adc 类 我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0 注意: 想学习本套 STM32 C++编程 的专栏 ...

  4. STM32 C++编程 003 USART(串口)类

    使用 C++ 语言给 STM32 编写一个 Usart 类 我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0 注意: 想学习本套 STM32 C++编程 的 ...

  5. STM32库函数编程、Keli/MDK、stm32f103zet6

    catalogue . Cortex-M3地址空间 . 基于标准外设库的软件开发 . 基于固件库实现串口输出(发送)程序 . 红外接收实验 . 深入分析流水灯例程 . GPIO再举例之按键实验 . 串 ...

  6. STM32学习笔记——新建工程模板步骤(向原子哥学习)

    1.  在创建工程之前,先在电脑的某个目录下面建立一个文件夹,我们先把它命名为Template,后面建立的工程可以放在这个文件夹下.在 Template 工程目录下面,新建 3 个文件夹USER , ...

  7. STM32系列之新建工程模板(三)

    今天,我将记录STM32如何新建一个模板步骤 第一步:首先先新建一个文件夹(英文命名的)——作为工程根目录 第二步;在文件夹中新建一个名为USER的子目录文件 第三步:点击 MDK 的菜单:Proje ...

  8. STM32中断编程三步曲教你弄会中断设置以及中断优先级设置

    中断作为stm32中必不可少的一个功能,其重要性是不言而喻的因此把中断学习好是根本. 所以今天就来好好啃一下中断配置的知识,俗话说:磨刀不误砍柴工.问题是什么呢?项目中我用到了一个触摸键盘TTP229 ...

  9. STM32 可编程电压监测器(PVD)实现数据掉电保存

    STM32内部有一个完整的上电复位和掉电复位电路,当供电电压达到2v时系统即能正常工作. STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控.通过电源控制寄存器中的PLS[2:0]位可以 ...

随机推荐

  1. 马拉车——Manacher一篇看上去很靠谱的理解(代码显然易懂)

    由于回文分为偶回文(比如 bccb)和奇回文(比如 bcacb),而在处理奇偶问题上会比较繁琐,所以这里我们使用一个技巧,在字符间插入一个字符(前提这个字符未出现在串里).举个例子:s="a ...

  2. O(logn)的意思

    T=K*log2(N) 注:2是小2时间T与以2为底的对数成正比.实际上,由于所有的对数都和其他对数成比例(从底数为2转换到底数为10需乘以3.322),我们可以将这个为常数的底数也并入K.由此不必指 ...

  3. [BZOJ1022][SHOI2008]小约翰的游戏

    bzoj luogu sol 显然这个玩意儿和普通\(Nim\)游戏是有区别的. 形式化的,\(Nim\)游戏的关键在于决策集合为空者负,而这里的决策集合为空者胜. 所以就显然不能直接用\(SG\)函 ...

  4. OpenJudge9278:旅行

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  131072kB 描述 转眼毕业了,曾经朝夕相处的同学们不得不都各奔东西,大家都去了不同的城市开始新的生活.在各自城 ...

  5. TP中登录验证

    loginpro 1.建立控制器 loginController.calss.php <?php namespace Admin\Controller; header('Content-type ...

  6. 高性能服务器架构 的几个注意点 (High-Performance Server Architecture)

    High-Performance Server Architecture 高性能服务器架构 来源:http://pl.atyp.us/content/tech/servers.html译文来源:htt ...

  7. PhantomJS python 截屏

    参考:https://www.cnblogs.com/LanTianYou/p/5578621.html # coding:utf8 from time import sleep from selen ...

  8. Angular5学习笔记 - 虚拟RestfulApi配置与使用(六)

    一.安装json-server功能 #windows cnpm install json-server -g #Mac & Linux sudo npm install json-server ...

  9. GWT实现“跟随标题栏”

    在一些商城或者博客上,随处可见一些“跟随的标题栏”,什么是”跟随的标题栏“呢?它的效果是当浏览器窗口移到看不见某处内容的时候,这块内容的标题会紧贴在浏览器顶部,跟随浏览器滑动,当用户将浏览器内容往上拖 ...

  10. WCF svcutil工具

    通过SvcUtil.exe生成客户端代码和配置 WCF服务调用通过两种常用的方式:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式,一种是通过ChannelFactory直接创建服务 ...