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



猜你喜欢

转载自blog.csdn.net/fengge2018/article/details/105444719