Easyelectronics.ru • Просмотр темы - Keil 5.25, подключить SPL

Easyelectronics.ru

Электроника для всех
Текущее время: 15 авг 2018, 06:01

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 28
Добрый день.
Вопрос конечно немного идиотский, но бьюсь второй день и не получается.
Использую 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 Кб | Просмотров: 253 ]
Комментарий к файлу: настройки run-time env.
manage_env.png
manage_env.png [ 38.17 Кб | Просмотров: 253 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Keil 5.25, подключить SPL
СообщениеДобавлено: 06 июн 2018, 15:07 
Старожил

Зарегистрирован: 26 авг 2014, 10:34
Сообщения: 725
для 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
Сообщения: 223
Откуда: Таганрог
или выпилить работу с spl при работе с USB. все равно там ничего кроме настроек тактирования, да пары gpio нет. кода там не так уж и много, можно заменить на запись через регистры


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

Зарегистрирован: 26 авг 2014, 10:34
Сообщения: 725
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
Сообщения: 28
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 часов


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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