HT32F52352新建庫函數工程模板、點亮第一個LED



在官方的固件庫 HT32_STD_5xxxx_FWLib_v014_4736 文件中,提供了很多的庫文件,根據路徑 example\GPIO\InputOutput 打開文件夾,第一次看到這樣的畫面

在這裏插入圖片描述
然後點擊 _CreateProject.bat 生成項目工程,看到的界面如下(必須要在 HT32_STD_5xxxx_FWLib_v014_4736 文件夾裏操作,否則批處理會提示文件不存在,因爲文件引用那些不單獨存在於某個文件夾)

在這裏插入圖片描述

我看着感覺挺懵逼的,不知道什麼是什麼,當然了,工程文件在 MDK_ARMv5 中,裏面又是一番美景,好多文件啊,對於初次開發想要學習的我們來說有點雜了,先往下找到 Project_52352.uvprojx ,然後雙擊打開即可,一進去肯定是先編譯工程啦

在這裏插入圖片描述
在這裏插入圖片描述
然後進入魔術棒,找到 C/C++ 一欄,進入頭文件引用那裏查看,所有用到的 h 文件都可以在這裏看到

在這裏插入圖片描述


接着開始新建一個對應自己板子的工程,需要注意的是,以下路徑、新建文件夾和文件的名稱都不要帶有中文、空格等特殊到不能再特殊的字符

在自己的學習文件夾新建一個工程文件夾,比如我的 TEMPLATE ,然後接着在裏面分別新建文件夾 User、Config、Code、Library、Utilities 和 Doc 文件夾

在這裏插入圖片描述
Doc 用來放一些說明文檔,一般文件格式爲 XXX.TXT,一般習慣用 readme.txt ,進入 Doc 文件夾,新建 readme.txt 文件即可

在這裏插入圖片描述
User 用來存放 main.c 和 ht32f5xxxx_01_it.c,我們自行新建一個文件並命名爲 main.c ,同時在 \example\GPIO\InputOutput 下找到 ht32f5xxxx_01_it.c 並複製到我們的工程文件夾中的 User 中

在這裏插入圖片描述
在這裏插入圖片描述
對於 Config 文件夾,其裏面則可以放一些關於配置的文件,並且啓動文件也放在裏面,每個文件對應的路徑如下:
ht32_board_config.h :\example\GPIO\InputOutput
ht32f5xxxx_conf.h :\example\GPIO\InputOutput
ht32f5xxxx_01_usbdconf.h :\example\GPIO\InputOutput
ht32_op.s :\example\GPIO\InputOutput\MDK_ARM
HT32F5xxxx_01_DebugSupport.ini :\example\GPIO\InputOutput\GNU_ARM
startup_ht32f5xxxx_01.s :\example\GPIO\InputOutput\MDK_ARMv5

在這裏插入圖片描述
Code 文件夾則存放 system_ht32f5xxxx_01.c 和 ht32_usbd_core.c,兩者的路徑分別爲:\example\GPIO\InputOutput 和 \library\HT32_USBD_Library\src

在 Utilities 中,我們將下面的文件放入其中
ht32_board.c :\utilities
ebi_lcd.c :\utilities\common
i2c_eeprom.c :\utilities\common
spi_flash.c :\utilities\common
ht32_retarget.c :\library\HT32F5xxxx_Driverr\src
ht32_serial.c :\library\HT32F5xxxx_Driver\src

在這裏插入圖片描述
Library 用來存放 STM32 庫裏面的 inc 和 src 這兩個文件,這兩個文件包含了 芯片上的所有驅動;假如我只用 GPIO,我可以只用添加 stm32f10x_gpio.c 而其他的可以不用添加,這裏全部添加進來是爲了後面方便,不用每次添加,當然這樣的壞處是工程太大,編譯起來速度慢

將 \library\HT32F5xxxx_Driver 裏的 src 文件夾和 inc 文件夾複製到工程目錄的 Library 文件夾下即可,需要注意的是,我們只用到 src 中的某部分(23個),因爲其他的我們使用不上,且有的官方並不提供相關的頭文件,不是在工程目錄中刪除用不到 .c 文件,而是在 MDK 工程中右擊進行 remove

在這裏插入圖片描述

此時進入 MDK 裏,在工具欄 Project->New μVision Project,然後填寫工程名稱並保存到剛新建的工程文件夾裏
在這裏插入圖片描述
選擇合泰的芯片,HT32F52352 64LQFP,確認之後在彈出的下載 pack 的頁面中不要理會,按 cancel 即可
在這裏插入圖片描述
在這裏插入圖片描述

把 Target 的名稱改爲 Template,如果我們建的工程是 LED 的就改爲 LED,其實不改也可以,改了只是爲了見名知義

在這裏插入圖片描述
增加文件項之後的樣子

在這裏插入圖片描述
接下來就雙擊每個文件名,將剛纔我們新建的工程目錄下的文件分別對應 add 進來,此時會發現 User 文件夾下多了兩個文件夾,Listings 和 Objects 文件夾是 MDK 自動生成的文件夾,用於存放編譯過程產 生的中間文件,可以先將兩者刪除,在工程目錄新建一個 OBJ 文件夾用來代替它們即可

在這裏插入圖片描述
此時在 MDK 裏點擊魔術棒,然後選擇“Output”選項下面的“Select folder for objects…”,然後選擇目錄爲我們上面新建的 OBJ 目錄(一定要點進去進去 OBJ 目錄裏面!)。如果我們不設置 Output 路徑,那麼默認的編譯中間文件存放目錄就是 MDK 自動生成的 Objects 目錄和 Listings 目錄

在這裏插入圖片描述
接着繼續雙擊文件項進行 add ,當在 config 處時,需要注意添加添加進來的文件類型需要選爲 all ,後面的同樣情況一樣使用(ini文件加載時不要選Image File (* . *)格式,可以選text)

在這裏插入圖片描述
當全都加載進來後,是長這個樣子的

在這裏插入圖片描述


至此,工程已經基本建好,但是還不行,點擊工具欄中的魔術棒按鈕

① 在 Target這個選項卡中,把晶振改爲8(外部晶振),把 Use MicroLIB 的勾打上,這樣是爲了後面的串口例 程可以使用 printf 這個函數

在這裏插入圖片描述
② Output選項卡如下設置

在這裏插入圖片描述
③ 在 C/C++ 一欄,複製以下內容到 Define 框中

USE_HT32_DRIVER, USE_HT32F52352_SK, USE_HT32F52342_52, USE_MEM_HT32F52352

此時先按確定 OK ,回到工程目錄添加相關的頭文件

在 \library\CMSIS 中複製 Include 文件夾到我們工程目錄下的 Code 文件夾中
在 \library\HT32_USBD_Library\inc 中複製 ht32_usbd_core.h 到 工程目錄下的 Code 文件夾中
在 \utilities 中複製 HT32_Board 文件夾到工程目錄下的 Config 文件夾中
在 \utilities 中複製 ht32_board.h 文件、common 文件夾到工程目錄下的 Utilities 文件夾中

然後重新進入魔術棒、C/C++ 一欄,在 Include Paths 欄裏添加庫文件的搜索路徑,這樣就可以屏蔽掉默認的搜索路徑。但當編譯器在我們指定的路徑下 搜索不到的話還是會回到標準目錄去搜索,就像有些 ANSIC C 的庫文件,如 stdin.h 、stdio.h

在這裏插入圖片描述
④ 在 Asm 一欄的宏定義 Define 的輸入框裏填入以下內容

USE_HT32_CHIP=4

在這裏插入圖片描述
⑤ 在 Debug 一欄按照下面圖片進行設置
在這裏插入圖片描述


此時,按 OK 保存即可,然後去 main.c 中先寫入空函數,然後編譯整個工程項目

#include "ht32.h"

int main(void)
{
	while(1)
	{
		
	}
	return 0;
}

直到編譯成功,如有錯誤說在 ebi_lcd.o 和 spi_lcd.o 重複定義了什麼什麼的,就去工程項目下的 \utilities 刪除 ebi_lcd.c、spi_lcd.c、和 i2c_eeprom.c,注意,此時該文件夾下的 commom文件夾裏仍有這三個文件,只不過需要你去工程裏重新 add 它們進來


好了,現在已經完成大部分工作了,接着我們去編寫點亮一個 LED 燈的程序,先從原理圖找到板載 LED 的引腳 (PC15)

在這裏插入圖片描述
我習慣將需要的功能寫到某個文件夾裏,比如在工程目錄下新建一個 Hardware 文件夾,接着在裏面再新建一個 LED 的文件夾用來存放 代碼文件

在這裏插入圖片描述
同樣去到 mdk 裏,新建一個文件組 Hardware 並分別 new 一個 led.c 和 led.h 的文件,保存到剛新建的 LED 目錄下

在這裏插入圖片描述
在這裏插入圖片描述
接着雙擊 Hardware 文件組,將 led.c 文件 add 進來,同時在魔術棒裏的 C/C++ 一欄的 include path 裏將 led.h 包含進來

在這裏插入圖片描述
在這裏插入圖片描述
在 led.h 中編寫以下代碼

#ifndef __LED_H_
#define __LED_H_

#include "ht32f5xxxx_ckcu.h" //時鐘相關
#include "ht32f5xxxx_gpio.h" //GPIO相關

//函數聲明
void led_init(void);
void led_on(void);
void led_off(void);

#endif


然後在 led.c 中編寫以下代碼


#include "led.h"

void led_init(void) //初始化 GPIO
{
	CKCU_PeripClockConfig_TypeDef LEDClock = {{ 0 }};
	LEDClock.Bit.PC = 1; //使能PC
	CKCU_PeripClockConfig(LEDClock, ENABLE); //一定要先使能時鐘,再配置下面的
	GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_15, GPIO_DIR_OUT); //設置PC15爲輸出
	led_off();
}

void led_on(void)
{
   GPIO_WriteOutBits(HT_GPIOC, GPIO_PIN_15, RESET);
}

void led_off(void)
{
   GPIO_WriteOutBits(HT_GPIOC, GPIO_PIN_15, SET);
}

最後在 main.c 中編寫以下代碼


#include "ht32.h"
#include "led.h"

static void delay(u32 nCount)
{
  vu32 i;

  for (i = 0; i < 10000 * nCount; i++)
  {
  }
}

int main(void)
{
	led_init();
	
	while(1)
	{
		led_on();
		delay(500); //軟件延遲,不準確
		led_off();
		delay(500); 
	}
	
	return 0;
}

知直到編譯成功,將板子接上,在 MDK 裏按那個 load 即可將代碼燒錄進單片機,按復位鍵之後即可觀察到 led 閃爍了

在這裏插入圖片描述
如果需要燒錄進去自動復位並運行新代碼,根據以下的設置即可

在這裏插入圖片描述




工程鏈接:鏈接: https://pan.baidu.com/s/1cQ4KxPb63auMp-KS-RJhLg 提取碼: 65aw



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章