-
- Я хочу просто выбирать Target и не набирать ручками #define STM32F10X_LD_VL. При выборе Target наверняка определяется какой-то символ, неужели никто не автоматизировал включение STM32F10X_LD_VL? Леонид Иванович(99 знак., 06.11.2013 21:34)
- С EFM32 в Keil нужно аналогичный дефайн задавать в свойствах проекта, но не для семейства, а просто для того же проца:) Можно обратиться в саппорт и за умеренную плату они сбецают генерилку. Я так думаю:) Vit(102 знак., 06.11.2013 23:57)
- Просто #define STM32F10X_LD_VL в начале и фсё! Не стоит ждать милостей от природы, взять их - наша задача (c) - _keil(06.11.2013 23:59)
- А вот и нихера. Если родные файлы не трогать (а их лучше не трогать), то замахаешься выстраивать хедеры по нужному порядку включения. Ну а с EFM32 и такой строчкой уколхозить не получается - скомпилить скомпилится, а дальше болт - Vit(07.11.2013 00:02)
- Сорри! Конечно добавить #include stm32f10x.h core_cm3.h core_cm3.c system_stm32f10x.h system_stm32f10x.c а также startup_stm32f10x_ld_vl.s ОДИН раз, но в правильном поряде. ПРОФИТ! - _keil(07.11.2013 00:08)
- Вот это говнокод! Кошмар! - FDA(07.11.2013 11:17)
- А как надо? - Леонид Иванович(07.11.2013 12:41)
- Надо включать один инклюд - stm32f10x.h, а символ STM32F10X_LD_VL определять в Project.Options.Compiler.Preprocessor.Defined symbols. - йцукен(07.11.2013 20:29, )
- И всё? Это я сделал. Но как же Леонид Иванович(49 знак., 07.11.2013 22:41)
- +100500 - Vit(07.11.2013 20:49)
- #include <xc.h> и вперёд! :-))) - FDA(07.11.2013 13:57)
- Надо включать один инклюд - stm32f10x.h, а символ STM32F10X_LD_VL определять в Project.Options.Compiler.Preprocessor.Defined symbols. - йцукен(07.11.2013 20:29, )
- Бредите? Хотите настоящий? Нажмите debug в iar - _keil(07.11.2013 11:44)
- А как надо? - Леонид Иванович(07.11.2013 12:41)
- Ну вообще капец! А какой порядок правильный? - Леонид Иванович(07.11.2013 01:14)
- Он как раз и описан этажом выше! Сначала #define "СемействоВыбранноеВами", потом "#include stm32f10x.h core_cm3.h core_cm3.c system_stm32f10x.h system_stm32f10x.c а также startup_stm32f10x_ld_vl.s", ну может какой #include stdlib по вкусу. И не _keil(180 знак., 07.11.2013 09:25)
- Это из разряда вредных советов. IMNHO. Либо скопировать в проект и надругаться перед одной строчкой разбора семейств, либо вписать глобальную переменную проекта, что предпочтительнее. - Vit(07.11.2013 09:27)
- Это Ваш выбор. Пользоваться оригиналом или копией. Родным или 'интегрированным' cmsis - _keil(07.11.2013 09:30)
- Не передёргивайте - чем я пользуюсь Вы не знаете. Если порядок включения хедеров может развалить проект, то это ГОВНОКОД - Vit(07.11.2013 09:37)
- Порядок включения хедеров может знать только iar? Остальные даже не догадываются, что сначала #define, затем #ifdef ? st не знает что производит? А iar знает? И все говнокодят, кроме iar? Ну-ну - _keil(07.11.2013 10:10)
- Вы просто даже не понимаете, о чём я говорю. Так же как путаете CMSIS и stdlib. - Vit(07.11.2013 10:42)
- Я ничего не путаю. Ваша иллюзия. "standard peripheral library" не использую. CMSIS строго с сайта производителя кристалла. - _keil(07.11.2013 10:50)
- Вы не понимаете, что говнокодите, и предлагаете другим делать так же. Лучше научитесь делать проекты так, чтобы порядок включения хедеров не влиял на его работоспособность. ЗЫ и для общего развития - CMSIS это в первую очередь стандарт от Vit(12 знак., 07.11.2013 11:02, ссылка)
- Включать хедеры в конец проекта? Или не делать это вовсе? Зачем, ведь компилятор сделает это за Вас! - _keil(07.11.2013 11:07)
- Прекратите истерику. Ну не умеете. Не понимаете. Бывает. Разобраться не сложно. Не хотите - не разбирайтесь. Только вредные советы не давайте. - Vit(07.11.2013 11:11)
- "Глубокие" выводы на пустом месте. Продолжайте верить, что только компилятор знает единственно верный путь, iar совершенен, всегда создает безупречный код, всё знает о всех (даже будущих) кристаллах лучше производителя и прочее - _keil(07.11.2013 11:18)
- Причём тут IAR? Пох на компилятор - какой нужно, такой и идёт в дело. ЗЫ. Не переходите, плз, на личности. А то недолго до репрессий. - Vit(07.11.2013 11:24)
- "Глубокие" выводы на пустом месте. Продолжайте верить, что только компилятор знает единственно верный путь, iar совершенен, всегда создает безупречный код, всё знает о всех (даже будущих) кристаллах лучше производителя и прочее - _keil(07.11.2013 11:18)
- Прекратите истерику. Ну не умеете. Не понимаете. Бывает. Разобраться не сложно. Не хотите - не разбирайтесь. Только вредные советы не давайте. - Vit(07.11.2013 11:11)
- Я рад что Вы знаете что такое CMSIS и зачем он нужен - _keil(07.11.2013 11:04)
- Вчера ошибочно принял Ваше сообщение о правильном порядке включения хедеров за юмор. - Vit(07.11.2013 11:06)
- Не юмор, но проверенный вариант. Просто каждый делает собственный выбор. Ничего личного !-) - _keil(07.11.2013 11:09)
- Вчера ошибочно принял Ваше сообщение о правильном порядке включения хедеров за юмор. - Vit(07.11.2013 11:06)
- Включать хедеры в конец проекта? Или не делать это вовсе? Зачем, ведь компилятор сделает это за Вас! - _keil(07.11.2013 11:07)
- Вы не понимаете, что говнокодите, и предлагаете другим делать так же. Лучше научитесь делать проекты так, чтобы порядок включения хедеров не влиял на его работоспособность. ЗЫ и для общего развития - CMSIS это в первую очередь стандарт от Vit(12 знак., 07.11.2013 11:02, ссылка)
- ...не говоря уже о том, что для этого не стоило регистрировать еще один ник :)) - MBedder(07.11.2013 10:48)
- Без регистрации действует ограничение на количество сообщений - _keil(07.11.2013 10:51)
- Не прикидывайся - у тебя уже был зарегистрированный ник и ты с него успешно писал, а теперь зарегистрировал еще один и пишешь из-под него - MBedder(07.11.2013 10:57)
- Будте любезны - снизьте злоупотребление указателями на указатель. Определяйте явно - _keil(07.11.2013 11:00)
- Не снижу. Некогда определять явно - сам все прекрасно знаешь. - MBedder(08.11.2013 00:40)
- Будте любезны - снизьте злоупотребление указателями на указатель. Определяйте явно - _keil(07.11.2013 11:00)
- Не прикидывайся - у тебя уже был зарегистрированный ник и ты с него успешно писал, а теперь зарегистрировал еще один и пишешь из-под него - MBedder(07.11.2013 10:57)
- Без регистрации действует ограничение на количество сообщений - _keil(07.11.2013 10:51)
- Я ничего не путаю. Ваша иллюзия. "standard peripheral library" не использую. CMSIS строго с сайта производителя кристалла. - _keil(07.11.2013 10:50)
- Вы просто даже не понимаете, о чём я говорю. Так же как путаете CMSIS и stdlib. - Vit(07.11.2013 10:42)
- Порядок включения хедеров может знать только iar? Остальные даже не догадываются, что сначала #define, затем #ifdef ? st не знает что производит? А iar знает? И все говнокодят, кроме iar? Ну-ну - _keil(07.11.2013 10:10)
- Не передёргивайте - чем я пользуюсь Вы не знаете. Если порядок включения хедеров может развалить проект, то это ГОВНОКОД - Vit(07.11.2013 09:37)
- Это Ваш выбор. Пользоваться оригиналом или копией. Родным или 'интегрированным' cmsis - _keil(07.11.2013 09:30)
- Это из разряда вредных советов. IMNHO. Либо скопировать в проект и надругаться перед одной строчкой разбора семейств, либо вписать глобальную переменную проекта, что предпочтительнее. - Vit(07.11.2013 09:27)
- Он как раз и описан этажом выше! Сначала #define "СемействоВыбранноеВами", потом "#include stm32f10x.h core_cm3.h core_cm3.c system_stm32f10x.h system_stm32f10x.c а также startup_stm32f10x_ld_vl.s", ну может какой #include stdlib по вкусу. И не _keil(180 знак., 07.11.2013 09:25)
- Или один раз в свойствах проекта сделать глобальный дефайн - Vit(07.11.2013 00:11)
- Вот это говнокод! Кошмар! - FDA(07.11.2013 11:17)
- Сорри! Конечно добавить #include stm32f10x.h core_cm3.h core_cm3.c system_stm32f10x.h system_stm32f10x.c а также startup_stm32f10x_ld_vl.s ОДИН раз, но в правильном поряде. ПРОФИТ! - _keil(07.11.2013 00:08)
- А вот и нихера. Если родные файлы не трогать (а их лучше не трогать), то замахаешься выстраивать хедеры по нужному порядку включения. Ну а с EFM32 и такой строчкой уколхозить не получается - скомпилить скомпилится, а дальше болт - Vit(07.11.2013 00:02)
- Просто #define STM32F10X_LD_VL в начале и фсё! Не стоит ждать милостей от природы, взять их - наша задача (c) - _keil(06.11.2013 23:59)
- startup_stm32f10x_ld_vl.s заботливо и неявно подключил компилятор. То, что Вы его не набрали явно, не означает, что его нет - Keil(06.11.2013 22:03, )
- Такой файл в папке IAR есть. Глянул внутренности, там нет настройки тактирования. Опять непонятки, кто же тактирование настраивает? - Леонид Иванович(06.11.2013 22:13)
- Вы ищете не то и не там. Тактирование настраиваете Вы или не настраиваете если достаточно hsi. Качните Reference Manual _keil(196 знак., 06.11.2013 22:52)
- Внутри system_stm32f10x.с есть настройка тактирования. Как этот файл правильно использовать? - Леонид Иванович(06.11.2013 23:01)
- Файлы CD00246267.pdf и stm32f10x.h должны стать наиболее читаемыми и попрёт со страшной силой! - _keil(06.11.2013 23:13)
- Это базовая настройка, которая не должна привлечь внимание. А вот stm32f10x.h нужен будет постоянно - содержит много полезного, например #define RCC_CFGR_PLLMULL ((uint32_t)0x003C0000) - _keil(06.11.2013 23:11)
- Внутри system_stm32f10x.с есть настройка тактирования. Как этот файл правильно использовать? - Леонид Иванович(06.11.2013 23:01)
- Вы ищете не то и не там. Тактирование настраиваете Вы или не настраиваете если достаточно hsi. Качните Reference Manual _keil(196 знак., 06.11.2013 22:52)
- Такой файл в папке IAR есть. Глянул внутренности, там нет настройки тактирования. Опять непонятки, кто же тактирование настраивает? - Леонид Иванович(06.11.2013 22:13)
- Target - только для 'встроенного' cmsis. Рекомендую cmsis специально качать с st.com и явно включать в проект. В этом сценарии нет иного способа отличить скажем stm32f100 от stm32f107 кроме как #define STM32F10X_LD_VL - Keil(06.11.2013 22:01, )
- Я пользуюсь встроенным CMSIS. Зачем качать? - Леонид Иванович(06.11.2013 22:14)
- блин, да один раз набрать. Вам больше заняться нечем как искать обход подобной ерунды? - koyodza(06.11.2013 21:37)
- Некрасиво, что два раза нужно в разных местах задавать одно и то же - тип процессора. Неужели никто не автоматизировал? Я в шоке. - Леонид Иванович(06.11.2013 21:46)
- Посмотрите внимательнее. Под LPC автоматизировано, при выборе таргета определяется нужный дефайн. Под Stm32 я перешел на gcc, но вряд ли в iar для LPC и STM будут делать принципиально отличающиеся настройки проекта. - 3m(06.11.2013 21:52)
- по факту у меня есть проекты, где не одно и то же. Эти проекты работают на разных МК. Не принципиально разных типа F1 и F4, но например на F100 и F103, которые всё же много чем отличаются - koyodza(06.11.2013 21:49)
- Хм, оказывается, всё еще сложнее. А для каких целей Вам пришлось указывать разные процессоры в разных местах? Нельзя было, скажем, для старшего скомпилировать? - Леонид Иванович(06.11.2013 21:51)
- Нельзя. Ибо они очень разные по начинке! Поищите фразу #ifdef STM32F10 в файле stm32f10x.h и увидите - Keil(06.11.2013 22:27, )
- если в проекте указать 100, а не 103, то в кейле недоступна удобная отладка периферии. А стартап вообще доработанный получился, потому что некоторые вектора прерываний у них разные. Но на начальном этапе Вам это не нужно koyodza(38 знак., 06.11.2013 21:56)
- А где правильно настраивать тактирование, в файле стартапа или в своем исходнике? Меня смущает, что я не знаю, на каком генераторе сейчас работает процессор. - Леонид Иванович(06.11.2013 22:01)
- Можно накатать мигалку на 1 секунду расчетную, залить+запустить F8, замерять секундомером, провести обратный перерасчет... - Vit(06.11.2013 23:12)
- Уже понял, что без подключенного Леонид Иванович(1688 знак., 06.11.2013 23:45)
- Не мусор. Видна конкретная настройка. Просто примите как данность содержимое "system_stm32f10x.c" и не редактируйте его. Получите работоспособный проц с тактированием HSI. Почитайте "reference manual" и напишите код в начале main(), активирующий _keil(97 знак., 06.11.2013 23:54)
- Написал вот такое включение PLL: Леонид Иванович(1005 знак., 07.11.2013 01:03)
- Прикольно, если PLL тактирую от HSE когда вынимаю кварц - LED начинает мигать медленно. Вставляю обратно - снова мигает быстро. Кто это так делает? В софте ничего такого нет. Шайтан. - Леонид Иванович(07.11.2013 01:55)
- Во многих МК есть Clock Failure Monitor, переключающий тактирование на встроенный RC-генератор при потере внешнего клока. В dsPIC/PIC24 он активирован по умолчанию, а отключается либо программно, либо конфигурационным фузом. Про STM я не в курсе - MBedder(07.11.2013 03:13)
- Clock security system (CSS) его фамилие. plainuser(133 знак., 07.11.2013 13:06)
- Ну я же говорил - вон мужик в пиджаке, а вот дерево!(с) :)) - MBedder(07.11.2013 18:05)
- Clock security system (CSS) его фамилие. plainuser(133 знак., 07.11.2013 13:06)
- Во многих МК есть Clock Failure Monitor, переключающий тактирование на встроенный RC-генератор при потере внешнего клока. В dsPIC/PIC24 он активирован по умолчанию, а отключается либо программно, либо конфигурационным фузом. Про STM я не в курсе - MBedder(07.11.2013 03:13)
- Прикольно, если PLL тактирую от HSE когда вынимаю кварц - LED начинает мигать медленно. Вставляю обратно - снова мигает быстро. Кто это так делает? В софте ничего такого нет. Шайтан. - Леонид Иванович(07.11.2013 01:55)
- Написал вот такое включение PLL: Леонид Иванович(1005 знак., 07.11.2013 01:03)
- Я ж написал как выкинуть:) - Vit(06.11.2013 23:51, ссылка)
- там для разных МК. Большая часть из этого не компилируется для выбранного типа МК. Кое-что из того, что компилируется, но не используется, может не линковаться - koyodza(06.11.2013 23:47)
- Не мусор. Видна конкретная настройка. Просто примите как данность содержимое "system_stm32f10x.c" и не редактируйте его. Получите работоспособный проц с тактированием HSI. Почитайте "reference manual" и напишите код в начале main(), активирующий _keil(97 знак., 06.11.2013 23:54)
- Уже понял, что без подключенного Леонид Иванович(1688 знак., 06.11.2013 23:45)
- Если речь о stm32f100c4, то hsi 8 MHz. Нужно больше? Включите PLL. Почитайте официальный даташит, там описаны RCC->CFGR и RCC->CR - Keil(06.11.2013 22:36, )
- Два пути - писать свой init() или пользоваться API от st. Главное - не забывайте включать тактирование перед настройкой. Например, RCC->APB1ENR|=RCC_APB1ENR_PWREN; - Keil(06.11.2013 22:31, )
- это вопрос типа как надо делать: красиво или быстро. Каждый делает по-своему koyodza(1125 знак., 06.11.2013 22:08 - 22:15)
- А что делать при неудачном включении тактирования? - Леонид Иванович(07.11.2013 00:03)
- Уж точно не подключать внешний генератор и перешивать фьюзы! Достаточно ресет и убрать неудачный код. Снова получите голый HSI - _keil(07.11.2013 00:19)
- это от функционала прибора зависит. Если Вы о БП, то там можно работать от HSI на 8МГц и вообще не трогать тактирование. Для работы UART кварц не нужен, стабильности внутреннего генератора достаточно koyodza(136 знак., 07.11.2013 00:06)
- Если PLL тактировать от HSI, тогда, вроде, достаточно этого: Леонид Иванович(461 знак., 07.11.2013 01:35)
- Только я бы писал CFGR = (CFGR & ~CFGR_SW) | CFGR_SW_PLL; Так биты SW в регистре CFGR не будут кратковременно сброшены в 0. В данном случае это ничем не грозит, но вообще говоря может стать источником проблемы. - йцукен(07.11.2013 20:22, )
- Можно подробнее, почему в этом случае не грозит, и в других случаях будут проблемы? - Леонид Иванович(07.11.2013 22:44)
- Ну представьте, что вы собирались перейти с HSE на PLL, при этом первой строчкой временно перешли на HSI, а он выключен. Тогда ядро остановится, и до второй строчки дело не дойдёт. В данном случае это мнимая угроза, потому что, если я правильно йцукен(268 знак., 08.11.2013 13:13, )
- В кратковременном переключении на HSI ничего страшного не вижу. Но если Вы решите выполнить полный код более одного раза, возникнет коллизия - PLL уже используется, а Вы принудительно ей пытаетесь поменять множитель. Пусть и кратковременно. - _keil(08.11.2013 05:00)
- Можно подробнее, почему в этом случае не грозит, и в других случаях будут проблемы? - Леонид Иванович(07.11.2013 22:44)
- Понимаю while(77){} - оно специально для посмеяться при чтении, а вот (xxx == 0) под while ненавижу - Vit(07.11.2013 01:52)
- (xxx == 0) гораздо нагляднее, чем (!xxx), хоть и длиннее. - Леонид Иванович(07.11.2013 02:14)
- Это не C# с жесткой типизацией. Никак не нагляднее - просто выпендрёж, но заставляет сломать моск к концу чтения. Ничего личного. Vit(328 знак., 07.11.2013 08:50 - 09:06)
- Никогда не напишу a.b = !!(xxx);, ибо if(xxx) a.b = 1; else a.b = 0; наглядней. Первое - действительно выпендрёжь. - Леонид Иванович(07.11.2013 12:50)
- Для таких вещей можно использовать тернарную условную операцию Ruslan(27 знак., 07.11.2013 16:16)
- Часто использую. Хотя if читабельней. - Леонид Иванович(07.11.2013 16:23)
- false == 0. while((x&y)==false){} это песец моску. конструкция, вызывающая рвотный рефлекс - Vit(07.11.2013 15:32)
- Для таких вещей можно использовать тернарную условную операцию Ruslan(27 знак., 07.11.2013 16:16)
- Никогда не напишу a.b = !!(xxx);, ибо if(xxx) a.b = 1; else a.b = 0; наглядней. Первое - действительно выпендрёжь. - Леонид Иванович(07.11.2013 12:50)
- Это не C# с жесткой типизацией. Никак не нагляднее - просто выпендрёж, но заставляет сломать моск к концу чтения. Ничего личного. Vit(328 знак., 07.11.2013 08:50 - 09:06)
- (xxx == 0) гораздо нагляднее, чем (!xxx), хоть и длиннее. - Леонид Иванович(07.11.2013 02:14)
- Только я бы писал CFGR = (CFGR & ~CFGR_SW) | CFGR_SW_PLL; Так биты SW в регистре CFGR не будут кратковременно сброшены в 0. В данном случае это ничем не грозит, но вообще говоря может стать источником проблемы. - йцукен(07.11.2013 20:22, )
- Если PLL тактировать от HSI, тогда, вроде, достаточно этого: Леонид Иванович(461 знак., 07.11.2013 01:35)
- А что делать при неудачном включении тактирования? - Леонид Иванович(07.11.2013 00:03)
- Можно накатать мигалку на 1 секунду расчетную, залить+запустить F8, замерять секундомером, провести обратный перерасчет... - Vit(06.11.2013 23:12)
- А где правильно настраивать тактирование, в файле стартапа или в своем исходнике? Меня смущает, что я не знаю, на каком генераторе сейчас работает процессор. - Леонид Иванович(06.11.2013 22:01)
- Хм, оказывается, всё еще сложнее. А для каких целей Вам пришлось указывать разные процессоры в разных местах? Нельзя было, скажем, для старшего скомпилировать? - Леонид Иванович(06.11.2013 21:51)
- Некрасиво, что два раза нужно в разных местах задавать одно и то же - тип процессора. Неужели никто не автоматизировал? Я в шоке. - Леонид Иванович(06.11.2013 21:46)
- С EFM32 в Keil нужно аналогичный дефайн задавать в свойствах проекта, но не для семейства, а просто для того же проца:) Можно обратиться в саппорт и за умеренную плату они сбецают генерилку. Я так думаю:) Vit(102 знак., 06.11.2013 23:57)
- Я хочу просто выбирать Target и не набирать ручками #define STM32F10X_LD_VL. При выборе Target наверняка определяется какой-то символ, неужели никто не автоматизировал включение STM32F10X_LD_VL? Леонид Иванович(99 знак., 06.11.2013 21:34)