Программирование 'F407 ...

Луде
Сб 8 октября 2016 г., 19:02
Привет, ребята !

Итак, у меня есть одна из тех крошечных досок F407VET. (На самом деле у меня есть несколько из них)

Я делаю всю свою работу над Linux, особенно я использую Fedora Core 22.

Я написал простой набросок, чтобы сделать несколько светодиодов, мигающих ...

Теперь я пытаюсь понять, как запрограммировать этого ребенка. Я использовал детали F103
раньше, и это было тривиально через встроенный серийный загрузочный загрузчик.

С 'F407 вещи кажутся намного сложнее ... : P

Сначала я попробовал ST-Link. Я могу загрузить эскиз, и он будет работать должным образом мигающим
светодиоды. И я могу прочитать его обратно, и это кажется тем же файлом, что и я загружаю.

Но, как только я нажимаю сброс или цикл питания этой платы, мой эскиз не работает
больше. Я знаю, что Boot0 и Boot1 должны быть оба нуля, чтобы он запустился от Flash,
И я попробовал все комбинации двух, ничего. Он не запускает мой эскиз.
Я могу загрузить его еще раз (настройка Boot0 на 1), а затем он будет работать снова, пока я
Не сбрасывайте/цикл питания плата.

Итак, затем я подумал, давайте заставим работать встроенный загрузочный погрузчик. Мне потребовалось некоторое время, чтобы научиться
О DFU ...

Я установил все инструменты DFU, все выглядит хорошо. Я подключаю плату (boot0 = 1), а LSUSB показывает:
Устройство шины 003 036: ID 0483: DF11 Stmicroelectronics STM Устройство в режиме DFU

Выглядит хорошо, правильно ?

Я, чем запускаю "dfu -util -a 0 -s 0x08000000 -d тест.корзина, и я получаю
"Файл успешно загружен".

Чем я использую "dfu -util -a 0 -z 17276 -u Проверка.бин "и проверить, что загрузка действительно прошла нормально.

И файлы совпадают. Все выглядит хорошо.

Но с DFE кажется, что мой эскиз никогда не выполняется.

Я пробовал различные варианты при загрузке своего эскиза, но не повезло. Я могу питать цикл
доска и прочитайте мой эскиз обратно, все там, все хорошо.

Почему он не выполняет мой эскиз ? Я использовал objdump, чтобы разобрать файл (тест.мусорное ведро).
Векторная таблица, как и ожидалось, есть весь код запуска, и мой тестовый код.

Каким -то образом «F407 ненавидит меня :(

Любые идеи предложения ?

О, да, я использую последние утилиты DFE, v0.9.

И я не получаю ошибок или предупреждений ... Так что должна быть ошибка оператора ?

Кто -нибудь, пожалуйста, помогите ! :-)

Большое спасибо !
Руди


% dfu -util -l
DFU-UTIL 0.9


Найдено DFU: [0483: DF11] VER = 2200, DEVNUM = 37, CFG = 1, intf = 0, path = "3-13.3.4.3 ", alt = 3, name ="@device feature/0xffff0000/01*004 e ", serial =" 386333563233 "
Найдено DFU: [0483: DF11] VER = 2200, DEVNUM = 37, CFG = 1, intf = 0, path = "3-13.3.4.3 ", alt = 2, name ="@OTP Memory /0x1fff7800 /01*512 E, 01*016 E ", serial =" 386333563233 "
Найдено DFU: [0483: DF11] VER = 2200, DEVNUM = 37, CFG = 1, intf = 0, path = "3-13.3.4.3 ", alt = 1, name ="@опция байты /0x1fffc000 /01*016 e ", serial =" 386333563233 "
Найдено DFU: [0483: DF11] VER = 2200, DEVNUM = 37, CFG = 1, intf = 0, path = "3-13.3.4.3 ", alt = 0, name ="@Internal Flash /0x08000000 /04*016KG, 01*064KG, 07*128KG ", Serial =" 386333563233 "

Rogerclark
Сб 8 октября 2016 г., 21:59
Странный

У меня была аналогичная проблема на F103 "Уродливая доска"

Он будет работать сразу после загрузки через USB в сериал

Но не после перезагрузки

Единственное, что я могу придумать, что может вызвать это, был неисправным стартапом осциллятора

Но я попытался изменить код, чтобы остановить и перезапустить генератор после тайм -аута, и он не решил проблему

Обычно загрузка Stlink работает хорошо

Так что это странно, если вы можете прочитать обратно от 0x800000, и бинар в порядке, но он не будет работать после цикла питания.
Вы прочитали после велосипедного велосипеда, чтобы проверить программу, все еще во флеш ?

Вы уверены, что это во флеш, а не Ram ? (Это кажется маловероятным при Stlink, но возможно с серийной загрузкой)

Вы пробовали использовать GDB (извините, не уверен, как подключить GDB к Stlink, поскольку я использую BMP)

Луде
Солнце 09 октября 2016 г. 8:25 утра
Спасибо за быстрый ответ, Роджер !
Вы прочитали после велосипедного велосипеда, чтобы проверить программу, все еще во флеш ? Да, я сделал, и сравнение прошло.
Вы уверены, что это во флеш, а не Ram ? (Это кажется маловероятным при Stlink, но возможно с серийной загрузкой) Ну, я думаю, это действительно невозможно узнать, лол

Если я пойду по адресу, я пишу и читаю 0x08000000 - и это должно быть Flash

Единственная вещь, которая приходит в M Mind, - это то, что запуск/инициализация (в моем файле) не работает должным образом.

Когда я использую ST-Link, оно каким-то образом настраивает устройство правильно, но если я попытаюсь запустить свой код в одиночку, инициация не удается ...

Мне придется посмотреть на это больше.

Спасибо,
Руди

Стивестронг
Солнце 09 октября 2016 г. 9:11
Вы пытаетесь выполнить программу после сброса, когда Stlink все еще подключен?
Я имею в виду, что я где -то читал, что адаптер Stlink заблокирует исполнение, не знаю, почему...

Луде
Солнце 09 октября 2016 г. 16:00
Привет, Стив,

Когда я программирую со ST-Link, мой эскиз работает ! Мои светодиоды мигают !

Но как только я нажимаю сброс/питание, он больше не будет работать.

Я также пробовал все комбинации загрузочных переключателей.

Только сразу после программирования эскиза он будет работать, и будет работать часами, если я его не беспокоит.

Если я выключу плату, установите оба переключателя загрузки на ноль и снова включите плату (не через ST-Link),
Мой эскиз не для бега ...

Установка загрузки0 на 1 и программирование через ST-Link снова заставит его работать снова !

ВЕРИНСКИЙ ! : P

Спасибо,
Руди

Стивестронг
Солнце 09 октября 2016 г., 17:49
Вы отключаете провода Stlink (как данные, так и часы) от платы при попытке запустить автономный?

Луде
Солнце 09 октября 2016 г., 17:58
Привет, Стив,

Да, я попробовал это. Все еще ничего ...

Но это не должно иметь значения. В режиме «нормальный» загрузку, когда оба загрузки0
и boot1 - 0, устройство должно работать как обычно.

Я не = w отказываюсь от либеров Тилена и попробую мою удачу с Koduino !

Спасибо,
Руди

Rogerclark
Солнце 09 октября 2016 г., 8:21 вечера
Руди

Вы можете попробовать использовать STMS Non Arduino Tools E.глин. STM32Cubemx и загрузите бесплатную версию Atollic True Studio

Куб - это большая программа и немного пугающая, чтобы правильно настроить часы, но он экспортирует настоящий файл проекта студийного проекта (и Keil и т. Д.), Так что вы можете вместо этого попробовать это вместо этого.

Или, я думаю, OpenOCD поддерживает отладку через Stlink, так что вы можете подключиться после холодной загрузки и получить GDB, чтобы сообщить вам адреса программного счетчика e.глин. Посмотрите, где он застрял.

Если вы можете выплеснуть на плату STM32F103C8 за $ 232F103C8, вы можете пропустить на нем прошивку Blackmagic Desrow, и напрямую использовать GDB и выпустить команды и т. Д., Чтобы увидеть, что происходит.

Или вместо этого можно попробовать загрузить через USB в сериал?

КСТАТИ. Вы уверены, что ваша программа находится в флеш, а не Ram?

Эдогальдо
Пн 10 октября 2016 г., 6:53
Привет, Руди, вы сказали, что у вас есть несколько досок F407, верно? Возникает ли проблема со всеми из них?

Луде
Пн 10 октября 2016 г., 10:19
Привет, ребята,

Спасибо за все сообщения !

Итак, я сделал немного прогресса ! Библиотеку Кодуино было на удивление легко установить
вверх и использовать.

Edoglando, смешно, вы должны спросить ! Из 10 досок, которые у меня есть, 4 кажутся
Не любить программирование и не выполнять мой эскиз для тестирования. Другой
6 кажется работает.

Теперь у меня 6 мигающих досок и 4 «мертвых». Мертвые
Интересно, и мне интересно, является ли это программным «ошибкой» или «функцией». Я могу
Программируйте вспышку и прочитайте, даже после велосипедного велосипеда, но это делает
не выполнять мой простой мигающий набросок. Я также пытался заставить
Использование HSI вместо HSE, чтобы избежать внешних проблем кристаллов. Не уверен, что это
распространился сейчас или нет, или даже если он станет эффективным при использовании
DFU, или я должен использовать ST-Link.

Я идея, ребята ? Звучит как странная проблема, а 4 доски с одинаковыми
проблема, также странная ...

Кстати, вчера вечером уничтожил второй адаптер св. Что не так с этими
вещи, ? Похоже, LDO мертв, если он питается на внешней батареи, кажется
работать:/

Большое спасибо,
Руди

Эдогальдо
Пн 10 октября 2016 г., 10:31
Руди, если вы загрузите очень простой набросок с 1 светодиодным миганом, это работает?

У меня была относительно похожая проблема на плате F1: в моем случае это было связано с микроэлектроэнергией между булавками HSE (из -за плохой пайки), что предотвращало правильный запуск ВИЗ..
Симптомы в моем случае:
  • USB не работал
  • Мигание сработало, но с неверными временами при попытке использовать PLL, причина заключалась в том, что стартап PLL не удался, и вместо этого использовался HSI..
  • Кроме того: если я правильно помню, что Blink работал только при использовании примера Blink SPL; Использование эскиза библиотеки Arduino Blink не работал, вероятно, из -за сбоя в инициализации серийного интерфейса USB..
Я мог бы решить проблему, сокращая ярлык.

Надеюсь, это может помочь..

Rogerclark
Пн 10 октября 2016 г., 10:53
Привет, Руди

Вы делаете свои собственные доски ?

Часы могут быть проблемой.

Я думаю, что код ждет, пока HSE начнется, в бесконечном цикле. Я не думаю, что есть какой -нибудь код для тайм -аута, ожидая HSE, затем пытается перезагрузить

У меня есть аналогичная проблема с платой F103, она работает только в том случае, если я загружаю через сериал (я не пробовал Stlink) и сразу забежал, но если я цикл питания, плата не работает

Я предположил, что это были неисправные часы, но это не очень хорошая доска, поэтому я просто больше не использую их.

Луде
Пн 10 октября 2016 г. 12:26 вечера
Привет, ребята,

Я использую очень простой набросок, Wich заставляет два светодиода мигает (один на
MCU Board) и один на моей базовой доске). Это на случай, если светодиод
На доске процессоров не работает ...

Доски MCU, которые я использую, я купил онлайн:
https: // www.aliexpress.com/item/stm32f4 ... 85751.HTML

Я сделал базовую доску, где они подключают ее. Но я могу их управлять
за пределами моей базовой доски или подключенной, это не имеет значения. Результаты такие же.

Я думал о HSE и добавил блок "use_hsi" ifdef
В ваших библиотеках, Роджер. Теперь я пытаюсь найти правильное место в Кодуино.

Я провел физический осмотр и не видел ничего плохого, как припой
шорты.

У меня есть один вопрос о векторных таблицах. Я заметил, что векторная таблица
может быть что -то вроде этого:

0800 1ffd, сброс вектор
0800 0d1d, вектор NMI

В обоих случаях это странный адрес, установлен BIT 0 (это фактически относится ко всем
векторы).

Но реальные места:
08001ffc <Reset_handler>:
08000d1c <Nmi_handler>:

Что здесь происходит ? Это как фактический адрес + 1 ?! Это работает на 6 из
Мои доски, так что это должно быть правильно !

Но я все еще хотел бы это понять. Я искал почти
2000 страниц Руководства по программированию, и пока ничего ...

Большое спасибо !!!
Руди

Стивестронг
Пн 10 октября 2016 г., 13:32
Нечетные и даже адреса в векторной таблице (см. 1 -й ответ):
http: // Stackoverflow.COM/Вопросы/1576 ... DD-Address

Эдогальдо
Пн 10 октября 2016 г., 13:51
Тот факт, что поведение отличается в разных досках одного и того же типа, заставляет меня думать, что это должен быть конкретный вопрос о доске (либо на уровне платы, либо на уровне чипов).
Afaik, в чипсах STM32 нет предохранителей или прочего..

Эдогальдо
Пн 10 октября 2016 г., 14:55
Еще один «глупый» вопрос: поскольку эта доска доступна как в версиях F103Vet6, так и F407Vet6, вы уверены, что сбои не являются версиями F103?! : D

Луде
Пн 10 октября 2016 г., 15:12
Спасибо за это нечетное/даже указатель Стив !

Edogald, да, они F407 устройство. И я не доверяю тому, что напечатано на них eiter - это исходит от Китая в конце концов. Итак, я запускаю это:

% ST-Info--зона
Найдено 1 программисты Stlink
Сериал: 523F71065177555563306153F
openocd: "\ x52 \ x3f \ x71 \ x06 \ x51 \ x77 \ x55 \ x56 \ x33 \ x06 \ x15 \ x3f"
Flash: 524288 (PageSize: 16384)
SRAM: 196608
Chipid: 0x0413
descr: устройство F4

Так что это F4 !

Ваше здоровье,
Руди

Эдогальдо
Пн 10 октября 2016 г., 17:30
Лудеи написал:Спасибо за это нечетное/даже указатель Стив !

Edogald, да, они F407 устройство. И я не доверяю тому, что напечатано на них eiter - это исходит от Китая в конце концов. Итак, я запускаю это:

% ST-Info--зона
Найдено 1 программисты Stlink
Сериал: 523F71065177555563306153F
openocd: "\ x52 \ x3f \ x71 \ x06 \ x51 \ x77 \ x55 \ x56 \ x33 \ x06 \ x15 \ x3f"
Flash: 524288 (PageSize: 16384)
SRAM: 196608
Chipid: 0x0413
descr: устройство F4

Так что это F4 !

Ваше здоровье,
Руди

Луде
Пн 10 октября 2016 г., 19:21
Привет, ребята !

Наконец -то хороший новый !

Все мои доски сейчас работают. Как предложили многие из вас, внешний наблюдатель часов
не работал должным образом (или, скорее всего, внешний кристалл или конденсаторы нагрузки не подходят).

В любом случае, я внес несколько изменений в подпрограмму setsysclock () для выбора HMI, а также изменил
способ немного разместить, чтобы немного автоматизировать весь процесс. Кстати, это выглядит все
Библиотеки, на которые я смотрел, используйте точно одну и ту же подготовку setsysclock () с очень небольшими изменениями ....

Большое спасибо !
Руди

Rogerclark
Пн 10 октября 2016 г., 21:16
Руди

Хорошо. Это не первый раз, когда мы видели проблему с хитрыми внешними часами ;-)

Можете ли вы разместить обновленный / улучшенный код часов

Луде
Вт 11 октября 2016 г. 6:40
Привет, Роджер,

да, абсолютно, это прикреплено ниже. Помимо добавления дополнительного HSI
Заключение, я также добавил сброс устройства, если PLL не
стать готовым ...
Я не уверен, насколько это хорошо, но я думаю, что это даст
Лучшие шансы запуститься, чем просто сидеть в бесконечной петле ...

Я думаю, что этот код все еще нуждается в большей работе. Я думаю как минимум
Эти функции должны иметь два входа: 1) выберите HSI/HSE;
2) позволить пользователю указать частоту тактовой частоты, которую он хочет (но это
сломается задом наперед).

В дизайне HW мы довольно часто используем сценарии TCL для настройки IP
Ядро перед синтезом. Я думаю, было бы очень полезно иметь
инструмент конфигурации, то есть независимый от платформы, который может
генерировать часть кода запуска или может быть лишь немного
параметры ...

Если у меня будет некоторое время, я мог бы начать писать такой инструмент ...

Кстати, этот файл кодового Snapplet ниже имеет ST Copyright ...

С наилучшими пожеланиями,
Руди

/** * @brief Configures the System clock source, PLL Multiplier and Divider factors, * AHB/APBx prescalers and Flash settings * @Note This function should be called only once the RCC clock configuration * is reset to the default reset state (done in SystemInit() function). * @param None * @retval None */ #define USE_HSI static void SetSysClock(void) { /******************************************************************************/ /* PLL (clocked by HSE) used as System clock source */ /******************************************************************************/ __IO uint32_t StartUpCounter = 0; __IO uint32_t F_WANT, PLL_M, PLL_N, PLL_P, PLL_Q, PLL_VCO, PPRE2_DIV, PPRE1_DIV; /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */ RCC->APB1ENR |= RCC_APB1ENR_PWREN; //PWR->CR |= PWR_CR_VOS; Leave at Default, no need to modify /* Enable HSI/E */ #ifdef USE_HSI RCC->CR |= ((uint32_t)RCC_CR_HSION); #else RCC->CR |= ((uint32_t)RCC_CR_HSEON); #endif /* Wait till HSI/E is ready and if Time out is reached exit */ #ifdef USE_HSI while(((RCC->CR & RCC_CR_HSIRDY) == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)) StartUpCounter++; #else while(((RCC->CR & RCC_CR_HSERDY) == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)) StartUpCounter++; #endif if(StartUpCounter >= HSE_STARTUP_TIMEOUT) NVIC_SystemReset(); // -------------------------------------------------------------- // PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N // e.g. PLL_VCO = 16000000 / 16 * 336 = 336 Mhz F_WANT = 168; // Desired Frequency (MHz) #ifdef USE_HSI PLL_M = HSI_VALUE / 1000000; #else PLL_M = HSE_VALUE / 1000000; #endif // This might need adjustment PLL_P = 2; // Valid valus are: 2, 4, 6, 8 PLL_VCO = F_WANT * PLL_P; // Limit between 100 and 432 MHz while(PLL_VCO < 100) PLL_P++; while(PLL_VCO > 432) PLL_P--; while(PLL_P!=2 && PLL_P!=4 && PLL_P!=8 && PLL_P!=16) PLL_P++; PLL_N = PLL_VCO; // -------------------------------------------------------------- PLL_Q = PLL_VCO / PLL_P / 48; // Should be 48 MHz for USB to work, can be lower if only need SDIO & Rand Num Generator // Valid values are 2-15 if((PLL_Q * 48) < PLL_VCO) PLL_Q++; // -------------------------------------------------------------- PPRE2_DIV = PLL_VCO/PLL_P/90; // APB high-speed prescaler (APB2), not to exceed 90 MHz // Valid values are 2, 4, 8, 16 while(PPRE2_DIV!=2 && PPRE2_DIV!=4 && PPRE2_DIV!=8 && PPRE2_DIV!=16) PPRE2_DIV++; // -------------------------------------------------------------- PPRE1_DIV = PLL_VCO/PLL_P/45; // APB Low speed prescaler (APB1), not to exceed 45 MHz // Valid values are 2, 4, 8, 16 while(PPRE1_DIV!=2 && PPRE1_DIV!=4 && PPRE1_DIV!=8 && PPRE1_DIV!=16) PPRE1_DIV++; #ifdef USE_HSI if ((RCC->CR & RCC_CR_HSIRDY) != RESET) #else if ((RCC->CR & RCC_CR_HSERDY) != RESET) #endif { /* HCLK = SYSCLK / 1*/ RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // Looks like there is no need to adjust this. /* PCLK2 = HCLK / PPRE2_DIV */ RCC->CFGR |= (PPRE2_DIV & 0x07) << 13; /* PCLK1 = HCLK / PPRE1_DIV */ RCC->CFGR |= (PPRE1_DIV & 0x07) << 10; /* Configure the main PLL */ #ifdef USE_HSI RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (PLL_Q << 24); #else RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); #endif /* Enable the main PLL */ RCC->CR |= RCC_CR_PLLON; /* Wait till the main PLL is ready */ StartUpCounter = 0; while(((RCC->CR & RCC_CR_PLLRDY) == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)) StartUpCounter++; if(StartUpCounter >= HSE_STARTUP_TIMEOUT) NVIC_SystemReset(); /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ // FLASH->ACR = FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_5WS; FLASH->ACR = FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_PRFTEN | FLASH_ACR_LATENCY_5WS; // FIX_ME RU /* Select the main PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= RCC_CFGR_SW_PLL; /* Wait till the main PLL is used as system clock source */ while(((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL) && (StartUpCounter != HSE_STARTUP_TIMEOUT)) StartUpCounter++; if(StartUpCounter >= HSE_STARTUP_TIMEOUT) NVIC_SystemReset(); } else { /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ } }

Rogerclark
Вт 11 октября 2016 г., 7:02
Привет, Руди

Я думаю, чтобы обновить Libmaple, нам нужно изменить код в досках.CPP для каждого варианта
static void setup_clocks(void) { // Turn on HSI. We'll switch to and run off of this while we're // setting up the main PLL. rcc_turn_on_clk(RCC_CLK_HSI); // Turn off and reset the clock subsystems we'll be using, as well // as the clock security subsystem (CSS). Note that resetting CFGR // to its default value of 0 implies a switch to HSI for SYSCLK. RCC_BASE->CFGR = 0x00000000; rcc_disable_css(); rcc_turn_off_clk(RCC_CLK_PLL); rcc_turn_off_clk(RCC_CLK_HSE); wirish::priv::board_reset_pll(); // Clear clock readiness interrupt flags and turn off clock // readiness interrupts. RCC_BASE->CIR = 0x00000000; // Enable HSE, and wait until it's ready. rcc_turn_on_clk(RCC_CLK_HSE); while (!rcc_is_clk_ready(RCC_CLK_HSE)) ; // Configure AHBx, APBx, etc. prescalers and the main PLL. wirish::priv::board_setup_clock_prescalers(); rcc_configure_pll(&wirish::priv::w_board_pll_cfg); // Enable the PLL, and wait until it's ready. rcc_turn_on_clk(RCC_CLK_PLL); while(!rcc_is_clk_ready(RCC_CLK_PLL)) ; // Finally, switch to the now-ready PLL as the main clock source. rcc_switch_sysclk(RCC_CLKSRC_PLL); }

Луде
Чт 13 октября 2016 г., 2:43
Привет, Роджер,

Я в замешательстве. Вы хотели продолжать работать над библиотеками, которые вы поддерживаете ?

Если да, позвольте мне взглянуть еще один, потому что мне все еще не повезло с ними. Но
Если вы хотите держать их в курсе, я был бы рад продолжить в порту F40X ...

Дайте мне несколько дней, чтобы догнать некоторые другие предметы, а затем я опубликую
Обновление рутины выше ...

Спасибо,
Руди

Rogerclark
Чт 13 октября 2016 г. 3:44
Привет, Руди

Я посмотрел на опубликованный вами код, но он не выглядел как существующий код F1 или F4 (насколько это возможно), выглядело так, как будто вы добавили новую функцию для настройки часов и, вероятно, изменили другие части кода, чтобы вызвать ваша новая функция вместо существующего кода настройки часов.

Поэтому я пытался выяснить, как я мог бы объединить ваш новый код с существующим кодом, просто чтобы добавить возможность включить тайм -аут в начале HSE, и перевернуть назад и попробуйте еще раз, если HSE не начал перед тайм -аутом

Однако я, возможно, не понял, что вы сделали.

В любом случае, эта проблема вряд ли происходит с кем -либо еще, так что это не критическое исправление и может быть добавлено в мой очень долго, чтобы сделать список ;-)

Луде
Чт 13 октября 2016 г., 11:15
Привет, Роджер,

Вот обновленная функция SetSysClock. Я не думаю, что я что -то исправил, просто попытался переименовать
и сделать некоторые параметры явно заметными - в основном для моего собственного понимания.

Единственная «новая» вещь - это возможность выбрать HSI. Эта рутина взята из Kodunio,
Но я думаю, что в основном идентична тому, что находится внутри ваших библиотек.

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

У меня сложилось впечатление, что вы не думали, что это стоит, пока внести какие -либо изменения
Поскольку St в конечном итоге выйдет с поддержкой ....

С наилучшими пожеланиями,
Руди

/** * @brief Configures the System clock source, PLL Multiplier and Divider factors, * AHB/APBx prescalers and Flash settings * @Note This function should be called only once the RCC clock configuration * is reset to the default reset state (done in SystemInit() function). * @param None * @retval None */ #define PLL_P_ADJ(x) (x == 2 ? 0x0 : \ x == 4 ? 0x1 : \ x == 6 ? 0x2 : 0x3) #define APB_PRE_ADJ(x) (x == 1 ? 0x0 : \ x == 2 ? 0x4 : \ x == 4 ? 0x5 : \ x == 8 ? 0x6 : \ x == 16 ? 0x7 : 0) #define AHB_PRE_ADJ(x) (x == 1 ? 0x0 : \ x == 2 ? 0x8 : \ x == 4 ? 0x9 : \ x == 8 ? 0xa : \ x == 16 ? 0xb : \ x == 64 ? 0xc : \ x == 128 ? 0xd : \ x == 256 ? 0xe : \ x == 512 ? 0xf : 0) static void SetSysClock(void) { /******************************************************************************/ /* PLL (clocked by HSE) used as System clock source */ /******************************************************************************/ __IO uint32_t StartUpCounter = 0; __IO uint32_t F_WANT, PLL_M, PLL_N, PLL_P, PLL_Q, PLL_VCO, HPRE, SYS_CLK, AHB_CLK, PPRE2_DIV, PPRE1_DIV; /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */ RCC->APB1ENR |= RCC_APB1ENR_PWREN; // PWR->CR |= PWR_CR_VOS; Leave at Default, no need to modify /* Enable HSI/E */ #ifdef CLKSRC_HSI RCC->CR |= ((uint32_t)RCC_CR_HSION); #else RCC->CR |= ((uint32_t)RCC_CR_HSEON); #endif /* Wait till HSI/E is ready and if Time out is reached exit */ #ifdef CLKSRC_HSI while(((RCC->CR & RCC_CR_HSIRDY) == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)) StartUpCounter++; #else while(((RCC->CR & RCC_CR_HSERDY) == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)) StartUpCounter++; #endif if(StartUpCounter >= HSE_STARTUP_TIMEOUT) NVIC_SystemReset(); // -------------------------------------------------------------- // PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N // e.g. PLL_VCO = 16000000 / 16 * 336 = 336 MHz F_WANT = 168; // Desired System Frequency (MHz) #ifdef CLKSRC_HSI PLL_M = HSI_VALUE / 1000000; // 16 MHz default #else PLL_M = HSE_VALUE / 1000000; // 25 MHz default #endif // This might need adjustment PLL_P = 2; // Valid valus are: 2, 4, 6, 8 PLL_VCO = F_WANT * PLL_P; // Limit 100 and 432 MHz - Initial setting while(PLL_VCO < 100) PLL_P++; while(PLL_VCO > 432) PLL_P--; while(PLL_P!=2 && PLL_P!=4 && PLL_P!=8 && PLL_P!=16) PLL_P++; PLL_VCO = F_WANT * PLL_P; // Limit 100 and 432 MHz - Corrected setting SYS_CLK = PLL_VCO / PLL_P; PLL_N = PLL_VCO; // -------------------------------------------------------------- PLL_Q = PLL_VCO / 48; // Should be 48 MHz for USB to work, can be lower if only need SDIO & Rand Num Generator // Valid values are 2-15 if((PLL_Q * 48) < PLL_VCO) PLL_Q++; // -------------------------------------------------------------- // HCLK = SYS_CLK / HPRE HPRE = 1; AHB_CLK = SYS_CLK/HPRE; // -------------------------------------------------------------- PPRE2_DIV = AHB_CLK/90; // APB high-speed prescaler (APB2), not to exceed 90 MHz (Source AHB Clk) // Valid values are 1, 2, 4, 8, 16 while(PPRE2_DIV!=1 && PPRE2_DIV!=2 && PPRE2_DIV!=4 && PPRE2_DIV!=8 && PPRE2_DIV!=16) PPRE2_DIV++; // -------------------------------------------------------------- PPRE1_DIV = AHB_CLK/45; // APB Low speed prescaler (APB1), not to exceed 45 MHz (Source AHB Clk) // Valid values are 1, 2, 4, 8, 16 while(PPRE1_DIV!=2 && PPRE1_DIV!=2 && PPRE1_DIV!=4 && PPRE1_DIV!=8 && PPRE1_DIV!=16) PPRE1_DIV++; #ifdef CLKSRC_HSI if ((RCC->CR & RCC_CR_HSIRDY) != RESET) #else if ((RCC->CR & RCC_CR_HSERDY) != RESET) #endif { /* HCLK = SYSCLK / HPRE */ RCC->CFGR |= AHB_PRE_ADJ(HPRE) <<4; // Need a special translation table /* PCLK2 = HCLK / PPRE2_DIV */ RCC->CFGR |= APB_PRE_ADJ(PPRE2_DIV) << 13; /* PCLK1 = HCLK / PPRE1_DIV */ RCC->CFGR |= APB_PRE_ADJ(PPRE1_DIV) << 10; /* Configure the main PLL */ #ifdef CLKSRC_HSI RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (PLL_P_ADJ(PLL_P) << 16) | (PLL_Q << 24); #else RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (PLL_P_ADJ(PLL_P) << 16) | (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); #endif /* Enable the main PLL */ RCC->CR |= RCC_CR_PLLON; /* Wait till the main PLL is ready */ StartUpCounter = 0; while(((RCC->CR & RCC_CR_PLLRDY) == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)) StartUpCounter++; if(StartUpCounter >= HSE_STARTUP_TIMEOUT) NVIC_SystemReset(); /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ /* Latency is described in "RM0090, Reference manual, DocID018909, V1.2", Par. 3.5.1, Table 10 & 11 */ /* For a Voltage Range of 2.7 - 3.6V @168 MHz Max, 5WS are required */ /* For a Voltage Range of 2.1 - 2.4V @168 MHz Max, 7WS are required */ /* For a Voltage Range of 2.7 - 3.6V @120 MHz Max, 3WS are required */ /* For a Voltage Range of 2.1 - 2.4V @110 MHz Max, 4WS are required */ /* Reducing the operating range, will require to increase the number of WS */ /* Decreasing the max frequency will allow for shorter (smaller) WS */ FLASH->ACR = FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_PRFTEN | FLASH_ACR_LATENCY_5WS; /* Select the main PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= RCC_CFGR_SW_PLL; /* Wait till the main PLL is used as system clock source */ while(((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL) && (StartUpCounter != HSE_STARTUP_TIMEOUT)) StartUpCounter++; if(StartUpCounter >= HSE_STARTUP_TIMEOUT) NVIC_SystemReset(); } else { /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ NVIC_SystemReset(); } }

Rogerclark
Чт 13 октября 2016 г., 8:01 вечера
Руди

Я подозреваю, по разным причинам, что ядро ​​Libmaple будет продолжать использоваться в течение длительного времени.

Поэтому я постараюсь применить ваше исправление для этого (а также другие исправления, которые мне отправляют люди, в том числе как PRS и т. Д.)

Но я должен расставить приоритеты, к каким изменениям я получаю в первую очередь, так как я в данный момент не хватает времени

Луде
Сб 15 октября 2016 г., 17:47
Роджер,

Почему бы вам не применить какие -либо исправления ...

Позвольте мне заставить все это работать, а затем отправить вам полную рабочую версию, которую вы можете интегрировать со своими изменениями ...

Сегодня я нашел еще несколько ошибок, которые должны быть исправлены ...

Ваше здоровье,
Руди

Rogerclark
Сб 15 октября 2016 г. 8:05 вечера
ХОРОШО.

Нет спешки....

клавиатура
Солнце 06 ноября 2016 12:27
@Luudee,

У меня есть вопрос, если я могу после того, как я перепроизводил, суммирую проблемы, с которыми вы столкнулись.

В вашем Почта Вы указали, что использовали STM32F407VET6 MINI. Эти STM32F407VET6 MINI Доски представляли проблемы. Некоторые доски хорошо запустили ваш эскиз после питания или сброса, а другие - не. Вы нашли источник проблем, которые появляются, вероятно, в коде Lowel для STM32.

Мой вопрос в том, чувствуете ли вы STM32F407VET6 MINI это доска, которую кто -то, только начавший в STM32, сделал лишь немного, что за последние несколько недель на Adruino, и с длинным системным техническим задним путем будет в порядке с STM32F407VET6 MINI? Я спрашиваю, как STM32F407VET6 MINI Является ли один из немногих досок STM32, которые я должен рассмотреть для чего -то важного, мне нужно построить для меня. Важное устройство для личной потребности.

Я заказал Maple Mini и закажу еще один байт на один через несколько дней. Maple Mini может быть едва ли иметь наименьшее количество булавок, которые мне нужны для долгосрочной цели, поскольку я добавляю на устройства к желаемому конечному результату. Конечный результат потребуется не менее 12ADC и не менее 12 цифровых, после SPI для SD Card и I2C для RTC и других устройств I2C. Я начну с подмножества желаемой конечной цели.

Теперь я знаю из какого -то кода, который я написал на прошлой неделе как фреймворк, чтобы помочь мне размер Flash/Ram The Maple Mini может просто втиснуться с 20 -километровым ОЗУ. Flash Maple Mini 64K или 128K будет отлично подходит для рассматриваемого кода. Я надеюсь, что RISC и обработка тактовой скорости STM32 будут соответствовать другим требованиям, которые у меня есть. Maple Mini, который я заказал. Там не будет дисплея, или если есть дисплей, отображение символов для отображения значений один или два раза в минуту. Вероятно, отображение символов 16x20. Таким образом, нет графики или таких требований, которые могут добавить к требованиям к обработке MCU в этом отношении.

Я смотрю на несколько других досок STM32, у которых есть еще несколько булавок, чтобы гораздо больше булавок, чем мне, но больше лучше, чем недостаточно. У меня есть еще несколько более обычных потребностей хобби, для которых Maple Mini будет отлично подходит, и я выбираю Adruino, поскольку Maple Mini стоит меньше, и у меня есть больше, чем большинство типичных устройств Adruino, обычно доступных, и многие используют. У меня есть один Atmega Adruino, и еще один на пути (общий и не так распространенный типичный Adruino), чтобы позволить мне сравнивать код/библиотеки, если у меня есть какие -то проблемы с каким -либо портированием или составлением библиотек в STM32, что наличие Adruino на основе Atmega поможет Я в том, чтобы выяснить изгибы в библиотеках/коде, которые могут быть недоступны в STM32 и/или нуждаются в настройке для MCU на основе STM32.


С уважением,

Джон Л. Мужчины
Торонто, Онтарио
Канада
06 ноября 2016 07:23
06 ноября 2016 г. 07:31 Обычные посты. JLM

Луде
Солнце 13 ноября 2016 г. 13:24
Привет Джон,

Извините, я не в сети так часто в эти дни.

> @Luudee,
>
> У меня есть вопрос, если я могу после того, как я перепроизводил, суммирую проблемы, с которыми вы столкнулись.
>
> В своем посте вы указали, что использовали Mini STM32F407VET6. Эти мини -доски STM32F407VET6 представляли проблемы. Некоторые доски хорошо запустили ваш эскиз после питания или сброса, а другие - не. Вы нашли источник проблем, которые появляются, вероятно, в коде Lowel для STM32.


Нет, это не была проблемой кода. Внешний генератор HSE не работает на некоторых
моих досок. Для меня переход на внутренний (на основе R/C) генератор HSI не является проблемой.
Так это то, что я сейчас использую.


> Мой вопрос: чувствуете ли вы, что Mini STM32F407Vet6 - это доска, которую кто -то только начинает в STM32, сделал лишь немного утомившегося в последней неделе на Adruino, и с длинным системным обработкой будет хорошо с STM32F407Vet6 mini? Я спрашиваю, поскольку Mini STM32F407Vet6 - одна из нескольких досок STM32, которые я должен рассмотреть для чего -то важного, мне нужно построить для меня. Важное устройство для личной потребности.

Доска «Mini» - более или менее доска голой, только разъемы MCU, USB и SD Card.
Нет другого "багажа" - это то, что я хотел. Мне также нужен 407 по причинам производительности.

Если ваше приложение требует мощности 407, и вам не нужны другие периферийные устройства/интерфейсы,
что это хорошая доска. Но будьте готовы к многим головным болям. Все открытые/бесплатные библиотеки для
407 - беспорядок. Я думаю, что есть более чистая стабильная поддержка для '103.
>
> Я заказал Maple Mini и закажу еще один байт на один через несколько дней. Maple Mini может быть едва ли иметь наименьшее количество булавок, которые мне нужны для долгосрочной цели, поскольку я добавляю на устройства к желаемому конечному результату. Конечный результат потребуется не менее 12ADC и не менее 12 цифровых, после SPI для SD Card и I2C для RTC и других устройств I2C. Я начну с подмножества желаемой конечной цели.
>
> Теперь я знаю из какого -то кода, который я написал на прошлой неделе как фреймворк, чтобы помочь мне размер Flash/Ram The Maple Mini может просто втиснуться с 20 -километровым ОЗУ. Flash Maple Mini 64K или 128K будет отлично подходит для рассматриваемого кода. Я надеюсь, что RISC и обработка тактовой скорости STM32 будут соответствовать другим требованиям, которые у меня есть. Maple Mini, который я заказал. Там не будет дисплея, или если есть дисплей, отображение символов для отображения значений один или два раза в минуту. Вероятно, отображение символов 16x20. Таким образом, нет графики или таких требований, которые могут добавить к требованиям к обработке MCU в этом отношении.
>
> Я смотрю на несколько других досок STM32, у которых есть еще несколько булавок, чтобы гораздо больше булавок, чем мне, но больше лучше, чем недостаточно. У меня есть еще несколько более обычных потребностей хобби, для которых Maple Mini будет отлично подходит, и я выбираю Adruino, поскольку Maple Mini стоит меньше, и у меня есть больше, чем большинство типичных устройств Adruino, обычно доступных, и многие используют. У меня есть один Atmega Adruino, и еще один на пути (общий и не так распространенный типичный Adruino), чтобы позволить мне сравнивать код/библиотеки, если у меня есть какие -то проблемы с каким -либо портированием или составлением библиотек в STM32, что наличие Adruino на основе Atmega поможет Я в том, чтобы выяснить изгибы в библиотеках/коде, которые могут быть недоступны в STM32 и/или нуждаются в настройке для MCU на основе STM32.


> С уважением,
>
> Джон Л. Мужчины
> Торонто, Онтарио


С наилучшими пожеланиями,

Руди

victor_pv
Вт 21 февраля 2017 г. 3:47
Лудеи написал:Привет, ребята,

Спасибо за все сообщения !

Итак, я сделал немного прогресса ! Библиотеку Кодуино было на удивление легко установить
вверх и использовать.

Edoglando, смешно, вы должны спросить ! Из 10 досок, которые у меня есть, 4 кажутся
Не любить программирование и не выполнять мой эскиз для тестирования. Другой
6 кажется работает.

Теперь у меня 6 мигающих досок и 4 «мертвых». Мертвые
Интересно, и мне интересно, является ли это программным «ошибкой» или «функцией». Я могу
Программируйте вспышку и прочитайте, даже после велосипедного велосипеда, но это делает
не выполнять мой простой мигающий набросок. Я также пытался заставить
Использование HSI вместо HSE, чтобы избежать внешних проблем кристаллов. Не уверен, что это
распространился сейчас или нет, или даже если он станет эффективным при использовании
DFU, или я должен использовать ST-Link.

Я идея, ребята ? Звучит как странная проблема, а 4 доски с одинаковыми
проблема, также странная ...

Кстати, вчера вечером уничтожил второй адаптер св. Что не так с этими
вещи, ? Похоже, LDO мертв, если он питается на внешней батареи, кажется
работать:/

Большое спасибо,
Руди

ZMEMW16
Вт 21 февраля 2017 г. 6:15
Похоже, нет «стиха» для общего F407 в досках.текст

эта доска из https: // www.aliexpress.com/item/stm32f4 ... 0.0.Z0lbzh

очень любезно они дают https: // www.aliexpress.com/item/stm32f4 ... 0.0.Z0lbzh

Если вы отключитесь там и получите 39 -метровый Zip, рассеяние дает отсутствующую центральную ошибку :(
Я сделал переименование, чтобы потерять места и сократить его
затем zip -FF STM32F407VET6VGT6.zip -o 0123456.zip