Поиск
Показаны результаты для тегов 'stm32f4discovery'.
-
Все привет! Изучаю программирование ARM-контроллеров, в частности STM32. Решил пойти следующим путем: STM32F4-DISCOVERY + ARM-NONE-EABI-GCC + собственный Makefile Выбор пал на GNU дабы использовать не коммерческие САПРы Собственный Makefile позволяет контроллировать этапы сборки. Собрал простой проект: инициализация системы (HAL_init и тактирование), ну и помыргать светодиодами. Проект собирается без ошибок, загорается светодиод, но такое впечатление, что когда доходит до цикла моргания светодиодами - виснет. И я заступорился - куда копать... Привожу проект полностью Подозрения падают на инициализацию тактирования, а также не неверный старт-ап или скрипт сборки... Может, местные Гуру подскажут что-нить дельное?) Так же отдельно приведу код main.c чтобы не качать полностью архив из-за одного файла: #include "stm32f4xx.h" #include "stm32f4xx_hal.h" static void GPIO_init(void); static void SystemClock_Config(void); static void Error_Handler(void); int main(void) { //////////////////////////////////////////////////////////////////////////// //Libraries initialization - Инициализация библиотек HAL_Init(); //GPIO initialization - Инициализация портов ввода/вывода GPIO_init(); //Clock initialiaztion - Инициализация системы тактирования SystemClock_Config(); long cnt = 0; while(1) { if (cnt == 100) {cnt = 0;} else {cnt = cnt + 1;} if (cnt <= 50) HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET); else HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET); /* HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET); HAL_Delay(1000); */ } } static void GPIO_init(void) { /////////////////////////////////////////////////////////////////////////// GPIO_InitTypeDef GPIO_InitStruct; /* Enable the GPIO_LED Clock */ __GPIOD_CLK_ENABLE(); /* Configure the GPIO_LED pin */ GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_15|GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET); //HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET); //HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET); } static void SystemClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); //////////////////////////////////////////////////////////////////////////// //Set External High-speed oscillator type - Установка типа генератора - у нас имеется внешний кварц 8МГц RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; //SysClk = 8(HSE) / PLLM / RCC_PLLP_DIV2 * PLLN = 168 MHz RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } //////////////////////////////////////////////////////////////////////////// RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4; if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); } HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); } static void Error_Handler(void) { /* Turn LED5 on */ HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET); while(1) { } } void _exit(int i) { while (1); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET); } MyTestARM5.rar