极海APM32E103VET6测评之工程建立(Keil)
[复制链接]
本帖最后由 Zachary_yo 于 2022-9-12 22:12 编辑
首先,当我收到开发板时发现板载资源相对较少,但又想到是“MINI Board"又觉得情有可原。当然,这并不影响我测评这块开发板,I2C、SPI、485等我都将以飞线到别的板子上来测试。本贴主要实现APM32E103VET6这款芯片在Keil环境下的工程建立,最终以实现LED灯以10Hz的频率(高低点评间隔100mS)闪烁。程序主要包括systick精确延时、GPIO外设使用。
1、首先在文件夹工程文件夹内创建如下文件夹,如下图所示;
2、将官方SDK中的相关文件拷贝到自己新建的工程文件夹的Libraries中,如下图所示;
3、在Bsp文件夹中新建两个文件夹分别为inc和src,如下图所示;
4、在keil主界面中选择 Project->New uVision Project创建新的工程,并将工程文件保存在自建工程的Project文件夹中,随后在弹出页面中选择APM32E103VET6芯片,并点击OK,如下图所示;
5、点击工程项目管理按钮,并在弹出界面中建立相关虚拟文件夹,如下图所示;
6、在建立的虚拟文件夹中添加相关文件,添加后,如下图所示;
7、上图中部分文件除bsp_Gpio.c、delay.c、mycrc.c、userlib.c外,都来自官方SDK包中,添加完文件后,需要点击Keil的魔术棒工具,找到C/C++,添加头文件路径;如下图所示;
8、至此,编译工程,会报大量错误,原因是没有包含相关头文件,因此我们仿照STM32,建立一个apm32e103_conf.h文件,来包含芯片所需的头文件,内容如下;
9、至此,点击编译全部通过且无错误,工程建立完毕。过程如有不详,请见谅,请参考上传的工程文件。
10、以下是systick精确定时的代码;
/**
************************************* Copyright ******************************
*
* (C) Copyright 2022,Zachary ,HPU, China.
* All Rights Reserved
*
* FileName : delay.c
* Version : v1.0
* Author : Zachary
* Date : 2022-09-13
* Description: This is the first edition on APM32E103VET6
---Zachary,in Zhejiang Hanpu.
******************************************************************************
*/
/* ---Includes----------------------------------------------------------- */
#include "main.h"
/* --- Typedef -----------------------------------------------------------*/
/* --- Define ------------------------------------------------------------*/
/* --- Macro -------------------------------------------------------------*/
/* --- Variables ---------------------------------------------------------*/
static uint16_t fac_us;
/* --- Functions ---------------------------------------------------------*/
/*------------------------------------------------------------------------*/
/**************************************************************
* @name delay_init
* @brief
* @param SYSCLK: [输入/出]
* @retval
* @author Zachary
* @Data 2022-01-29
**************************************************************/
void delay_init( uint16_t SYSCLK )
{
SysTick_ConfigCLKSource( SYSTICK_CLK_SOURCE_HCLK );
SysTick_Config( SystemCoreClock / 1000 );
fac_us = SYSCLK;
}
/**************************************************************
* @Name delay_us
* @brief
* @param nus: [输入/出]
* @retval
* @author Zachary
* @Data 2022-01-29
**************************************************************/
void delay_us( uint32_t nus )
{
uint32_t ticks; /* 滴答次数 */
uint32_t t_now,t_old; /* 当前SYSTICK->VAL/上一次的SYSTICK->VAL */
uint32_t tcnt = 0;
ticks = fac_us*nus; /* 计算共需要多少次滴答 */
t_old = SysTick->VAL; /* 获取计数值 */
while(1)
{
t_now = SysTick->VAL;
if(t_now != t_old)
{
if(t_now < t_old) {
tcnt = tcnt + t_old - t_now;
}
else {
tcnt = tcnt + SysTick->LOAD - t_now + t_old;
}
t_old = t_now;
if(tcnt>=ticks) break;
}
}
}
/**************************************************************
* @Name delay_ms
* @brief
* @param nms: [输入/出]
* @retval
* @author Zachary
* @Data 2022-01-29
**************************************************************/
void delay_ms( uint32_t nms )
{
for( ; nms > 0; nms-- )
delay_us( 1000 );
}
11、以下是GPIO LED灯代码;
/**
************************************* Copyright ******************************
* (C) Copyright 2022,Zachray,HPU, China.
* All Rights Reserved
*
* FileName : bsp_Usart.h
* Version : v1.0
* Author : Zachary
* Date : 2022-09-13
* Description: This is the first edition on APM32E103VET6
---Zachary,in Zhejiang Hanpu.
******************************************************************************
*/
#ifndef __BSP_GPIO_H_
#define __BSP_GPIO_H_
/* Includes --------------------------------------------------------------*/
#include "main.h"
/* --- Define ------------------------------------------------------------*/
#define LED1_PIN GPIO_PIN_8
#define LED1_PORT GPIOB
#define LED1_PORT_CLK_ENABLE() RCM_EnableAPB2PeriphClock( RCM_APB2_PERIPH_GPIOB );
#define LED2_PIN GPIO_PIN_9
#define LED2_PORT GPIOB
#define LED2_PORT_CLK_ENABLE() RCM_EnableAPB2PeriphClock( RCM_APB2_PERIPH_GPIOB );
#define KEY1_PIN GPIO_PIN_0
#define KEY1_PORT GPIOA
#define KEY1_PORT_CLK_ENABLE() RCM_EnableAPB2PeriphClock( RCM_APB2_PERIPH_GPIOA );
#define KEY2_PIN GPIO_PIN_1
#define KEY2_PORT GPIOA
#define KEY2_PORT_CLK_ENABLE() RCM_EnableAPB2PeriphClock( RCM_APB2_PERIPH_GPIOA );
/* --- Typedef -----------------------------------------------------------*/
/* --- Variables ---------------------------------------------------------*/
/* --- Functions ---------------------------------------------------------*/
void bsp_Gpio_Init( void );
/*------------------------------------------------------------------------*/
#endif /* __BSP_GPIO_H_ */
/**************************************************************
* @Name bsp_Gpio_Init
* @brief
* @param None
* @retval
* @author Zachary
* @Data 2022-01-29
**************************************************************/
void bsp_Gpio_Init( void )
{
GPIO_Config_T s_GPIO_InitStruct;
/* ---Config the Clock of the Gpios--- */
LED1_PORT_CLK_ENABLE();
LED2_PORT_CLK_ENABLE();
KEY1_PORT_CLK_ENABLE();
KEY2_PORT_CLK_ENABLE();
/* ---Config GPIOs' Output Status--- */
GPIO_SetBits( LED1_PORT, LED1_PIN );
GPIO_SetBits( LED2_PORT, LED2_PIN );
/* ---Config Led1 pin Parameters--- */
s_GPIO_InitStruct.pin = LED1_PIN;
s_GPIO_InitStruct.mode = GPIO_MODE_OUT_PP;
s_GPIO_InitStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config( LED1_PORT, &s_GPIO_InitStruct );
/* ---Config Led2 pin Parameters--- */
s_GPIO_InitStruct.pin = LED2_PIN;
s_GPIO_InitStruct.mode = GPIO_MODE_OUT_PP;
s_GPIO_InitStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config( LED2_PORT, &s_GPIO_InitStruct );
/* ---Config Key1 pin Parameters--- */
s_GPIO_InitStruct.pin = KEY1_PIN;
s_GPIO_InitStruct.mode = GPIO_MODE_IN_PD;
GPIO_Config( KEY1_PORT, &s_GPIO_InitStruct );
/* ---Config Key2 pin Parameters--- */
s_GPIO_InitStruct.pin = KEY2_PIN;
s_GPIO_InitStruct.mode = GPIO_MODE_IN_PD;
GPIO_Config( KEY2_PORT, &s_GPIO_InitStruct );
}
12、主程序代码:
/**
************************************* Copyright ******************************
*
* (C) Copyright 2022,Zachary ,HPU, China.
* All Rights Reserved
*
* FileName : main.c
* Version : v1.0
* Author : Zachary
* Date : 2022-09-13
* Description: This is the first edition on APM32E103VET6
---Zachary,in Zhejiang Hanpu.
******************************************************************************
*/
/* Includes --------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include "main.h"
#include "bsp_Gpio.h"
/* --- Typedef -----------------------------------------------------------*/
/* --- Define ------------------------------------------------------------*/
/* --- Macro -------------------------------------------------------------*/
/* --- Variables ---------------------------------------------------------*/
/* --- Functions ---------------------------------------------------------*/
static void SysInit( void );
/*------------------------------------------------------------------------*/
/**************************************************************
* @Name main
* @brief
* @param None
* @retval
* @author Zachary
* @Data 2022-09-13
**************************************************************/
int main( void )
{
SysInit();
while( 1 )
{
GPIO_ResetBits( LED1_PORT, LED1_PIN );
GPIO_ResetBits( LED2_PORT, LED2_PIN );
delay_ms( 100 );
GPIO_SetBits( LED1_PORT, LED1_PIN );
GPIO_SetBits( LED2_PORT, LED2_PIN );
delay_ms( 100 );
}
}
/**************************************************************
* @Name SysInit
* @brief
* @param None
* @retval
* @author Zachary
* @Data 2022-09-13
**************************************************************/
static void SysInit( void )
{
delay_init( 120 );
bsp_Gpio_Init();
}
|