Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно работать со стандартными библиотеками для STM32F
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
LEXIS
Как правильно инициализировать стандартную библиотеку для STM32f чтобы не выдавал кучу ошибок о том, что происходит переопределение типов. В частности:
Код
Z:\KeilARM\ARM\INC\ST\STM32F10x\stm32f10x.h(312): error:  #256: invalid redeclaration of type name "s32" (declared at line 23 of "Z:\KeilARM\ARM\INC\ST\STM32F10x\stm32f10x_type.h")
Z:\KeilARM\ARM\INC\ST\STM32F10x\stm32f10x.h(348): error:  #101: "RESET" has already been declared in the current scope
Z:\KeilARM\ARM\INC\ST\STM32F10x\stm32f10x.h(600): error:  #256: invalid redeclaration of type name "DBGMCU_TypeDef" (declared at line 239 of "Z:\KeilARM\ARM\INC\ST\STM32F10x\stm32f10x_map.h")

Компилятор Keil. Объявление о типе контроллера и использование стандартной библиотеки заданы.
KnightIgor
Очень многие примеры основаны еще на версии 2.х периферийной библиотеки ST. Вот я вижу stm32f10x_type.h - это оттуда.
Как правило, 2.х имеет "главный" заголовок stm32f10x_lib.h, в то время как 3.х (3.5 - последняя) - stm32f10x.h. Следует вычистить исходники, заменив stm32f10x_lib.h на stm32f10x.h. Правда, это еще не гарантия, что все скомпилируется гладко: всплывут и другие из 2.х. Кроме того, в глобальных опциях проекта надо определить символ использования периферийной библиотеки и тип процессора:

USE_STDPERIPH_DRIVER, STM32F10X_HD

(STM32F10X_HD - это, например, STM32F103RC).

PoReX
Цитата(LEXIS @ Jun 7 2012, 03:24) *
Как правильно инициализировать стандартную библиотеку для STM32f чтобы не выдавал кучу ошибок о том, что происходит переопределение типов.
Компилятор Keil. Объявление о типе контроллера и использование стандартной библиотеки заданы.

Эти ошибки возникают из-за неправильного файла stm32f10x_conf.h. По умолчанию Keil берет файл из своих запасов, а нужен файл из StdPeriph_Lib.
LEXIS
Цитата
Эти ошибки возникают из-за неправильного файла stm32f10x_conf.h. По умолчанию Keil берет файл из своих запасов, а нужен файл из StdPeriph_Lib.

Это я уже понял, но как правильно его сконфигурировать? Пути до h файлов я прописал, исходникик библиотеки включил в сборку. А Keil все равно берет их из своих запасов.
define`ы USE_STDPERIPH_DRIVER и STM32F10X_MD определены глобально для всего проекта.
KnightIgor
Цитата(LEXIS @ Jun 7 2012, 14:34) *
Это я уже понял, но как правильно его сконфигурировать? Пути до h файлов я прописал, исходникик библиотеки включил в сборку. А Keil все равно берет их из своих запасов.

Идея в том, чтобы скопировать файл _conf.h в каталог проекта, изменить его согласно требованиям, а пути прописать так, чтобы путь к "своему" _conf.h был "раньше", чем к библиотеке. Вообще говоря, не обязательно использовать _conf.h: у меня он полностью "вычищен", а соответствующие заголовки включаются по мере необходимости.
KARLSON
Я недавно то же делал свой первый проект на STM32F1xxx. Правдо в IAR. Порылся в примерах и собрал библиотеку (во вложении, распаковывал прямо в проект). Компилируется без ошибок.
А в настройках проекта в С/С++ Compiler -> Preprocessor , дописал
$PROJ_DIR$\Libraries\CMSIS\Core\CM3
$PROJ_DIR$\Libraries\STM32F10x_StdPeriph_Driver\inc

в проекте дописал
#include "stm32f10x.h"
#include "stm32f10x_it.h"

в stm32f10x_conf.h закомментировал не нужную периферию, раскомментировал нужную. И всё.
BlackOps
да ну эти стандартные библиотеки!

я сам начинаю на stm32 кодить, и тоже решил с них начать но уже вижу какие они убогие.

и кстати, в нескольких местах я заметил что определенные действия делаются не эффективно, что отнимает процессорные ресурсы. Например кажется в GPIO, там гоняется цикл for для того чтобы определить конкретный пин! Хотя можно было бы обойтись без него!


Хорошо бы самому все переписать, но для этого нужно знакомым быть со всем этим, ну или же если у кого есть чистые и быстрые библиотеки которыми бы он поделился то можно тогда то использовать.
KnightIgor
Цитата(BlackOps @ Jun 8 2012, 07:49) *
да ну эти стандартные библиотеки!
я сам начинаю на stm32 кодить, и тоже решил с них начать но уже вижу какие они убогие.
Хорошо бы самому все переписать, но для этого нужно знакомым быть со всем этим

Разбирайтесь с регистрами, пишите свое. Сразу ругаться на библиотеки не стоит, тем более начинающему "кодить": запустите проекты на них, а потом оптимизируйте, переходя на доступ через регистры.
MBR
Библиотека реально писалась индусами. Во всех смыслах этого слова. Но местами сильно экономит время разработки.
Sergey_Aleksandrovi4
Цитата(BlackOps @ Jun 8 2012, 09:49) *
Хорошо бы самому все переписать, но для этого нужно знакомым быть со всем этим, ну или же если у кого есть чистые и быстрые библиотеки которыми бы он поделился то можно тогда то использовать.

BlackOps, вот делюсь макросами для портов ВВ. Может подойдёт. На оригинальность не претендую, взял идею и исходники с ресурса ziblog.ru и слегка под себя поправил. (расширение файла заменить на *.h)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.