|
|
  |
Помогите начинающему STM32+KEIL5+std peripheral library, Ошибка компиляци с STM32F10X_HD |
|
|
|
Nov 4 2015, 13:06
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 14-12-05
Пользователь №: 12 204

|
Доброго времения суток. Долгое время пытался подружится с STM32 после AVR и вот дошли руки и имеем первые грабли. Суть проблемы такова. Пытаюсь прощупать архитектуру на камне STM32F103RET6. Среда для программирования KEIL v5+GCC+std peripheral library. С настройкой портов всё прошло нормально. После этого попытался разобратся с конфигурированием тактирования. Вот тут и начались проблемы.
Вот код инициализации тактирвоания (взят на просторах интернета как пример):
1. RCC_DeInit(); // сброс настроек тактирования 2. RCC_HSICmd(DISABLE); // выключение внутреннего генератора 3. RCC_HSEConfig(RCC_HSE_ON); // включение внешнего генератора 4. RCC_PREDIV1Config(RCC_PREDIV1_Source_HSE, RCC_PREDIV1_Div1);// Предделитель PREDIV1: HSE перед множителем PLLMUL 5. RCC_PLLConfig(RCC_PLLSource_PREDIV1 ,RCC_PLLMul_3); // тактирование HSE с PREDIV1 8/1*3 = 24МГЦ 6. RCC_PLLCmd(ENABLE); // Включаем множитель PLL 7. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // Тактирование системной шины от множителя PLLMUL
После компиляции имеем ошибки в строках 4 и 5. Жалуется что это всё не задекларировано. error: use of undeclared identifier `RCC_PLLSource_PREDIV1`
Полез рыться в stm32f10x_rcc.c и stm32f10x_rcc.h и заметил что для контроллеров STM32F10X_HD все функции закрыты, а открыты для Value Line контроллеров.
Например из stm32f10x_rcc.h:
#ifdef STM32F10X_CL /* PREDIV1 clock source (for STM32 connectivity line devices) */ #define RCC_PREDIV1_Source_HSE ((uint32_t)0x00000000) #define RCC_PREDIV1_Source_PLL2 ((uint32_t)0x00010000)
#define IS_RCC_PREDIV1_SOURCE(SOURCE) (((SOURCE) == RCC_PREDIV1_Source_HSE) || \ ((SOURCE) == RCC_PREDIV1_Source_PLL2)) #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) /* PREDIV1 clock source (for STM32 Value line devices) */ #define RCC_PREDIV1_Source_HSE ((uint32_t)0x00000000)
#define IS_RCC_PREDIV1_SOURCE(SOURCE) (((SOURCE) == RCC_PREDIV1_Source_HSE)) #endif
Попробовал, для подтверждения, поменять с свойствах проекта контроллер на любой из серии Value Line и всё отлично скомпелировалось.
Уже не знаю что и делать, потому обращаюсь за помощью.
Сообщение отредактировал sabrat - Nov 4 2015, 13:11
|
|
|
|
|
Nov 4 2015, 13:36
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 14-12-05
Пользователь №: 12 204

|
C/C++ Define:
USE_STDPERIPH_DRIVER
Compiler control string:
-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -I D:\STM32_Projekts\HelloWordMDK5-2015-11-03\HelloWordMDK5\RTE -I D:\STM32_Projekts\HelloWordMDK5-2015-11-03\HelloWordMDK5\RTE\Device\STM32F103RE -I C:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.0.0\Device\Include -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.0.0\Device\StdPeriph_Driver\inc -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.0.0\RTE_Driver -D__UVISION_VERSION="516" -D_RTE_ -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ".\Objects\*.o" --omf_browse ".\Objects\*.crf" --depend ".\Objects\*.d"
|
|
|
|
|
Nov 4 2015, 14:12
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(scifi @ Nov 4 2015, 16:56)  А мне нравится регистры программировать... И мне.  Это для STM32F3xx: CODE void System_init(void) { /* Задать полный доступ к сопроцессору(-ам) CP10, CP11 */ SCB->CPACR = 3UL << 10 * 2 | 3UL << 11 * 2;
/* Задать работу от HSI, включить HSE */ RCC->CR |= RCC_CR_HSION | // HSI clock enable: On RCC_CR_HSEON | // HSE clock enable: On RCC_CR_HSEBYP; // HSE crystal oscillator bypass
RCC->CFGR = RCC_CFGR_SW_0 * 0 | // System clock Switch: HSI RCC_CFGR_HPRE_0 * 0 | // AHB prescaler: SYSCLK not divided RCC_CFGR_PPRE1_0 * 0 | // APB1 prescaler: HCLK not divided RCC_CFGR_PPRE2_0 * 4 | // APB2 prescaler: HCLK / 2 RCC_CFGR_PLLSRC * 1 | // PLL entry clock source: HSE PREDIV1 RCC_CFGR_PLLXTPRE * 0 | // HSE divider for PLL entry: not divided RCC_CFGR_PLLMUL_0 * 7 | // PLL multiplication factor: x 9 (72 MHz) RCC_CFGR_USBPRE * 0 | // USB prescaler: PLL / 1.5 (48 MHz) RCC_CFGR_I2SSRC * 0 | // I2S external clock source selection: System clock RCC_CFGR_MCO_0 * 5 | // Microcontroller Clock Output: HSI RCC_CFGR_PLLNODIV * 0; // PLL is not divided to MCO: divided
/* Запретить и сбросить все запросы прерываний */ RCC->CIR = RCC_CIR_LSIRDYIE * 0 | // LSI Ready Interrupt Enable RCC_CIR_LSERDYIE * 0 | // LSE Ready Interrupt Enable RCC_CIR_HSIRDYIE * 0 | // HSI Ready Interrupt Enable RCC_CIR_HSERDYIE * 0 | // HSE Ready Interrupt Enable RCC_CIR_PLLRDYIE * 0 | // PLL Ready Interrupt Enable RCC_CIR_LSIRDYC * 1 | // LSI Ready Interrupt Clear RCC_CIR_LSERDYC * 1 | // LSE Ready Interrupt Clear RCC_CIR_HSIRDYC * 1 | // HSI Ready Interrupt Clear RCC_CIR_HSERDYC * 1 | // HSE Ready Interrupt Clear RCC_CIR_PLLRDYC * 1 | // PLL Ready Interrupt Clear RCC_CIR_CSSC * 1; // Clock Security System Interrupt Clear
/* Пределитель для PLL (младший бит совпадает с RCC_CFGR_PLLXTPRE) предделитель для АЦП */ RCC->CFGR2 = RCC_CFGR2_PREDIV_0 * 0 | // HSE input to PLL not divided RCC_CFGR2_ADCPRE12_0 * 16 | // ADC12 PLL clock divided by 1 = 72 MHz // RCC_CFGR2_ADCPRE34_0 * 16 | // ADC34 PLL clock divided by 1 = 72 MHz // RCC_CFGR2_ADCPRE12_0 * 0 | // ADC12 clock disabled, can use AHB clock RCC_CFGR2_ADCPRE34_0 * 0; // ADC34 clock disabled, can use AHB clock
/* Пределитель для U(S)ART, I2C, TIM */ RCC->CFGR3 = RCC_CFGR3_USART1SW_0 * 0 | // PCLK selected as USART1 clock source RCC_CFGR3_I2C1SW * 1 | // PCLK selected as I2C1 clock RCC_CFGR3_I2C2SW * 1 | // PCLK clock selected as I2C2 clock RCC_CFGR3_TIM1SW * 0 | // PCLK2 clock RCC_CFGR3_TIM8SW * 0 | // PCLK2 clock RCC_CFGR3_USART2SW_0 * 0 | // PCLK selected as USART2 clock source RCC_CFGR3_USART3SW_0 * 0 | // PCLK selected as USART3 clock source RCC_CFGR3_UART4SW_0 * 0 | // PCLK selected as UART4 clock source RCC_CFGR3_UART5SW_0 * 0; // PCLK selected as UART5 clock source
/* Ждать, пока включится HSE генератор. Включить PLL и защиту от сбоев */ while (!(RCC->CR & RCC_CR_HSERDY)); RCC->CR |= RCC_CR_PLLON | // PLL enable RCC_CR_CSSON; // Clock Security System enable /* Разрешить буфер предвыборки, установить латентность */ FLASH->ACR = FLASH_ACR_LATENCY_0 * 2 | // Two wait states FLASH_ACR_HLFCYA * 0 | // Flash Half Cycle Access Enable FLASH_ACR_PRFTBE * 1; // Prefetch buffer enable
/* Ждать, пока появится готовность PLL */ while (!(RCC->CR & RCC_CR_PLLRDY));
/* Выбрать PLL как источник системной частоты Ждать, пока PLL выберется как источник системной частоты */ RCC->CFGR |= RCC_CFGR_SW_0 * 2; // System clock Switch: HSI -> PLL while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL); /* Выключить внутренний генератор HSI */ // RCC->CR &= ~RCC_CR_HSION; }
|
|
|
|
|
Nov 4 2015, 14:12
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 14-12-05
Пользователь №: 12 204

|
Я на AVR долго на асме сидел и понимаю вас. Всё прозрачно и закономерно, но не читабельно ИМХО. Почему бы на столь нафаршированном камне как STM32F103RE не пользоваться библиотеками? Возможно я в дальнейшем и откажусь от использования библиотек, но вопрос то не решён.
|
|
|
|
|
Nov 4 2015, 16:19
|

Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474

|
Цитата(sabrat @ Nov 4 2015, 20:12)  Я на AVR долго на асме сидел и понимаю вас. Всё прозрачно и закономерно, но не читабельно ИМХО. Почему бы на столь нафаршированном камне как STM32F103RE не пользоваться библиотеками? Возможно я в дальнейшем и откажусь от использования библиотек, но вопрос то не решён. Камень-то нафарширован, да. Сейчас аналогичная ситуация - камень STM32F107VCT6. Пытаюсь запустить Ethernet. HAL... в общем, не взлетает с ним пока что. Либо я что-то делаю не так, но в случайном месте после HAL_Init() вылетает HardFault. Возможно, причина и не там, но пока пишу всё в регистры и не знаю проблем.
|
|
|
|
|
Nov 4 2015, 18:19
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 14-12-05
Пользователь №: 12 204

|
Цитата(Integro @ Nov 4 2015, 19:10)  выкладывайте здесь проект, так быстрей будет Спасибо огромное! Завтра буду на работе - выложу. P.S. Я смотрю SPL уже не актуально. Сейчас HAL в трэнде. Что скажете за это HAl библиотеки?
Сообщение отредактировал sabrat - Nov 4 2015, 18:21
|
|
|
|
|
Nov 5 2015, 07:04
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 14-12-05
Пользователь №: 12 204

|
Цитата(Integro @ Nov 4 2015, 19:10)  выкладывайте здесь проект, так быстрей будет Проект во сложении
|
|
|
|
|
Nov 5 2015, 08:11
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 14-12-05
Пользователь №: 12 204

|
Посыпаю голову пеплом....Большое спасибо!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|