YDOOK:STM32 F1: 基于HAL固件库 新建工程模板2

YDOOK:STM32 F1: 基于HAL固件库 新建工程模板2

© YDOOK JY Lin


文章目录


系列文章:

YDOOK:STM32 F1: 基于HAL固件库 新建工程模板1


1. 完成了项目工程模板的HAL库导入,还需要在 MDK5 中进行对应的项目文件导入才能生效:

1. 右键>>点击:

YDOOK
YDOOK


2. 双击修改名称:

YDOOK

删除中间栏的:Source Group 1

YDOOK

按照之前新建的文件夹名称新建组名:

YDOOK


2. 然后按照下面列表图示方式导入:

USER 目录:根目录下全部 .c 文件导入:

YDOOK

SYSTEM 目录:文件夹下 .c文件 分别导入:

YDOOK

CODE 目录:全部头文件导入:

YDOOK

HALLIB 目录:根目录下全部 .c 文件导入:

YDOOK


3. 点击下图重新编译按钮,进行完整编译:

YDOOK


4. 出现错误:

main.h(26): error:  #5: cannot open source input file "stm3210e_eval.h": No such file or directory
  #include "stm3210e_eval.h"
stm32f1xx_hal_msp.c: 0 warnings, 1 error

错误分析:

main.h 中引入了: #include "stm3210e_eval.h" :但是实际的项目目录下却没有改头文件!

错误解决:

1. 方法一:在: main.h 文件的第 26 行中注释掉改引入:

YDOOK

2. 方法二:将 STMCubeF1 目录 \STM32CubeF1-master\STM32CubeF1-master\Drivers\BSP\STM3210E_EVAL 下面的 stm3210e_eval.h 文件:

YDOOK

复制到:新建的 USER目录下:

YDOOK


5. 点击下图重新编译按钮,进行完整编译:

YDOOK


6. 出现错误:

linking...
..\OBJ\Template.axf: Error: L6200E: Symbol HAL_MspDeInit multiply defined (by stm32f1xx_hal_msp_template.o and stm32f1xx_hal_msp.o).
..\OBJ\Template.axf: Error: L6200E: Symbol HAL_MspInit multiply defined (by stm32f1xx_hal_msp_template.o and stm32f1xx_hal_msp.o).
..\OBJ\Template.axf: Error: L6200E: Symbol HAL_InitTick multiply defined (by stm32f1xx_hal_timebase_tim_template.o and stm32f1xx_hal_timebase_rtc_alarm_template.o).
..\OBJ\Template.axf: Error: L6200E: Symbol HAL_ResumeTick multiply defined (by stm32f1xx_hal_timebase_tim_template.o and stm32f1xx_hal_timebase_rtc_alarm_template.o).
..\OBJ\Template.axf: Error: L6200E: Symbol HAL_SuspendTick multiply defined (by stm32f1xx_hal_timebase_tim_template.o and stm32f1xx_hal_timebase_rtc_alarm_template.o).
Not enough information to list image symbols.

错误分析:下面的宏标识重复定义:

HAL_MspDeInit

HAL_MspInit

HAL_InitTick

HAL_ResumeTick

HAL_SuspendTick

错误解决:

1. 注释掉:stm32f1xx_hal_msp_template.c :中的:HAL_MspDeInit 与 HAL_MspInit :

YDOOK

/**
  ******************************************************************************
  * @file    stm32f1xx_hal_msp_template.c
  * @author  MCD Application Team
  * @brief   HAL BSP module.
  *          This file template is located in the HAL folder and should be copied
  *          to the user folder.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"

/** @addtogroup STM32F1xx_HAL_Driver
  * @{
  */

/** @defgroup HAL_MSP HAL_MSP
  * @brief HAL MSP module.
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/** @defgroup HAL_MSP_Exported_Functions HAL MSP Exported Functions
  * @{
  */

/**
  * @brief  Initializes the Global MSP.
  * @retval None
  */
//void HAL_MspInit(void)
//{

//}

/**
  * @brief  DeInitializes the Global MSP.
  * @retval None
  */
//void HAL_MspDeInit(void)
//{

//}

/**
  * @brief  Initializes the PPP MSP.
  * @retval None
  */
void HAL_PPP_MspInit(void)
{

}

/**
  * @brief  DeInitializes the PPP MSP.
  * @retval None
  */
void HAL_PPP_MspDeInit(void)
{

}

/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


2. 注释掉:stm32f1xx_hal_timebase_tim_template.c :中的:HAL_InitTick, HAL_ResumeTick 与 HAL_SuspendTick :

YDOOK

/**
  ******************************************************************************
  * @file    stm32f1xx_hal_timebase_tim_template.c
  * @author  MCD Application Team
  * @brief   HAL time base based on the hardware TIM Template.
  *
  *          This file overrides the native HAL time base functions (defined as weak)
  *          the TIM time base:
  *           + Intializes the TIM peripheral generate a Period elapsed Event each 1ms
  *           + HAL_IncTick is called inside HAL_TIM_PeriodElapsedCallback ie each 1ms
  *
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"

/** @addtogroup STM32F1xx_HAL_Driver
  * @{
  */

/** @addtogroup HAL_TimeBase_TIM
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef        TimHandle;
/* Private function prototypes -----------------------------------------------*/
void TIM2_IRQHandler(void);
/* Private functions ---------------------------------------------------------*/

/**
  * @brief  This function configures the TIM2 as a time base source.
  *         The time source is configured to have 1ms time base with a dedicated
  *         Tick interrupt priority.
  * @note   This function is called  automatically at the beginning of program after
  *         reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
  * @param  TickPriority Tick interrupt priority.
  * @retval HAL status
  */
//HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
//{
//  RCC_ClkInitTypeDef    clkconfig;
//  uint32_t              uwTimclock, uwAPB1Prescaler = 0U;
//  uint32_t              uwPrescalerValue = 0U;
//  uint32_t              pFLatency;
//  HAL_StatusTypeDef     status = HAL_OK;


//  /* Enable TIM2 clock */
//  __HAL_RCC_TIM2_CLK_ENABLE();

//  /* Get clock configuration */
//  HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);

//  /* Get APB1 prescaler */
//  uwAPB1Prescaler = clkconfig.APB1CLKDivider;

//  /* Compute TIM2 clock */
//  if (uwAPB1Prescaler == RCC_HCLK_DIV1)
//  {
//    uwTimclock = HAL_RCC_GetPCLK1Freq();
//  }
//  else
//  {
//    uwTimclock = 2 * HAL_RCC_GetPCLK1Freq();
//  }

//  /* Compute the prescaler value to have TIM2 counter clock equal to 1MHz */
//  uwPrescalerValue = (uint32_t)((uwTimclock / 1000000U) - 1U);

//  /* Initialize TIM2 */
//  TimHandle.Instance = TIM2;

//  /* Initialize TIMx peripheral as follow:
//  + Period = [(TIM2CLK/1000) - 1]. to have a (1/1000) s time base.
//  + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
//  + ClockDivision = 0
//  + Counter direction = Up
//  */
//  TimHandle.Init.Period = (1000000U / 1000U) - 1U;
//  TimHandle.Init.Prescaler = uwPrescalerValue;
//  TimHandle.Init.ClockDivision = 0U;
//  TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
//  TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
//  status = HAL_TIM_Base_Init(&TimHandle);
//  if (status == HAL_OK)
//  {
//    /* Start the TIM time Base generation in interrupt mode */
//    status = HAL_TIM_Base_Start_IT(&TimHandle);
//    if (status == HAL_OK)
//    {
//      /* Enable the TIM2 global Interrupt */
//      HAL_NVIC_EnableIRQ(TIM2_IRQn);

//      if (TickPriority < (1UL << __NVIC_PRIO_BITS))
//      {
//        /*Configure the TIM2 IRQ priority */
//        HAL_NVIC_SetPriority(TIM2_IRQn, TickPriority ,0); 
//        uwTickPrio = TickPriority;
//      }
//      else
//      {
//        status = HAL_ERROR;
//      }
//    }
//  }

//  /* Return function status */
//  return status;
//}

/**
  * @brief  Suspend Tick increment.
  * @note   Disable the tick increment by disabling TIM2 update interrupt.
  * @retval None
  */
//void HAL_SuspendTick(void)
//{
//  /* Disable TIM2 update Interrupt */
//  __HAL_TIM_DISABLE_IT(&TimHandle, TIM_IT_UPDATE);
//}

/**
  * @brief  Resume Tick increment.
  * @note   Enable the tick increment by Enabling TIM2 update interrupt.
  * @retval None
  */
//void HAL_ResumeTick(void)
//{
//  /* Enable TIM2 Update interrupt */
//  __HAL_TIM_ENABLE_IT(&TimHandle, TIM_IT_UPDATE);
//}

/**
  * @brief  Period elapsed callback in non blocking mode
  * @note   This function is called  when TIM2 interrupt took place, inside
  * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  * a global variable "uwTick" used as application time base.
  * @param  htim TIM handle
  * @retval None
  */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  HAL_IncTick();
}

/**
  * @brief  This function handles TIM interrupt request.
  * @retval None
  */
void TIM2_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&TimHandle);
}

/**
  * @}
  */

/**
  * @}
  */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


7. 点击下图重新编译按钮,进行完整编译:

YDOOK


8. 编译成功:0错误,0警告!:

YDOOK
YDOOK

*** Using Compiler 'V5.06 update 4 (build 422)', folder: 'D:\MDK5\ARM\ARMCC\Bin'
Rebuild target 'Template'
assembling startup_stm32f101xe.s...
compiling stm32f1xx_hal_dac_ex.c...
compiling system_stm32f1xx.c...
compiling stm32f1xx_hal_dma.c...
compiling sys.c...
compiling main.c...
compiling stm32f1xx_hal_cec.c...
compiling stm32f1xx_hal.c...
compiling stm32f1xx_hal_cortex.c...
compiling stm32f1xx_hal_crc.c...
compiling stm32f1xx_it.c...
compiling stm32f1xx_hal_dac.c...
compiling stm32f1xx_hal_adc_ex.c...
compiling usart.c...
compiling stm32f1xx_hal_adc.c...
compiling stm32f1xx_hal_msp.c...
compiling stm32f1xx_hal_exti.c...
compiling stm32f1xx_hal_eth.c...
compiling stm32f1xx_hal_flash_ex.c...
compiling stm32f1xx_hal_flash.c...
compiling delay.c...
compiling stm32f1xx_hal_can.c...
compiling stm32f1xx_hal_gpio.c...
compiling stm32f1xx_hal_gpio_ex.c...
compiling stm32f1xx_hal_hcd.c...
compiling stm32f1xx_hal_irda.c...
compiling stm32f1xx_hal_rcc_ex.c...
compiling stm32f1xx_hal_pwr.c...
compiling stm32f1xx_hal_rtc_ex.c...
compiling stm32f1xx_hal_mmc.c...
compiling stm32f1xx_hal_nor.c...
compiling stm32f1xx_hal_rtc.c...
compiling stm32f1xx_hal_nand.c...
compiling stm32f1xx_hal_smartcard.c...
compiling stm32f1xx_hal_pcd_ex.c...
compiling stm32f1xx_hal_i2s.c...
compiling stm32f1xx_hal_pccard.c...
compiling stm32f1xx_ll_adc.c...
compiling stm32f1xx_hal_i2c.c...
compiling stm32f1xx_hal_msp_template.c...
compiling stm32f1xx_hal_rcc.c...
compiling stm32f1xx_ll_crc.c...
compiling stm32f1xx_hal_iwdg.c...
compiling stm32f1xx_hal_sd.c...
compiling stm32f1xx_hal_pcd.c...
compiling stm32f1xx_ll_dma.c...
compiling stm32f1xx_ll_pwr.c...
compiling stm32f1xx_ll_gpio.c...
compiling stm32f1xx_ll_rtc.c...
compiling stm32f1xx_hal_spi.c...
compiling stm32f1xx_ll_exti.c...
compiling stm32f1xx_ll_rcc.c...
compiling stm32f1xx_ll_dac.c...
compiling stm32f1xx_ll_i2c.c...
compiling stm32f1xx_ll_usart.c...
compiling stm32f1xx_ll_spi.c...
compiling stm32f1xx_ll_tim.c...
compiling stm32f1xx_hal_sram.c...
compiling stm32f1xx_hal_timebase_tim_template.c...
compiling stm32f1xx_hal_timebase_rtc_alarm_template.c...
compiling stm32f1xx_hal_wwdg.c...
compiling stm32f1xx_hal_tim_ex.c...
compiling stm32f1xx_ll_sdmmc.c...
compiling stm32f1xx_ll_utils.c...
compiling stm32f1xx_hal_uart.c...
compiling stm32f1xx_hal_usart.c...
compiling stm32f1xx_hal_tim.c...
compiling stm32f1xx_ll_usb.c...
compiling stm32f1xx_ll_fsmc.c...
linking...
Program Size: Code=6172 RO-data=360 RW-data=24 ZI-data=1992  
FromELF: creating hex file...
"..\OBJ\Template.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:16



YDOOK CSDN认证博客专家 算法 人工智能
欢迎访问个人网站: www.ydook.com
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页