Hello world,
OS: Window 7 IDE: Keil 5 and STM32CUBEMX MCU: STM32F303CB Goal: Use PA1 as GPIO output to blink LED
Keil throws this error when build blink code:
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin' Rebuild target 'STCubeGenerated' assembling startup_stm32f303xc.s... compiling main.c... ../Src/main.c(82): error: #5: cannot open source input file "stm32.h": No such file or directory #include "stm32.h" ../Src/main.c: 0 warnings, 1 error
Question: Is my "stm32.h" in the correct folder? Here's the current path Keil 5 added to project
Project:STCubeGenerated->STCubeGenertated->Application/.User->stm32fxx_hal_msp.c->stm32.h
Here main.c:
#include "main.h" #include "stm32f3xx_hal.h"
//*****************************************************************************
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------------------------*/
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/** * @brief The application entry point. * * @retval None */ /* USER CODE BEGIN 1 */ /* USER CODE BEGIN Includes */ //***************************************************************************** //! Blink onboard LED on STM32F303BC ARM dev ESC board //! \file main.c //! \6/28/18 //! \John Gonsalves
#include "stm32.h" void delay(); //Fun Declared
int main(void) {
void main() { while(1) { P1 = 0x00; //LED off delay(); P1 = 0xff: //LED on delay(); } }
void delay() //Fun Defined { unsigned int a; for (a=0;a<1000;a++); }
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */ SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
} /* USER CODE END 3 */
}
/** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct;
/**Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }
/**Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }
/**Configure the Systick interrupt time */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
/**Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); }
/** Configure pins as * Analog * Input * Output * EVENT_OUT * EXTI */ static void MX_GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */ __HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_13, GPIO_PIN_RESET);
/*Configure GPIO pins : PA1 PA13 */ GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
/** * @brief This function is executed in case of error occurrence. * @param file: The file name as string. * @param line: The line in file as a number. * @retval None */ void _Error_Handler(char *file, int line) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ while(1) { } /* USER CODE END Error_Handler_Debug */ }
#ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */
/** * @} */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
It is not an issue with the source. You want to make sure the Include Paths under the C/C++ options tab enumerate the places where the include files might resided vs the location of the project file.
..;../Src;../Inc;
Thank you for the feedback Westonsupermare Pier. I don't quite follow. Does the .h file get linked through this option C++ window in Keil 5? If you or another helpful person could be more specific it would be helpful. Warm Regard, John
Here is the path I used so far to include the header file "stm32.h"(goal)in list of dependencies:
Keil 5 -> Project -> Options for Target 'STCubeGenerated"... -> C/C++ -> Include Paths ../Inc;../Drivers/STM32F3xx_HAL_Driver/Inc;../Drivers/STM32F3xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F3xx/Include;../Drivers/CMSIS/Include; #incluide<stm32.h>
In bold is my attempt to add .h to path
Here is the error thrown:
../Src/main.c(82): error: #5: cannot open source input file "stm32.h": No such file or directory #include "stm32.h" ../Src/main.c: 0 warnings, 1 error compiling stm32f3xx_it.c...
Please do chime in with any error found in syntax or path.
Thanks again, John
Update: Include 'stm32.h" typo corrected with same results.