發表文章

目前顯示的是 11月, 2015的文章

[STM32] 在 Windows 下使用 VSCode 架設 STM32 開發環境

1. 所需安裝的軟體 GNU Arm Embedded Toolchain : 下載壓縮檔,解壓到你想擺放的目錄。例如:c:\stm32\gcc-arm\ GNU MCU Eclipse Windows Build Tools : 這是 make 和相關的軟體,也可以使用 cygwin 或 mingw 內的工具,但我發現這包最簡潔。下載壓縮檔後將其解開,把裡面 bin 目錄下的執行檔複製到你想擺放的目錄。例如:c:\stm32\build tools\ OpenOCD : 這是燒 code 和 debug 的工具。下載壓縮檔,解壓到你想擺放的目錄。例如:c:\stm32\openocd\ VSCode : 這次的主角,編輯器和整合的操作介面。下載安裝程式執行,依指示安裝。安裝過程中有選項可將開啟檔案和開啟目錄加入滑鼠右鍵選單,建議打勾,以後開啟專案比較方便。 ST-Link Utility : STM32 原廠開發版的驅動程式和燒錄工具 STM32CubeMX (非必備): ST 提供的程式碼生成工具,利用它產生 makfile 的專案比較快 2. VSCode 的設定 由於 VSCode 的 Build 和 Debug 設定是存放在專案目錄下 .vscode/ 裡的 tasks.json 和 launch.json ,以下的操作必需是以 Folder 的方式開啟專案目錄才能用。你可以在檔案總管中,在專案的目錄上按右鍵,選"Open with Code"(安裝時必需有打開滑鼠右鍵選單功能)。或是在 VSCode 內用 "Open Folder" 打專案的目錄。 2.1 安裝 Extensions 第一次使用 VSCode 先從左側打開 Extensions 的側欄,安裝下列 Extensions。 C/C++ (Microsoft) Cortex-Debug 打開 settings,設定 cortex-debug 需要的路徑 "cortex-debug.openocdPath": "c:/stm32/openocd/bin/openocd.exe", "cortex-debug.armToolchainPat

[STM32] 3. USART 的發送與接收

UART 是一般嵌入式系統最常用的 debug 介面,通常 PC 端必需要有接收的硬體。不過 neculeo 的電路版已經包含了一個 virtual com port 連接到 USART2。所以只要設定好 USART2 就能在 PC 上透過終端機程式(ex: putty )與 neculeo 連線了。 STM32 週邊的初始化包含下面的步驟 設定腳位:由於腳位的數量有限,所以有些週邊會共用接腳。而且為了使用上的彈性,週邊也可能有一組以上的腳位可選擇。所以使用前要將腳位設定為正確的模式。 設定週邊:設定週邊的硬體參數 設定中斷:如果週邊在應用上會使用到中斷,需要設定 NVIC 另外,STM32 的週邊預設 clock 是關閉的,所以使用任何的週邊都需先開啟該週邊的 clock ,包含 GPIO 也是要先開啟 clock 。 3.1 設定 GPIO USART2 使用的腳位是 GPIOA2 和 GPIOA3,先將這兩隻腳位設定給 USART 使用。 呼叫 RCC_AHB1PeriphClockCmd() 打開 GPIOA 的 clock 宣告一個 GPIO_InitTypeDef 的 struct 準備給 GPIO_Init() 使用 呼叫 GPIO_StructInit() 將 GPIO_InitTypeDef 的 struct 進行初始化。當然你也可以手動對 struct 內的 member 設定,但如果未來更新了 stm32 提供的 library , GPIO_InitTypeDef 的 member 可能會改變,那這段程式碼可能就會出問題。使用第三方提供的 library 時,最好依它提供的方式使用 修改 GPIO_InitTypeDef struct 的內容 呼叫 GPIO_Init() 設定 GPIO ,目前只是將 GPIO_Mode 設定為週邊使用,但還沒指定給哪個週邊 呼叫 GPIO_PinAFConfig() 將 GPIOA2 和 GPIOA3 指定為 USART2 使用 詳細的程式碼如下: // Enable clock of GPIOA RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // Configure pin

[STM32] 2. 建立專案

圖片
2.1 建立樣板專案 STmicroelectronics 提供的標準函式庫中,已經有其他編譯器用的樣板專案。我們從裡面去修改成 gcc 用的樣板專案。一開始建立專案的步驟較為繁瑣,所以先建立一個空的專案當作樣板留下來,以後要寫程式就可以直接把樣板複製一份。 建立一個放置專案的目錄 stm32f466 ,並在裡面再建立子目錄 src 和 inc 將從 STmicroelectronics 下載的 stm32f4_dsp_stdperiph_lib.zip 解壓縮,放在自己習慣的目錄 進入 Project\STM32F4xx_StdPeriph_Templates\ 將 main.c, stm32f4xx_it.c, system_stm32f4xx.c 複製到 stm32f466\src\ 下 將 main.h, stm32f4xx_conf.h, stm32f4xx_it.h 複製到 stm32f466\inc\ 下 再進入 TrueSTUDIO\STM32F446xx\ 將 STM32F446ZETx_FLASH.ld 複製到 stm32f466\ 下 回到 stm32f4_dsp_stdperiph_lib 的最上層 進入 Libraries\CMSIS\Device\ST\STM32F4xx\Include\ 將 stm32f4xx.h, system_stm32f4xx.h 複製到 stm32f466\inc\ 下 回到上一層,進入 Source\Templates\TrueSTUDIO\ startup_stm32f446xx.s 複製到 stm32f466\src\ 下 回到 Libraries\CMSIS\ ,進入 Incluse\ 將 core_cm4.h, core_cmFunc.h, core_cmInstr.h, core_cmSimd.h 複製到 stm32f466\inc\ 下 回到 Libraries\ 將 STM32F4xx_StdPeriph_Driver 整個目錄複製一份到 stm32f466\src\ 下 根據 mcufreaks 的網頁打造 makefile 或是下載製作好的版本: makefile ,  common.mk 。放到 stm32f466\ 下 接著就能進入