在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為APM32F411打造可自動化的命令行工作流

Geehy極海半導體 ? 來源:21ic論壇極海半導體專區 ? 2025-07-11 10:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來源:轉載自21ic論壇極海半導體專區

1 背景

拿到APM32F411的TINY板卡后,在打開官方提供的SDK發現,他們提供的MDK、IAR、Eclipse的工程示例。非常不錯,但是我想著有一些場景下在沒有安裝IDE的情況下怎么編譯程序呢?

通過學習,我發現可以使用開源工具鏈GCC+Makefile編譯程序。經過分析發現極海的Eclipse工程就是基于GCC工具鏈進行編譯的,這樣看來我只需要搭建GCC+Makefile的本地編譯環境就可以在不使用IDE的情況下完成對APM32F411的程序編譯了。

完成程序的編譯后,我們需要對程序進行下載,由于APM32F411的TINY板卡的板載仿真器是基于CMSIS-DAP而來的,我們可以輕易的就想到使用ARM提供的PyOCD進行程序下載。

整體的程序編譯及下載的步驟理論存在,那么我們實踐開始。

2 工具鏈準備

在實際進行代碼的搬運前,我們需要對我們所需要的環境進行搭建,我這里使用的是window的環境,注意是下載相關的工具鏈,然后把工具鏈的路徑添加到我們的系統變量中,從而使得直接調用CMD命令就能使用我們的目標工具鏈程序。

2.1 make工具鏈

make工具鏈是我們本次編譯腳本的基礎工具,make工具也是多種多樣的,我這里選擇,這個是它的下載頁面:https://github.com/xpack-dev-tools/windows-build-tools-xpack/releases

這里是它的安裝介紹:https://xpack.github.io/dev-tools/windows-build-tools/install/。

我這里就簡單描述一下:

1. 先下載我們需要的xPack Windows Build Tools版本,比如說我選4.3.0的。

2. 下載下來是一個壓縮包,我們把它解壓到一個合適的路徑,比如我把它放在C盤。

3. 把make.exe的路徑添加到我們的系統環境變量,比如我的是:C:xpack-windows-build-tools-4.3.0-1in

4. 我們在cmd命令窗口輸入“make -v”檢查是否make程序已經正常添加入我們的系統變量中。

f3927168-5bc5-11f0-baa5-92fbcf53809c.jpg

2.2 GCC工具鏈

GCC工具,因為APM32F411是基于Arm Cortex-M4F的芯片,所以我們要選擇的是GNU Arm Embedded Toolchain,

這個是工具鏈的官網:https://developer.arm.com/downloads/-/gnu-rm,也是選擇一個喜歡的版本進行下載,我這里選的是10 2021.10的版本。

需要注意的是,它提供安裝包和壓縮包,使用壓縮包需要自己配置系統環境變量(可以參考make的工具鏈配置,它的路徑是(我的):C:GNU Arm Embedded Toolchain10 2021.10in,里面有arm-none-eabi-gcc.exe那個就是),如果是安裝包需要留意勾選“配置至系統變量”的選項。

f39f35b0-5bc5-11f0-baa5-92fbcf53809c.jpg

同樣的,我們也可以在CMD查看支持,僅需要輸入以下命令“arm-none-eabi-gcc -v”,若有打印arm-none-eabi-gcc版本信息即可。

f3a9223c-5bc5-11f0-baa5-92fbcf53809c.jpg

這里也給大家看看系統環境變量的設置界面(直接使用WIN+Q 按鍵搜索“環境變量”即可)。

f3bbed9a-5bc5-11f0-baa5-92fbcf53809c.jpg

2.3 PyOCD 工具鏈

PyOCD的官網:https://link.zhihu.com/?target=https%3A//github.com/pyocd/pyOCD,它提供了我們使用命令行的形式配合CMSIS-DAP下載程序至Arm Cortex-M的芯片。

PyOCD這個工具鏈的安裝是基于Python上的,我們首先需要安裝Python環境(可以直接在它的官網https://www.python.org/downloads/windows/下載安裝),有了Python環境后我們直接在CMD上輸入“pip install -i https://pypi.tuna.tsinghua.edu.cn/simpl pyocd”命令等待安裝成功。

安裝成功后我們可以在CMD上輸入“pyocd list”我們可以看到當前系統連接的仿真器。

f3cfc978-5bc5-11f0-baa5-92fbcf53809c.jpg

3 源碼選擇

由于我們使用的是GCC的工具鏈環境,對于內核的源碼我們需要相應的版本。即鏈接腳本文件以及啟動文件都得選擇GCC版本的。

為了方便我們的后續程序編寫,我這里新建一個文件夾,把我們需要的源碼往里面裝進去。

1. 板載文件及庫文件必不可少。將“Boards”、“Libraries”復制到我們的新文件夾中。

f4128bc8-5bc5-11f0-baa5-92fbcf53809c.jpg

2. 復制APM32F4xx_SDK_V1.4APM32F4xx_SDK_V1.4ExamplesSysTick下的文件夾至我們的新文件夾中。

f4282078-5bc5-11f0-baa5-92fbcf53809c.jpg

然后把里面的“Project”給刪除,我們不需要這段IDE工程。

3. 復制鏈接腳本文件以及啟動文件。把APM32F4xx_SDK_V1.4LibrariesDeviceGeehyAPM32F4xxSourcegcc里面的“APM32F4xxxE_FLASH.ld”和“startup_apm32f411.S”復制到我們的新文件夾中。

f4bc5720-5bc5-11f0-baa5-92fbcf53809c.jpg

至此,我們的源碼準備完畢。

4 編寫makefile腳本

由于我們是使用makefile來做IDE的角色,我們現在回憶一下我們IDE需要哪些基礎的設置才能完成程序的編譯?對是的,有工程名、源碼包含、頭文件包含、宏定義、輸出目錄、輸出內容、編譯優化等級等內容需要一一設置。

我們新建一個txt文件,把它名字改為“Makefile”,同時刪除后綴。然后我們一步步地將以下內容寫入文件。

4.1 工程名設置

首先是工程名設置,我這里設置為SysTick_TimeBase。

######################################

# target

######################################

TARGET = SysTick_TimeBase

4.2 編譯設置

這里設置編譯是否是debug標簽和優化等級。

######################################

# building variables

######################################

# debug build?

DEBUG = 1

# optimization

OPT = -Og

4.3 編譯文件夾設置

設置編譯的文件的輸出文件夾

#######################################

# paths

#######################################

# Build path

BUILD_DIR = build

4.4 設置源碼包含

設置工程需要包含的源碼路徑。

######################################

# source

######################################

# C sources

C_SOURCES =

SysTick_TimeBase/Source/main.c

SysTick_TimeBase/Source/apm32f4xx_int.c

SysTick_TimeBase/Source/system_apm32f4xx.c

Boards/Board.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_adc.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_can.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_crc.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_cryp.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_cryp_aes.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_cryp_des.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_cryp_tdes.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_dac.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_dbgmcu.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_dci.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_dma.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_dmc.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_eint.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_fmc.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_gpio.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_hash.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_hash_md5.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_hash_sha1.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_i2c.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_iwdt.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_misc.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_pmu.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_rcm.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_rng.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_rtc.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_sdio.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_smc.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_spi.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_syscfg.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_tmr.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_usart.c

Libraries/APM32F4xx_StdPeriphDriver/src/apm32f4xx_wwdt.c

4.5 設置啟動文件

設置啟動文件,將我們的文件夾內的startup_apm32f411.S的啟動文件后綴名改為小寫的“s”。

# ASM sources

ASM_SOURCES =

startup_apm32f411.s

4.6 設置編譯MCU內核

設置編譯的MCU內核及FPU設置。工具鏈使用“arm-none-eabi-”,內核為Arm Cortex-M4F。

#######################################

# binaries

#######################################

PREFIX = arm-none-eabi-

# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)

# either it can be added to the PATH environment variable.

ifdef GCC_PATH

CC = $(GCC_PATH)/$(PREFIX)gcc

AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp

CP = $(GCC_PATH)/$(PREFIX)objcopy

SZ = $(GCC_PATH)/$(PREFIX)size

else

CC = $(PREFIX)gcc

AS = $(PREFIX)gcc -x assembler-with-cpp

CP = $(PREFIX)objcopy

SZ = $(PREFIX)size

endif

HEX = $(CP) -O ihex

BIN = $(CP) -O binary -S

#######################################

# CFLAGS

#######################################

# cpu

CPU = -mcpu=cortex-m4

# fpu

FPU = -mfpu=fpv4-sp-d16

# float-abi

FLOAT-ABI = -mfloat-abi=hard

# mcu

MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)

4.7 設置宏定義

設置工程所需的宏定義。

# C defines

C_DEFS =

-DAPM32F411

-DAPM32F411_TINY

4.8 設置工程頭文件包含

設置工程所需的頭文件路徑。

# C includes

C_INCLUDES =

-ILibraries/APM32F4xx_StdPeriphDriver/inc

-ILibraries/Device/Geehy/APM32F4xx/Include

-ILibraries/CMSIS/Include

-IBoards

-ISysTick_TimeBase/Include

4.9 設置鏈接腳本文件

設置鏈接腳本文件路徑。

4.10 其他

這個部分內容是編譯的一些指令及操作,直接使用即可這里由于篇幅關系就不一一舉例,大家拿到附件后可自行了解。

5 編譯程序

在工程目錄下啟動CMD,輸入“make”便可以開始編譯我們的代碼。最終編譯結果如下:

f4d17376-5bc5-11f0-baa5-92fbcf53809c.jpg

6 下載程序

我們這里將使用PyOCD下載程序,我們把“Geehy.APM32F4xx_DFP.1.0.4.pack”復制到我們的工程目錄,然后在目錄下啟動CMD,輸入:

pyocd flash --erase chip --target apm32f411ve --pack=Geehy.APM32F4xx_DFP.1.0.4.pack build/SysTick_TimeBase.hex

最終效果如下,程序下載完畢后板卡將閃燈,并在串口輸出當前的延時速度。

f4e99dca-5bc5-11f0-baa5-92fbcf53809c.jpg

亮燈效果:

f4f9d780-5bc5-11f0-baa5-92fbcf53809c.gif

注:文章作者在原帖中提供了例程文件,有需要請至原文21ic論壇下載

原文地址:
https://bbs.21ic.com/icview-3329116-1-1.html

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 仿真器
    +關注

    關注

    14

    文章

    1037

    瀏覽量

    85340
  • 開源
    +關注

    關注

    3

    文章

    3673

    瀏覽量

    43787
  • 編譯
    +關注

    關注

    0

    文章

    679

    瀏覽量

    33954
  • 極海半導體
    +關注

    關注

    0

    文章

    162

    瀏覽量

    4825

原文標題:APM32芯得 EP.59 | 為APM32F411打造可自動化的命令行工作流

文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于APM32F411 DMA_ADC Handler模式分析及解決

    ADC連續轉換采集,因此,我沒過濾掉ADC采集中開啟中斷配置的信息,開啟了ADC中斷采集,因此這次以APM32F411官方例程中的DMA_ADC例程,復刻了此次出現的問題。
    的頭像 發表于 06-24 14:30 ?477次閱讀
    基于<b class='flag-5'>APM32F411</b> DMA_ADC Handler模式分析及解決

    極海APM32F411微控制器硬件FPU使用指南

    APM32F411是一款基于32位Arm Cortex-M4F內核的微控制器。硬件FPU是Arm Cortex-M4F的一大優勢。合理應用硬件FPU可以大大縮短運算時間。
    的頭像 發表于 06-28 11:23 ?755次閱讀
    極海<b class='flag-5'>APM32F411</b>微控制器硬件FPU使用指南

    在STM32實現命令行

    工作中的開發環境都是基于linux命令行交互,作為命令行的重度使用者,玩單片機也要使用命令行工具,百度了一些命令行工具,有幾個不錯的開源 c
    發表于 12-09 11:32 ?3085次閱讀

    TinyMaix框架的內存需求超過了APM32F411的可用內存,導致運行失敗,怎么能成功優化?

    TinyMaix框架的內存需求超過了APM32F411的可用內存,導致運行失敗。怎么能成功優化?
    發表于 09-27 09:44

    cmd網絡經典命令行

    cmd網絡經典命令行:
    發表于 06-11 15:17 ?36次下載
    cmd網絡經典<b class='flag-5'>命令行</b>

    caxa命令行中的應用

    caxa命令行中的應用 命令行對于大多用戶來說往往只是輸入數據的作用,但是其中的奧妙還有很多,下面就給大家
    發表于 10-18 18:18 ?2421次閱讀

    CMD的命令行高級教程

    CMD的命令行高級教程
    發表于 10-24 08:31 ?30次下載
    CMD的<b class='flag-5'>命令行</b>高級教程

    XenServer2016命令行方式自動化安裝

    命令行+自動化的顧問XE 2016
    的頭像 發表于 05-31 11:42 ?1959次閱讀

    Shell命令行解釋器簡介

    Shell 是一個命令行解釋器,Shell 用戶提供了與設備進行命令行交互的方式,用戶通過串口、以太網、無線等方式將命令傳輸給具有 Shell 功能的設備,設備會解析
    的頭像 發表于 08-19 17:20 ?3562次閱讀

    Fcoder從命令行批量轉換為TIFF

    何應用程序中,讓您只需一個命令即可自動執行重復的轉換任務。 命令行語法和用法 2TIFF圖像轉換器軟件可以從Windows 命令提示符、PowerShell或任何其他
    的頭像 發表于 05-22 14:13 ?1103次閱讀
    Fcoder從<b class='flag-5'>命令行</b>批量轉換為TIFF

    linux命令行與shell編程實戰

    Linux命令行與Shell編程實戰主要涉及以下內容: Linux命令行基礎:學習Linux命令行的基本操作,如文件管理、進程管理、網絡配置等。熟悉使用命令行能夠提高
    的頭像 發表于 11-08 10:57 ?1082次閱讀

    linux虛擬機怎么調出命令行

    快捷鍵組合Ctrl+Alt+F1 6來切換到命令行界面。如果系統在虛擬機中,則可以使用Ctrl+Alt+shift+F1 6組合鍵來切換到命令行界面。在
    的頭像 發表于 11-08 11:28 ?3696次閱讀

    linux切換到命令行模式

    在Linux中,可以通過以下步驟切換到命令行模式: 打開終端。可以在應用菜單中找到終端或命令行終端。 在終端中輸入命令“exit”或“logout”,然后按回車鍵。 系統會提示您輸入管理員密碼。輸入
    的頭像 發表于 11-13 16:47 ?2227次閱讀

    APM32F411板的python+pyocd命令行操作

    前段時間學習了一下如何使用pyocd配合APM32F411VCTINY板在命令行下給它進行各種騷操作,在使用一段時間后就想著:pyocd是基于python的,那是不是也可以使用python腳本+pyocd使用起來呢?
    的頭像 發表于 10-18 16:21 ?983次閱讀
    <b class='flag-5'>APM32F411</b>板的python+pyocd<b class='flag-5'>命令行</b>操作

    AI工作流自動化是做什么的

    AI工作流自動化是指利用人工智能技術,對工作流程中的重復性、規則明確的任務進行自動化處理的過程。那么,AI工作流
    的頭像 發表于 01-06 17:57 ?710次閱讀
    主站蜘蛛池模板: 亚洲一二三区在线观看 | 天天爽天天| 日本在线亚洲 | wwwxx在线观看 | 四虎国产精品免费久久影院 | 日本特级淫片免费看 | 四虎精品成在线播放 | 天天干夜夜曰 | 国产福利在线观看你懂的 | 国内精品一级毛片免费看 | 美女污污网站 | 欧美成人性动漫在线观看 | 天天干天天舔天天射 | 一级特黄国产高清毛片97看片 | 五月综合久久 | 国产精品亚洲一区二区三区在线播放 | 日日干狠狠操 | 亚洲va久久久噜噜噜久久 | 美女被异性狂揉下部羞羞视频 | 亚洲免费在线观看视频 | 男女无遮挡一进一出性视频 | 午夜三级网 | 日韩一卡 二卡 三卡 四卡 免费视频 | 亚洲五月婷婷 | 天堂中文在线www | 一区三区三区不卡 | 久久久美女视频 | 欧美一区二区三区免费看 | www.色午夜.com| 日本卡一卡2卡3卡4精品卡无人区 | 国产免费播放 | 中文字幕第页 | 乱人伦精品一区二区 | 亚洲美女高清一区二区三区 | 亚洲伊人天堂 | 五月综合色 | 天天舔天天色 | 狼色在线视频 | 三级四级特黄在线观看 | 在线成人亚洲 | yy肉戏多纯黄的小说 |