STM32 C++编程 001 工程模板

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类。

原文地址:https://www.cnblogs.com/aobosir/p/5928577.html