HK32F030MF4P6的Linux GCC工具鏈開發環境

来源:https://www.cnblogs.com/milton/archive/2022/09/18/16705771.html
-Advertisement-
Play Games

航順的 HK32F030MF4P6, TSSOP20封裝, Arm Cortex M0 內核, 內建32MHz時鐘, 16K Flash, 2K RAM(實際上可用的有4K). 這個型號的目的應該是硬體替換 STM8S003, 管腳和 STM8S003 相容(和 STM32F030 相容的型號是 H... ...


HK32F030MF4P6簡介

航順的 HK32F030MF4P6, TSSOP20封裝, Arm Cortex M0 內核, 內建32MHz時鐘, 16K Flash, 2K RAM(實際上可用的有4K).
這個型號的目的應該是硬體替換 STM8S003, 管腳和 STM8S003 相容(和 STM32F030 相容的型號是 HK32F030F4P6). HK32F030MF4P6 可能是當前市場上最便宜的 Cortex M0 晶元了, 單價0.9元不到. 一個32位的Arm M0晶元, 燒錄能用普通編程器, 參數也還可以, 常用的外設I2C, SPI, UART, PWM, ADC都有, 甚至還有I2S, 性價比相當不錯.

合宙也在放風要出1元的M0, 配置4K RAM, 256K Flash, M0這個級別很快就會進入一元的市場, 8bit系列按現在的價格, 如果不降到比M0低, 可能只剩下存量項目和教學用途了.

項目模板地址:

相關資料下載:

相關鏈接

HK32F030MF4P6 的外設庫

對比 HK32F030M 的外設庫和 STM32F0xx_StdPeriph_Lib_V1.5.0, 格式幾乎是照抄的, 定義前者比後者有一些縮水而已, 因為埠和功能上確實少一些. 所以熟悉 STM32F0 的人很容易上手. 相比較之前介紹的華大 HC32 系列, HC32 這個系列就有很明顯的 STC 寄存器風格, 和 STM 不是一條路線.

Linux GCC Arm Embedded 開發環境

Windows下的開發環境已經有很多資料了, 前面的資料下載里有很詳細的文檔. 這裡主要介紹一下 Linux (再準確點, Ubuntu) 下的開發環境. 以下介紹 HK32F030MF4P6 這個晶元使用 Linux GCC Arm Embedded 工具鏈的開發環境.

硬體環境

  • 帶 HK32F030MF4P6 的開發板. 這個晶元不需要外圍元件, 直接用 TSSOP20 轉接板接出即可
  • JLink OB, 最常見最便宜的那種 JLink 燒錄器

JLink接線

## JLINK
VCC -> #9  VCC
GND -> #7  GND
CLK -> #11 
SWD -> #2

軟體環境

JLink7.70 已經內建對 HK32F030M 系列的支持, 安裝後直接可用

GCC ARM工具鏈

在GCC ARM網站下載工具鏈接https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads, 解壓到合適的目錄

tar xvf gcc-arm-11.2-2022.02-x86_64-arm-none-eabi.tar.xz
cd /opt/gcc-arm/
sudo mv ~/Backup/linux/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/ .
sudo chown -R root:root gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/

檢查版本

/opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

HK32F030M外設庫

https://bbs.21ic.com/icview-3236132-1-1.html 下載, 需要其中的外設庫.

示例項目導出和編譯

導出項目

git clone https://github.com/IOsetting/hk32f030m-template.git

將下載的外設庫放到 Libraries/HK32F030M_Driver 目錄下

根據自己的環境參數修改 Makefile

PROJECT     ?= app
# path to gcc arm (or should be specified in PATH)
ARM_TOOCHAIN  ?= /opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin
# path to JLinkExe (or should be specified in PATH)
JLINKEXE    ?= /opt/SEGGER/JLink/JLinkExe
# MCU type: HK32F030MD4P6, HK32F030MF4U6, HK32F030MF4P6 or HK32F030MJ4M6
DEVICE      ?= HK32F030MF4P6
# The path for generated files
BUILD_DIR     = Build

項目中帶了一個LED Blink的演示, 接線

## LED
LED1 -> #18 PD1
LED2 -> #17 PC7
LED3 -> #6  PA2

編譯

make clean
make

燒錄

make flash

項目模板目錄結構

項目模板結構

├── Build                       # 編譯結果文件目錄
├── Examples                    # 示例代碼
├── flash.jlink                 # JLink 下載腳本
├── Libraries
│   ├── CMSIS
│   ├── Debug                   # SysTick 延時函數, printf 支持
│   ├── HK32F030M_Driver        # MCU 外設庫
│   └── LDScripts
├── LICENSE
├── Makefile                    # Make 配置
├── README.md
├── rules.mk                    # Makefile 預設的編譯規則
└── User                        # 用戶應用代碼

其中並未包含外設庫, 和STM32的太像了, 放上去感覺不妥, 怕有版權問題, 還是刪掉了. 自己下載也很方便.

編譯參數

rules.mk 中, 預設的包含文件和目錄為

# C source folders
CDIRS := User \
    Libraries/CMSIS/HK32F030M/Source \
    Libraries/HK32F030M_Driver/src \
    Libraries/Debug
# C source files (if there are any single ones)
CFILES := 

# ASM source folders
ADIRS := User
# ASM single files
AFILES  := Libraries/CMSIS/HK32F030M/Source/startup_hk32f030mf4p6.s

# Include paths
INCLUDES  := Libraries/CMSIS/CM0/Core \
      Libraries/CMSIS/HK32F030M/Include \
      Libraries/HK32F030M_Driver/inc \
      Libraries/Debug \
      User

其中 CDIRS, ADIRS, INCLUDES 對應的都是目錄, CFILES 和 AFILES 對應的是單獨的源文件.
如果引入其它的庫或者源文件, 對應修改這部分即可.

編譯參數如下所示

# Global compile flags
CFLAGS    = -Wall -ggdb -ffunction-sections -fdata-sections
ASFLAGS   = -g -Wa,--warn

# Arch and target specified flags
OPT     ?= -Os
CSTD    ?= -std=c99
ARCH_FLAGS  := -fno-common -mcpu=cortex-m0 -mthumb

### c flags ###
TGT_CFLAGS  += $(ARCH_FLAGS) $(addprefix -D, $(LIB_FLAGS))

### asm flags ###
TGT_ASFLAGS += $(ARCH_FLAGS)

### ld flags ###
TGT_LDFLAGS += --specs=nosys.specs -mcpu=cortex-m0 -mthumb -Wl,--gc-sections -Wl,-Map=$(BDIR)/$(PROJECT).map -Wl,--print-memory-usage
 # Use newlib-nano instead of newlib for smaller flash size
TGT_LDFLAGS += --specs=nano.specs
 # Exclude standard initialization actions, when __libc_init_array exists, this should be omit, \
   otherwise it will generate "undefined reference to `_init'" error. \
   **Remove** `bl __libc_init_array` from startup.s if you want to enable this.
# TGT_LDFLAGS += -nostartfiles

因為使用了__libc_init_array, 預設不使用-nostartfiles, 如果取消註釋, 需要到 startup_hk32f030mf4p6.s 中刪除這行, 否則會報錯.

bl __libc_init_array

Startup 和 LD 代碼

startup_hk32f030mf4p6.s 移植自 STM32F0 的 startup 代碼, 沒有什麼特別的, 中斷向量和手冊是一致的. LD文件中

MEMORY
{
  RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 4K
  FLASH (rx)     : ORIGIN = 0x08000000, LENGTH = 16K
}

記憶體大小在手冊上寫的是2KB, 但是實際可用的有4KB, 這裡根據實際的記憶體大小將記憶體設成了 4K. 如果實際的規格有變化, 需要將其改回2K.

預聲明的堆棧

_Min_Heap_Size = 0x200;   /* required amount of heap: 512 bytes */
_Min_Stack_Size = 0x400;  /* required amount of stack: 1024 bytes */

...

/* User_heap_stack section, used to check that there is enough RAM left */
._user_heap_stack :
{
  . = ALIGN(8);
  PROVIDE ( end = . );
  PROVIDE ( _end = . );
  . = . + _Min_Heap_Size;
  . = . + _Min_Stack_Size;
  . = ALIGN(8);
} >RAM

這裡預聲明瞭 512 Byte的堆和 1024 Byte的棧, 所以編譯的結果, 顯示的記憶體占用是一定大於1.5KB的, 如果希望增加或縮小, 在這裡調整

示例代碼

模板中 Examples 目錄下麵是一些示例代碼

├── ADC
│     ├── ADC_Interrupt_Continous
│     └── ADC_Single
├── GPIO
│     └── LED_Blink
├── I2S
│     └── I2S_Audio_TX
├── SPI
│     └── MAX7219_8x8LED
├── TIM
│     ├── Advanced_Timer
│     ├── Basic_Timer
│     └── PWM_Complementary_Output
└── USART
    └── UART_TxRx

除了 I2S 的代碼, 其它都移植自官方的參考示例. 使用時, 將 User 目錄下的代碼刪除, 將示例下的代碼複製到 User 目錄, 編譯燒錄即可.

I2S 音頻輸出演示

B站視頻"航順HK32F030MF4P6 I2S驅動MAX98357播放8k 8bit語音效果演示", 地址 https://www.bilibili.com/video/BV1AP411G7kf


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、什麼是SQL片段 就是將我們Mapper.xml文件中部分SQL語句拿出來單獨用一個sql標簽進行標記,這個sql標簽就是一個SQL片段。 二、為什麼要用到SQL片段 這個sql標簽可以被引用,這樣需要用到這個sql標簽中的SQL語句的地方直接引用就可以,如此一來就提高了SQL代碼的復用性,而不 ...
  • #MyBatis Plus 國產的開源框架,基於 MyBatis 核心功能就是簡化 MyBatis 的開發,提高效率。 ##MyBatis Plus 快速上手 官網快速上手案例 Spring Boot(2.3.0) + MyBatis Plus(國產的開源框架,並沒有接入到 Spring 官方孵化器 ...
  • 今天我就來告訴你“一名合格的爬蟲師需要學習哪些技術”?哪些技術我們該著重掌握? 一、Python語言 重要程度 :★★★★★(重中之重) 任何一門技術都是需要語言來支持的。在眾多的電腦編程語言中,Python無疑是最適合做爬蟲的,最適合併不代表是唯一的,其它的語言例如Java、C等等都是可以來做爬 ...
  • 在上一篇if中我們已經把if和where標簽進行了學習,現在我們學習一些剩下的標簽。 一、set標簽 首先看官方文檔給出的說明: 用於動態更新語句的類似解決方案叫做 set。set 元素可以用於動態包含需要更新的列,忽略其它不更新的列。 set 元素會動態地在行首插入 SET 關鍵字,並會刪掉額外的 ...
  • 2022-09-17 裝飾器的使用實例——獲得計時函數所用時間: 1 import time 2 # 定義裝飾器函數 3 def decorator(fun): 4 def inner(): 5 # 獲得開始時間 6 start = time.time() 7 # 執行計時函數 8 fun() 9 ...
  • /** * 版權所有 2022 塗聚文有限公司 * 許可信息查看: * 描述: * 裝飾模式 Decorator Patterns * 歷史版本: JDK 14.02 * 2022-09-12 創建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:d ...
  • 先新建一個類,因為我們肯定要在類裡面寫,在main方法里調用(為求好理解這裡我用的預設名,請勿糾結) 首先我們要想到函數中的字元串最好是要用戶自行輸入的,那麼我們可以通過main方法里的Console.WriteLine獲取到用戶輸入的三個字元串,依次賦值給參數,然後調用我們在類里寫好的方法體 可以 ...
  • 前言:以下內容,手把手從搭建到最終實現,完成多語言切換以及換裝功能。 本地系統環境:win 10 編譯器環境:VS2022 社區版 .NET 環境: .NET 6 1、新建一個WPF項目 2、新建完畢,添加兩個按鈕備用。 3、添加WPF用戶控制項庫類庫項目 4、創建控制項庫類庫項目 Wesky.Skin ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...