2133|2

36

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

HC32F4A0-Keil环境搭建与点灯 [复制链接]

 

      使用Keil 5进行工程搭建,后续所有测评代码,都将在此工程的基础上进行添加,并且,与测评相关的所有工程都会上传到论坛。

首先需要在EEworld网站(https://bbs.eeworld.com.cn/elecplay/content/5aa6118a#F3)或者官网(http://xhsc.com.cn/Productlist/info.aspx?itemid=1801)下载相关资料。主要有以下几个文件,如下图所示:

      上述几个文件按从上到下顺序,分别为HC32F4A0芯片数据手册、编程手册、开发板原理图资料、驱动库和Keil Pack包。

      准备工作结束,先安装HC32F4A0_IDE_Rev1.0.6.zip中的Keil pack包。然后,新建一个有如下文件夹,里面按我个人喜好,新建了如下内容:

       其中,Bsp文件夹中还有src和inc文件夹,我们后续的驱动代码都将放在这个文件夹中;Doc文件加用于存放ReadMe文件和相应的程序说明文件;Libraies文件夹用于存放驱动库代码,即我们下载的HC32F4A0_DDL_Rev2.0.0.zip中的文件;Project文件夹用于存放工程文件;User用于存放我们的相关业务代码;通讯文件夹中存放串口调试工具。

然后,我们将.\HC32F4A0_DDL_Rev2.0.0\drivers文件夹下的所有文件拷贝到Libraries文件夹中;

        CMSIS文件夹中内容如下:

        User文件夹内容如下,其中hc32f4xx_config.h文件从官方例程中拷贝出来的,其余文件由自己编写。

        下面开始新建工程,创建工程时,选择HC32F4A0SITB,随后打开Keil工程管理工具,创建以下虚拟文件夹,并在这些虚拟文件夹中添加文件。

        工程创建好后,整个目录如图所示,头文件的包含,就不再展开了。

        点击编译,至此,工程创建部分已经结束,写得不是很详细,需要的朋友可以下载后附的工程文件。

        接着时我们的业务代码。首先,查看官方手册,我们知道,这个芯片主频可以达到240MHz,但是,我们创建完后,主频在40MHz。这个我觉得是官方库做的不是很好的地方。一般像STM32F4或者GD的单片机,只需要更改好外部晶振的频率,就可以了,系统时钟的配置,都在system_xx32fxxx.c中写好了,GD的只需要打开对应的宏就可以了。

        但是,华大官方并没有帮我们做好这件事,不过在提供的例程中可以找到对应的配置代码,个人觉得还是集成在system_hc32f4a0.c中比较好。

以下是系统时钟配置代码:

/**************************************************************
  * [url=home.php?mod=space&uid=32621]@name[/url] SetSysClk
  * [url=home.php?mod=space&uid=159083]@brief[/url] 参考自官方工程
  * @param   None
  * @retval
  * [url=home.php?mod=space&uid=1315547]@author[/url] Zachary
  * [url=home.php?mod=space&uid=34591]@data[/url] 2023-02-13
 **************************************************************/
static void bsp_SetSysClk( void )
{
    stc_clock_xtal_init_t stcXtalInit;
    stc_clock_pll_init_t stcPLLHInit;

    LL_PERIPH_WE( LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | \
                  LL_PERIPH_EFM | LL_PERIPH_SRAM );		/* ---解保护相关外设--- */

    /* PCLK0, HCLK  Max 240MHz */
    /* PCLK1, PCLK4 Max 120MHz */
    /* PCLK2, PCLK3 Max 60MHz  */
    /* EX BUS Max 120MHz */
    CLK_SetClockDiv( CLK_BUS_CLK_ALL, \
                     ( CLK_PCLK0_DIV1 | CLK_PCLK1_DIV2 | CLK_PCLK2_DIV4 | \
                       CLK_PCLK3_DIV4 | CLK_PCLK4_DIV2 | CLK_EXCLK_DIV2 | \
                       CLK_HCLK_DIV1 ) );				/* ---外设总线分频--- */

    CLK_XtalStructInit( &stcXtalInit );
    /* Config Xtal and enable Xtal */
    stcXtalInit.u8Mode   = CLK_XTAL_MD_OSC;
    stcXtalInit.u8Drv    = CLK_XTAL_DRV_ULOW;
    stcXtalInit.u8State  = CLK_XTAL_ON;
    stcXtalInit.u8StableTime = CLK_XTAL_STB_2MS;
    CLK_XtalInit( &stcXtalInit );

    CLK_PLLStructInit( &stcPLLHInit );
    /* VCO = (8/1)*120 = 960MHz*/
    stcPLLHInit.u8PLLState = CLK_PLL_ON;
    stcPLLHInit.PLLCFGR = 0UL;
    stcPLLHInit.PLLCFGR_f.PLLM = 1UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLN = 120UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLP = 4UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLQ = 4UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLR = 4UL - 1UL;
    stcPLLHInit.PLLCFGR_f.PLLSRC = CLK_PLL_SRC_XTAL;
    CLK_PLLInit( &stcPLLHInit );

    /* Highspeed SRAM set to 0 Read/Write wait cycle */
    SRAM_SetWaitCycle( SRAM_SRAMH, SRAM_WAIT_CYCLE0, SRAM_WAIT_CYCLE0 );

    /* SRAM1_2_3_4_backup set to 1 Read/Write wait cycle */
    SRAM_SetWaitCycle( ( SRAM_SRAM123 | SRAM_SRAM4 | SRAM_SRAMB ), SRAM_WAIT_CYCLE1, SRAM_WAIT_CYCLE1 );

    /* 0-wait @ 40MHz */
    EFM_SetWaitCycle( EFM_WAIT_CYCLE5 );

    /* 4 cycles for 200 ~ 250MHz */
    GPIO_SetReadWaitCycle( GPIO_RD_WAIT4 );

    CLK_SetSysClockSrc( CLK_SYSCLK_SRC_PLL );

    LL_PERIPH_WP( LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | \
                  LL_PERIPH_EFM | LL_PERIPH_SRAM );		/* ---保护相关外设--- */
}

配置好时钟后,新建全局变量stc_clock_freq_t sysclk,在配置完时钟后,调用CLK_GetClockFreq()函数进行查看系统时钟是否配置正确,如图所示。

在正确配置时钟后,我们进行编写点灯程序。可是查看原理图,发现,竟然没有单独IO口控制的led灯,太狠了。不过查看例程和原理图发现了以下电路:

我们可以通过控制TPS2051的第4引脚,来控制LED11的亮灭,LED10也是同样的道理。

 

下面我们在bsp_Gpio.c和bsp_Gpio.h中写相应的配置代码:

/**************************************************************
  * @Name    bsp_Gpio_Init                                    
  * @brief  
  * @param   None
  * @retval
  * @author  Zachary
  * @Data    2022-02-13
 **************************************************************/
void bsp_Gpio_Init( void )
{
	stc_gpio_init_t Gpio_InitStruct = { 0 };
	
	LL_PERIPH_WE( LL_PERIPH_GPIO );							/* --关闭写GPIO寄存器保护--- */
	
	Gpio_InitStruct.u16PinDir = PIN_DIR_OUT;				/* --方向 输入或输出--- */
	Gpio_InitStruct.u16PinDrv = PIN_HIGH_DRV;				/* --驱动能力--- */
	Gpio_InitStruct.u16PinAttr = PIN_ATTR_DIGITAL;			/* --数字量或模拟量--- */
	Gpio_InitStruct.u16PinOutputType = PIN_OUT_TYPE_CMOS;	/* --正常CMOS电平输出或NMOS开漏输出--- */
//	Gpio_InitStruct.u16PinInputType = PIN_IN_TYPE_SMT;		/* --施密特输入或CMOS输入--- */
	Gpio_InitStruct.u16PinState = PIN_STAT_RST;				/* --初始化后电平状态--- */
	Gpio_InitStruct.u16PullUp = PIN_PU_ON;					/* --上拉输出--- */
	Gpio_InitStruct.u16ExtInt = PIN_EXTINT_OFF;				/* --中断功能不开启--- */
	Gpio_InitStruct.u16Invert = PIN_INVT_OFF;				/* --反向功能不开启--- */
	Gpio_InitStruct.u16Latch = PIN_LATCH_OFF;				/* --输出锁存功能不开启--- */
	
	GPIO_Init( LED11_PORT, LED11_PIN, &Gpio_InitStruct );
	GPIO_Init( LED10_PORT, LED10_PIN, &Gpio_InitStruct );
	
	LL_PERIPH_WP( LL_PERIPH_GPIO );							/* --开启写GPIO寄存器保护--- */
}
/* Includes --------------------------------------------------------------*/
#include "main.h"
/* --- Define ------------------------------------------------------------*/
#define LED11_PIN				GPIO_PIN_09
#define LED11_PORT				GPIO_PORT_C
#define LED11_TOGGLE()			GPIO_TogglePins( LED11_PORT, LED11_PIN );

#define LED10_PIN				GPIO_PIN_11
#define LED10_PORT				GPIO_PORT_B
#define LED10_TOGGLE()			GPIO_TogglePins( LED10_PORT, LED10_PIN );
/* --- Typedef -----------------------------------------------------------*/
/* --- Variables ---------------------------------------------------------*/
/* --- Functions ---------------------------------------------------------*/
void bsp_Gpio_Init( void );
/*------------------------------------------------------------------------*/

接着在主程序中调用相关初始化代码和点灯程序:

/**
  ************************************* Copyright ******************************
  *
  *                 (C) Copyright 2022,Zachary ,HPU, China.
  *                            All Rights Reserved
  *
  * FileName   : main.c
  * Version    : v1.0
  * Author     : Zachary
  * Date       : 2023-02-13
  * Description: This is a template project of HC32F4A0
											---Zachary,in Zhejiang Hanpu.
  ******************************************************************************
 */

/* Includes --------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include "main.h"
#include "bsp_Gpio.h"

/* --- Typedef -----------------------------------------------------------*/
/* --- Define ------------------------------------------------------------*/
/* --- Macro -------------------------------------------------------------*/
/* --- Variables ---------------------------------------------------------*/
stc_clock_freq_t sysclk;
/* --- Functions ---------------------------------------------------------*/
static void SysInit( void );
static void bsp_SetSysClk( void );
/*------------------------------------------------------------------------*/
/**************************************************************
  * @Name    main
  * @brief
  * @param   None
  * @retval
  * @author  Zachary
  * @Data    2022-02-13
 **************************************************************/
int32_t main( void )
{
    SysInit();
    while( 1 )
    {
        LED10_TOGGLE();
        LED11_TOGGLE();
        delay_ms( 500 );
    }
}

/**************************************************************
  * @Name    SysInit
  * @brief
  * @param   None
  * @retval
  * @author  Zachary
  * @Data    2023-02-13
 **************************************************************/
static void SysInit( void )
{
    bsp_SetSysClk();
	CLK_GetClockFreq( &sysclk );
	delay_init( 240 );
    bsp_Gpio_Init();
}

 

最后,我使用的是Jlink下载的程序,keil配置jlink时,找不到芯片时,选择cortex-m4即可。板载的DAP,keil中没法使用,有没有会玩的网友。

以上就是环境搭建和点灯的程序,以下是程序效果视频。

46cd11e3e106cea7fff1705bebd9542c

工程代码 HC32F4A0_Template.7z (1.06 MB, 下载次数: 22)

 

最新回复

谢谢分享!期待后续!   详情 回复 发表于 2023-2-20 09:22
点赞 关注
 
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

讲得好详细

 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

板凳
 

谢谢分享!期待后续!

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表