Easyelectronics.ru

Электроника для всех
Текущее время: 21 июн 2018, 23:15

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Keil 5.25, подключить SPL
СообщениеДобавлено: 06 июн 2018, 14:06 
Только пришел

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 22
Добрый день.
Вопрос конечно немного идиотский, но бьюсь второй день и не получается.
Использую Keil 5.25.2. В проекте не использую ни SPL, ни HAL. В настройках Run-Time Environment стоит только CMSIS->Core и Device->Startup.
Плата stm32f4-discovery.
Понадобилось добавить поддержку USB (запись на флэшку через FATFS). На сайте ST есть драйвер + нашел пару примеров. В примерах, и в драйвере от ST, судя по ошибкам компиляции используется SPL.
SPL взял из архива с USB драйвером с сайта ST - STM32F4xx_StdPeriph_Driver, внутри две папки "inc" и "src". В .h файлах стоит номер версии 1.6.0 от 10.07.2015

В дереве проекта создал группу SPL, туда добавил stm32f4xx_gpio.c,stm32f4xx_gpio.h,stm32f4xx_rcc.c,stm32f4xx_gpio.h
В настройках проекта на закладке С\С++ в defines прописал USE_STDPERIPH_DRIVER,STM32F4XX
В Include Paths прописал пути до STM32F4xx_StdPeriph_Driver\inc и STM32F4xx_StdPeriph_Driver\src
Сам код, пустышка из main.c
Код:
#include "main.h"

int main()
{
    while(1)
    {
     
    }
}

и main.h
Код:
#include "stm32f4xx.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"


Ну и ничего не работает :) При попытке собрать валится куча ошибок на assert_param
Код:
..\MyLibrary\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.c(1475): warning:  #223-D: function "assert_param" declared implicitly

Но так же и ошибки типа
Код:
..\MyLibrary\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.c(1330): error:  #20: identifier "HSI_VALUE" is undefined
..\MyLibrary\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c(130): error:  #20: identifier "GPIOJ" is undefined


Т.е. что-то я явно делаю не правильно.

Видел несколько описаний, как использовать SPL, но они все из 2012-13 года, когда SPL был еще жив. Есть рекомендации добавить еще stm32f4xx_conf.h, но у меня такого нет.
В main.h добавлял:
Код:
#define assert_param(expr) ((void)0)

Но ошибки с assert_param не исчезают.

Версия Keil-a 5.25, и в Run-Time Environment нет SPL. Попытка добавить драйвер USB оттуда тянет с собой HAL, требование Cube. Хотелось бы обойтись без этого.

Как вообще работает подключение SPL? Я посмотрел заголовочные файлы USB драйвера, там нигде нет прямого #include "stm32f4xx_gpio.h", но судя по ошибкам, функции оттуда используются.
Keil похоже что-то скрывает :), поскольку я в проекте пишу просто #include "stm32f4xx.h", но в дереве проекта этого файла нет. И если пойти "Go to definition" какого-то дефайна, скажем GPIO_AFRH_AFRH0_0, то открывает он stm32f407xx.h, которого в явном виде в проекте тоже нет.

Насколько я понимаю ситуацию: у меня CMSIS подключен через Run-Time Env. из Keil-а, поэтому в дереве он указан просто как CMSIS и я не вижу явного присутствия файла stm32f407xx.h.
Я бы хотел так и оставить - т.е. startup и CMSIS из поставки Keil-а, но добавить еще SPL. Я его использовать не буду, нужен только для работы USB драйвера.


Вложения:
Комментарий к файлу: настройки проекта
project.png
project.png [ 97.32 Кб | Просмотров: 165 ]
Комментарий к файлу: настройки run-time env.
manage_env.png
manage_env.png [ 38.17 Кб | Просмотров: 165 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5.25, подключить SPL
СообщениеДобавлено: 06 июн 2018, 15:07 
Старожил

Зарегистрирован: 26 авг 2014, 10:34
Сообщения: 724
для SPL еще нужны такие файлы:
system_stm32f4xx.c STM32F4xx system clock configuration file
stm32f4xx_conf.h Library Configuration file
stm32f4xx_it.c Interrupt handlers
stm32f4xx_it.h Interrupt handlers header file

Проще скопировать шаблон для Keil (папка "STM32F4xx_StdPeriph_Templates") переименовать, в проекте указать другой таргет, если надо - поправить пути и пр.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5.25, подключить SPL
СообщениеДобавлено: 06 июн 2018, 16:42 
Старожил
Аватара пользователя

Зарегистрирован: 01 авг 2016, 10:47
Сообщения: 219
Откуда: Таганрог
или выпилить работу с spl при работе с USB. все равно там ничего кроме настроек тактирования, да пары gpio нет. кода там не так уж и много, можно заменить на запись через регистры


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5.25, подключить SPL
СообщениеДобавлено: 06 июн 2018, 18:12 
Старожил

Зарегистрирован: 26 авг 2014, 10:34
Сообщения: 724
Keil демо для F401 без SPL и HAL - пишет на USB флэшку текстовый файлик USB_File.txt строчку "...hier Zeile zwei"
Вложение:
USBHostDemoF401.zip [245.85 Кб]
Скачиваний: 5

Первоисточник был под кокос с SPL: http://mikrocontroller.bplaced.net/word ... age_id=383
p/s/ в схеме используется ключ типа LM3526 подающий питание 5В на флэшку (питание крепкое должно быть) PA8 управляет ключом, на PA9 для контроля поступает 5В после ключа


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5.25, подключить SPL
СообщениеДобавлено: 07 июн 2018, 16:23 
Только пришел

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 22
CheMax писал(а):
или выпилить работу с spl при работе с USB. все равно там ничего кроме настроек тактирования, да пары gpio нет. кода там не так уж и много, можно заменить на запись через регистры

Ну в целом я бы так и хотел. Просто из-за сложности USB в целом, хотелось бы сначала получить работающую программу, а затем уже выпиливать что-то из библиотеки. Чтоб потом не ломать голову, в каком месте не работает.

oleg110592 писал(а):

Спасибо за подсказку и за проект. Я пытался собирать этот же пример.
Вообщем я вроде чуть-чуть разобрался, вдруг кому понадобится.
В свежих версиях Keil идет свежая версия CMSIS, рассчитанная на работу с HAL. Там библиотека организована в виде файла stm32f4xx.h, в котором в зависимости от define-ов подключается уже нужный заголовок. В моем случае это stm32f407xx.h. Лежит это всё в папке с Keil: ARM\PACK\Keil\STM32F4xx_DFP\2.13.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include
Т.е. когда в Run-Time Environment ставишь галочку CMSIS Core, используются эти файлы.

Теперь про SPL. Саму библиотеку можно скачать с сайта ST. Я изначально брал ее из архива с USB драйвером, но лучше скачать отдельно.
Оттуда нужна папка с самим SPL, внутри которой папки inc и src. Её можно скопировать куда-то, откуда подключать к нужным проектам.
У меня это папка \MyLibrary\STM32F4xx_StdPeriph_Driver, которая на одном уровне с проектами, чтоб подключать, где нужна. Ну вообщем не важно где она :)

Кроме того, надо взять файл stm32f4xx.h из архива с драйвером. Использовать CMSIS прямо оттуда не получится, т.к. там нет части define-ов, а чать тех что есть в новом CMSIS помечена как Legacy. Использовать только новый тоже не получится, т.к. в SPL есть обращения ко всем возможным define-нам, даже тем, которые для конкретной платы не актуальны (скажем GPIOK и GPIOJ для stmf407).
Вообщем пришлось сращивать ужа и ежа :)
В SPL define-ы описаны прямо в stm32f4xx.h
В современной версии CMSIS в stm32f4xx.h сделан include stm32f407xx.h
Я создал отдельную папку, положил туда stm32f4xx.h из SPL, вырезал оттуда нафиг все дефайны и сделал include stm32f407xx.h. Сам stm32f407xx.h я не трогал, он лежит там же в Keil-е где и лежал.
Так же в этот отредактированный stm32f4xx.h добавил нехватающие дефайны (при попытке компиляции видно, типа GPIOK).
Еще пришлось поправить саму SPL. Изменилась структура GPIO, в части BSRR регистра. Я не стал пытаться совмещать старый подход и новый, а просто исправил прямо в SPL это. Там всего 3 функции, ResetBit, SetBit, и, внезапно, WriteBit.
Так же пришлось поправить rcc чуть-чуть. Там просто закоментировал обращения к регистрам, которых нет в моем контроллере, тоже вообщем не много.
Ну собственно и все.
В настройках проекта, в Include прописал путь до \MyLibrary\STM32F4xx_StdPeriph_Driver\inc и до \MyLibrary\CMSIS (тут лежит исправленный stm32f4xx.h)
Так же в папку с проектом положил stm32f4xx_conf.h из примера проекта в архиве SPL.

Что в итоге. В проекте где нужен SPL, я подключаю саму библиотеку и исправленный файл stm32f4xx.h, который ссылается на современный CMSIS из состава Keil-а. Соответственно CMSIS в Keil-e может обновляться и все должно работать :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Fahivec


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB