Solonovatiy 0 10 июля, 2019 Опубликовано 10 июля, 2019 · Жалоба 6 минут назад, Darth Vader сказал: Значит он где-то уже определен. Сделайте поиск по проекту и найдите тот файл. Он пишет, что определен в stmf10x.h если определить после его инклуда. А если ДО, то ворнингов нет и ничего не меняется. Сейчас перепроверил, в HSE_VALUE у меня (после моего дефайна в настройках проекта) лежит 12 000 000. Но startup никак на это не отреагировал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 10 июля, 2019 Опубликовано 10 июля, 2019 · Жалоба 13 minutes ago, Solonovatiy said: Он пишет, что определен в stmf10x.h если определить после его инклуда. А если ДО, то ворнингов нет и ничего не меняется. Логично, так и должно быть. А что должно меняться? Особенно в стартапе. Сделайте поиск по всему проекту и найдите, где этот макрос используется. Вот там и должно что-то меняться при его (пере)определении. Он используется, например, при настройке скорости обмена по UART. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Solonovatiy 0 10 июля, 2019 Опубликовано 10 июля, 2019 · Жалоба 1 минуту назад, Darth Vader сказал: Логично, так и должно быть. А что должно меняться? Особенно в стартапе. Сделайте поиск по всему проекту и найдите, где этот макрос используется. Вот там и должно что-то меняться при его (пере)определении. Он используется, например, при настройке скорости обмена по UART. Если оно объявлено в настройках проекта и потом переназначено, у меня бы был ворнинг. В любом случае, я его в переменную себе вывел и там - 12МГц. HSE_VALUE, а это значит, что через preprocessor symbols в настройках проекта задан верно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Solonovatiy 0 10 июля, 2019 Опубликовано 10 июля, 2019 · Жалоба 5 минут назад, Solonovatiy сказал: Если оно объявлено в настройках проекта и потом переназначено, у меня бы был ворнинг. В любом случае, я его в переменную себе вывел и там - 12МГц. HSE_VALUE, а это значит, что через preprocessor symbols в настройках проекта задан верно. PS а если не объявлять, то будет 8Мгц, что указывает, что HSE_VALUE таки изменяется, но не на что не влияет по какой то причине. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 11 июля, 2019 Опубликовано 11 июля, 2019 · Жалоба 7 hours ago, Solonovatiy said: а если не объявлять, то будет 8Мгц, что указывает, что HSE_VALUE таки изменяется, но не на что не влияет по какой то причине. Расскажите подробно что именно вы делаете в одном и в другом случае. Случай 1 Вы объявляете #define HSE_VALUE 12000000 в Options -> C/C++ -> Preprocessor Symbols ? Честно говоря, сам такого ни разу не делал, правильный синтаксис не знаю. Сейчас попробовал - ругается на неправильное макроопределение. Поправьте меня, как правильно писать в этой строке. Что именно там должно быть записано? Случай 2 Вы его явно прописываете (строка #define HSE_VALUE 12000000 ) в файле stmf10x.h либо до, либо после его определения там. Если после - то у вас предупреждение о переопределении макроса HSE_VALUE. Если до, то предупреждений нет. Но и в том и в другом случае он должен переопределиться на ваше значение (12000000), не важно с предупреждением или без него. Как это обычно делается Для задания таких параметров обычно делают свой h/hpp-файл (называют обычно board.h или device.h), где прописывают параметры железа - частоты кварца, имена для выводов портов и т.п. И этот файл инклудят к .c/.cpp файлам проекта, чтобы там использовать эти макроопределения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Solonovatiy 0 11 июля, 2019 Опубликовано 11 июля, 2019 (изменено) · Жалоба 1 час назад, Darth Vader сказал: Случай 1 HSE_VALUE 12000000 в Options -> C/C++ -> Preprocessor Symbols Он там через = прописывается и без define (HSE_VALUE =12000000), подсмотрел еще в атмель студии и тут вроде тоже прокатывает. 1 час назад, Darth Vader сказал: Случай 2 Вы его явно прописываете (строка #define HSE_VALUE 12000000 ) в файле stmf10x.h либо до, либо после его определения там. Если после - то у вас предупреждение о переопределении макроса HSE_VALUE. Если до, то предупреждений нет. Но и в том и в другом случае он должен переопределиться на ваше значение (12000000), не важно с предупреждением или без него. Да, но от значения HSE_VALUE судя по всему ничего не зависит. 1 час назад, Darth Vader сказал: Как это обычно делается Для задания таких параметров обычно делают свой h/hpp-файл (называют обычно board.h или device.h), где прописывают параметры железа - частоты кварца, имена для выводов портов и т.п. И этот файл инклудят к .c/.cpp файлам проекта, чтобы там использовать эти макроопределения. Да я вот хотел именно встроенные фичи кейла осилить, тут цель всей возни именно в этом, а не запуске учебного проекта. Хотелось понять, что и почему. Ща сидел щелкал по 1му шагу через житаг (потому, что через симулятор у меня ошибка 65, как я понял - нет модели для симуляции). Блин, может у меня кейл кривой сам? Вообще в кратце, что у меня происходит. При добавлении кейловского пака Device->Startup, у меня закидываются 3!!! файла - RTE_Device.h - как я понимаю, ошметок HAL, на него программа во время запуска никогда не попадает, черт знает, зачем он нужен и как запускатся через него. - startup_stm32f10x_md.s - system_stm32f10x.c Вот в последнем я нашел Спойлер В начале #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) /* #define SYSCLK_FREQ_HSE HSE_VALUE */ #define SYSCLK_FREQ_24MHz 1000000 #else /* #define SYSCLK_FREQ_HSE HSE_VALUE */ /* #define SYSCLK_FREQ_24MHz 24000000 */ /* #define SYSCLK_FREQ_36MHz 36000000 */ // #define SYSCLK_FREQ_48MHz 48000000 //#define SYSCLK_FREQ_56MHz 56000000 #define SYSCLK_FREQ_72MHz 72000000 #endif Вот это вот вызывается во время инициализации static void SetSysClock(void) { #ifdef SYSCLK_FREQ_HSE SetSysClockToHSE(); #elif defined SYSCLK_FREQ_24MHz SetSysClockTo24(); #elif defined SYSCLK_FREQ_36MHz SetSysClockTo36(); #elif defined SYSCLK_FREQ_48MHz SetSysClockTo48(); #elif defined SYSCLK_FREQ_56MHz SetSysClockTo56(); #elif defined SYSCLK_FREQ_72MHz SetSysClockTo72(); #endif } А вот кусок одной из таких функций #ifdef STM32F10X_CL /* Configure PLLs ------------------------------------------------------*/ /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); #else /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); Как видно, HSE_VALUE тут просто не учитывается. А учитывается только в SystemCoreClockUpdate(); Которая: This file provides two functions and one global variable to be called from * user application: ...... * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must * be called whenever the core clock is changed * during program execution. ....... * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on * the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file. * When HSE is used as system clock source, directly or through PLL, and you * are using different crystal you have to adapt the HSE value to your own * configuration. Однако, вызов SystemCoreClockUpdate(); из мейна тоже не дал никаких результатов. Просмотрел, что в ней происходит, там мне вполне себе намерено насчитывают SystemClock на 108МГц и радостно заталкивают. Изменено 11 июля, 2019 пользователем Solonovatiy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 11 июля, 2019 Опубликовано 11 июля, 2019 · Жалоба У меня с кейлом были следующие проблемы. Подключал через инклюд локальный файл (из папки проекта), с целью как раз править HSE_VALUE. Но кейл при компиляции находил такой же файл в своих системных папках первым и использовал его. Лечилось перетасовкой путей к инклюдам. Но это было в 4-м Кейле. (Я на 5-й так и не перешел). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Solonovatiy 0 11 июля, 2019 Опубликовано 11 июля, 2019 · Жалоба Только что, Edit2007 сказал: У меня с кейлом были следующие проблемы. Подключал через инклюд локальный файл (из папки проекта), с целью как раз править HSE_VALUE. Но кейл при компиляции находил такой же файл в своих системных папках первым и использовал его. Лечилось перетасовкой путей к инклюдам. Но это было в 4-м Кейле. (Я на 5-й так и не перешел). http://forum.easyelectronics.ru/viewtopic.php?f=35&t=40525&p=605178#p605178 Тут пояснили, нет никакой подстройки инита под HSE_VALUE. Хочешь не стандартный кварц - пиши свой или правь текущий инит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BMM 0 24 апреля, 2021 Опубликовано 24 апреля, 2021 · Жалоба В stm32f10x_conf.h после /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __STM32F10x_CONF_H #define __STM32F10x_CONF_H добавить #ifdef HSE_VALUE #ifndef MY_HSE #define MY_HSE #undef HSE_VALUE #define HSE_VALUE ((uint32_t)12000000) // Value of the External oscillator in Hz #endif // MY_HSE #endif // HSE_VALUE Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться