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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM