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. ImageSwitcher的简单使用

    测试代码: activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <Linear ...

  2. Python3.7安装pyspider

    下面是Python3.7安装pyspider的方式,能安装成功但是后期有很多问题,所以不建议,请使用3.5版本的Python进行安装!!!由于要做爬虫工作,所以学习pyspider框架,下面介绍安装步 ...

  3. LeetCode Count Binary Substrings

    原题链接在这里:https://leetcode.com/problems/count-binary-substrings/description/ 题目: Give a string s, coun ...

  4. linkedLoop

    public class linkQueue <E>{ private class Node<E>{ E e; Node<E> next; public Node( ...

  5. [转]HTMl中Meta标签详解以及meta property=og标签含义

    meta是用来在HTML文档中模拟HTTP协议的响应头报文.META标签是HTML语言HEAD区的一个辅助性标签,它位于HTML文档头部的<HEAD>标记和<TITLE>标记之 ...

  6. python3小例子:scrapy+mysql

    https://blog.csdn.net/u010151698/article/details/79371234

  7. JSON-lib框架,转换JSON、XML

    json-lib工具包 下载地址: http://sourceforge.net/projects/json-lib/json-lib还需要以下依赖包: jakarta commons-lang 2. ...

  8. Unix文件指令-Mac终端命令应用

    pwd:查看当前文件夹 cd: 打开文件夹 ls:列出当前路径下所有文件 ls -l :列出当前路径下的所有文件详细信息. mkdir: 新建文件夹 touch: 创建文件   eg: touch t ...

  9. Java栈,队列,优先队列的使用

    1. 栈的使用: import java.util.*; public class Main{ public static void main(String[] args){ Deque<Str ...

  10. 关于HTML标签中的一些容易忘记常用样式属性

    样式说明--样式: margin, margin-top/left/bottom/right -- 外边距; padding, padding-top/left/botton/right -- 内边距 ...