STM32開放式開發環境:釋放創造力的利器
市場上涌現各種價格親民的經濟型微控制器,助力新一代開發者創造令人興奮的新型嵌入式應用。如今的開發工具非常好用,軟硬件均呈現模塊化趨勢,插接安裝簡單容易,使得產品設計評估和原型開發周期大幅縮短。STM32開放式開發環境是業內獨一無二的軟硬件開發平臺,堆疊式插接電路板集成各種模塊化硬件,同時模塊化軟件覆蓋從驅動程序到應用層的全部軟件,幫助設計人員將創意快速變成產品原型,順利轉化成最終設計。
本文引用地址:http://www.j9360.com/article/201608/294894.htmSTM32開放式開發環境是什么?
STM32開放式開發環境 是意法半導體開發的嵌入式系統原型設計開發環境,以簡化嵌入式項目設計為目標,通過開源形式提供全部重要功能模塊,組件包括:
- 價格極低的STM32 Nucleo開發板(STM32微控制器)和STM32 Nucleo擴展板(傳感器、通信接口、電機控制和致動功能),提供基于尖端商用產品的各種硬件功能。
- 基于STM32Cube軟件工具的STM32微控制器軟件庫和簡單好用的軟件庫配置器(STM32CubeMX )。
- STM32Cube擴展軟件庫,支持STM32 Nucleo擴展板上各種器件,包括電機驅動器、低能耗藍牙模塊、MEMS傳感器等。
- 功能包:一套利用STM32 Nucleo開發板和STM32Cube軟件為一些最常用用例開發的功能性例程(代碼示例)。
- 每個軟硬件功能模塊都配備描述詳盡的技術文檔。
- 活躍的快速發展的在線開發社區
STM32 Nucleo開發板
STM32 Nucleo開發板是STM32開發環境的基礎組件,板載一顆基于ARM® Cortex®-M 32位處理器內核的STM32微控制器。STM32開放式開發環境所用的STM32 Nucleo開發板是64引腳版(圖1)微控制器。目前STM32 F4和STM32 L0微控制器兼容所有的STM32 Nucleo擴展板和擴展軟件。
圖1 – STM32 Nucleo-64開發板
開發環境使用基于STM32Cube HAL(硬件抽象層) API的STM32Cube軟件庫,大幅降低了在不同系列的STM32產品(目前有20余款STM32 Nucleo開發板)中移植軟件項目所需的編程工作量。
STM32 Nucleo-64開發板硬件具有以下特性:
- 采用LQFP-64封裝的STM32微控制器
- 通過38引腳的Morpho連接器可以使用STM32的所有引腳
- 四個Arduino連接器(位置非對稱排列,引導用戶正確插接Arduino兼容擴展板)
- 集成ST-LINK/V2-1調試器/代碼燒錄器和mini USB端口,無需安裝額外的調試工具,板子可直連PC機,進行調試和燒寫代碼操作。此外,USB接口支持虛擬COM端口和大容量存儲接口(兼容ARM mbed)
- 2個按鍵(微控制器復位信號和開發者專用按鍵)
- 3支LED燈(5V電源、開發者專用、ST-Link調試器狀態)
用戶可以為板子選用不同的電源:
- 5V USB供電
- 5V外部電源
- 外部電源VIN (7-12V)
STM32 Nucleo開發板上的5V電源還用于驅動通過Arduino或morpho連接器連接主板的擴展板,同時通過板載穩壓器為STM32提供3.3V 電源。
STM32 Nucleo開發板功能性極強,板載代碼燒寫/調試工具非常實用,設計人員可以立即動手開發項目,而無需添置昂貴的開發工具。
基于STM32Cube的嵌入式軟件和工具
在選中了最適合自己的STM32 Nucleo開發板后,下一步是下載相關的軟件庫,熟悉STM32技術特性和外設。最快捷的入門方式是下載軟件庫配置器STM32CubeMX (www.st.com/stm32cubemx)。在這個工具的圖形用戶界面內,用戶只要直接選擇正在使用的STM32 Nucleo開發板(圖2),配置器就會按照板子所連接的硬件設備(例如LED、按鍵、UART引腳分配)自動配置STM32外設。
下一步,可能需要詳細配置每個外設,例如,設置UART同步/異步通信模式、波特率、寄偶校驗和停止位。
圖 2 – STM32CubeMX: 從板子選型到外設配置,只需幾步簡單的操作。
最后,STM32CubeMX將生成代碼,創建一個完整軟件項目,且兼容所用代碼編譯工具鏈(例如IAR、Keil或Eclipse),同時配置先前在圖形用戶界面內所選的全部硬件和外設,并兼容所用代碼調試/燒錄工具。
這個圖形用戶界面工具讓你從零開始創建項目,幾分鐘完成項目所需的全部配置,然后立即動手創建自己的軟件項目,直接在main.c文件里寫代碼。
圖3 – STM32Cube軟件庫的層次
所生成的代碼位于STM32Cube嵌入式軟件之上,STM32Cube有兩個主層(圖3):
- 硬件抽象層:準許上面的軟件層(例如,中間件層)執行各自的功能,而無需開發人員深入了解如何使用微控制器
- 中間件:一整套中間件組件(RTOS, USB, TCP/IP, …)
軟件設計采用模塊化方法,用戶在項目開發過程中可以隨時添加軟件模塊,輕松地跨系列移植全部項目。
STM32 Nucleo擴展板
為連接STM32 Nucleo擴展板,STM32 Nucleo-64開發板配備兩種連接器:
- 兼容Arduino標準的Arduino連接器(微控制器的32個引腳都在這個連接器上)。
- Morpho 連接器,可以連接STM32微控制器的全部引腳(76個引腳都在這個連接器上)。
STM32 Nucleo擴展板讓設計人員像搭積木一樣,在主板上插接多塊不同功能的子板,創建一個完整的應用系統。目前意法半導體網站(www.st.com/x-nucleo) 上有20余款擴展板(圖4)在售,按功能劃分,可以分為五類:
- 感測:MEMS 9軸運動傳感器; 壓力傳感器,環境傳感器,接近檢測傳感器; MEMS麥克風
- 連接: 低能耗藍牙、Wi-Fi、NFC和Sub-GHz射頻;
- 電機控制/致動: 直流電機驅動器、步進電機驅動器、3相直流無刷電機驅動器
- 輸入/輸出: I/O模塊(家庭自動化和工業自動化)
- 信號調理: 運算放大器
圖4 – 各種型號的STM32 Nucleo擴展板
STM32 Nucleo板功能擴展方法類似于Arduino和Raspberry Pi解決方案,便于設計人員快捷開發產品原型。利用這些連接工具,可以將擴展板堆疊插接在主板上,給系統增添新的功能,唯一不足之處是,堆疊式連接方法受限于微控制器外設的使用方式,這個問題的解決方法是,使用I2C和SPI總線替代UART等速度慢的數據總線,這樣可提高同一總線上所連接設備的數量。此外,Arduino連接器不對稱排列設計可有效防止STM32 Nucleo擴展板連接方向錯誤,降低電源連接錯誤損壞設備的風險。擴展板使用STM32 Nucleo開發板上LDO穩壓器通過板上5V電源生成的3.3V電源,用戶可以使用跳線(JP5)為開發板選擇USB 5V電源或外部E5V電源。有些擴展板需要更高的電壓,例如,電機驅動器和I/O擴展板,因此,開發板上還增加一個電源連接器,利用外部電源驅動負載,提供更高的電壓Vbus(最高45V)。
為安全起見,多數擴展板是為低功率應用設計,50V以下電壓在電源極性接反或短路時可以降低板子燒毀風險,所以適合初學者和學生使用。
這些低功耗的擴展板還可以單獨連接高壓高功率的電機控制擴展板,但是,我們只建議電機控制專業人士選用這種配置。為了便于區分,我們將高功率STM32 Nucleo擴展板涂成綠色,其余的擴展板全都是藍色。高功率電機控制擴展板兼備高壓高功率擴展板和低壓擴展板的雙重優點,在電機控制應用中輕松增加數據通信功能,例如,使用射頻技術遠程驅動高壓電機或使用低能耗藍牙或Wi-Fi獲取電機驅動信息和遠程記錄失敗數據。
STM32Cube擴展軟件
STM32 Nucleo擴展板可以像搭積木一樣插接到開發板上,幾分鐘就能組建一個硬件平臺。不過,軟件才是設計項目中最耗時的環節,通常占用研發周期70-80%的時間。STM32Cube將積木式組裝方法帶到軟件設計中。軟硬件一致是STM32開放式開發環境的特性之一,因此,每個STM32Cube擴展軟件包都為用戶提供例程,其中包含各種軟件庫,例如,電機控制、低能耗藍牙協議棧或NFC射頻處理功能,全部都是開源軟件。
STM32Cube擴展軟件包附加的例程非常實用,能夠幫助設計人員快速熟悉設備軟件庫。以下面的步進電機驅動軟件演示項目為例,用戶可將其中所需功能復制到自己的軟件項目:
//----- Init of the Motor control library
/* Start the L6474 library to use 1 device */
/* The L6474 registers are set with the predefined values */
/* from file l6474_target_config.h*/
BSP_MotorControl_Init(BSP_MOTOR_CONTROL_BOARD_ID_L6474, 1);
/* Attach the function MyFlagInterruptHandler (defined below) to the flag interrupt */
BSP_MotorControl_AttachFlagInterrupt(MyFlagInterruptHandler);
/* Attach the function Error_Handler (defined below) to the error Handler*/
BSP_MotorControl_AttachErrorHandler(Error_Handler);
//----- Move of 16000 steps in the FW direction
/* Move device 0 of 16000 steps in the FORWARD direction*/
BSP_MotorControl_Move(0, FORWARD, 16000);
/* Wait for the motor of device 0 ends moving */
BSP_MotorControl_WaitWhileActive(0);
/* Wait for 2 seconds */
HAL_Delay(2000);
//----- Move of 16000 steps in the BW direction
/* Move device 0 of 16000 steps in the BACKWARD direction*/
BSP_MotorControl_Move(0, BACKWARD, 16000);
/* Wait for the motor of device 0 ends moving */
BSP_MotorControl_WaitWhileActive(0);
評論