Перейти к содержанию
    

b-volkov

Свой
  • Постов

    199
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о b-volkov

  • Звание
    Частый гость
    Частый гость

Контакты

  • Сайт
    Array

Информация

  • Город
    Array

Посетители профиля

2 728 просмотров профиля
  1. У меня явно другой HAL. Вот кусок из stm32f4xx_hal_eth.h с API: А вот как выглядит Release_Notes.html от куба: У Вас те же версии?
  2. Скачал с ST.com STM32Cube_FW_F4 _V1.27 и Description of STM32F4 HAL and low-layer drivers (UM1725) v7.0. Стал разбираться с модулем Ethernet и обнаружил, что как минимум API не совпадает: некоторых функций, приведенных в документации нет в библиотеке или есть похожие по смыслу, но с другим названием. Например, HAL_ETH_GetReceivedFrame() я вообще не нашел, HAL_ETH_TransmitFrame(), похоже, переделали в HAL_ETH_Transmit() и.т.д. Т.е., описание от какой-то другой версии HAL! Как такое может быть, если и HAL и доку я скачивал с одной страницы? И что теперь делать, как подбирать версию документации к версии куба (или наоборот)?
  3. Да, с буковкой я ошибся, нужен ZGT6, просто не было под рукой документации, когда писал.
  4. Пару лет назад заложил несколько проектов на STM32f746VGT6 (144пина). Еще до санкций эта микросхема стала редкостью, с трудом нашли три десятка на пробные партии. Поставщики объясняли это закрытыми из-за пандемии заводами. То, что на данный момент их не найти в стране - ожидаемо, но и на зарубежных площадках они пока так и не появились, если не считать небольшие партии по спекулятивным ценам. Кто-нибудь на форуме в курсе, какие перспективы возобновления поставок сего чипа? Я сейчас стою перед дилеммой, или подождать еще годик, пока хватит сделанных ранее девайсов, или сразу заняться редизайном под другой контроллер?
  5. Разобрался, вроде. Собственно, я из STM32Cube и взял код инициализации, но не учел, что HAL_RTC_Init() вызывает пользовательскую функцию HAL_RTC_MspInit(), в которой происходила инициализация backup-домена и LSE. У меня в проекте ее не было ,стояла просто "затычка". Всем спасибо!
  6. Сначала попробовал проинициализировать RTC сам, на уровне регистров: PWR->CR1 |= PWR_CR1_DBP; RCC->BDCR |= RCC_BDCR_RTCEN; RCC->BDCR &= ~RCC_BDCR_RTCSEL_1; RCC->BDCR |= RCC_BDCR_RTCSEL_0; //RTC->WPR = 0xCA; //RTC->WPR = 0x53; RTC->ISR |= RTC_ISR_INIT; while((RTC->ISR & RTC_ISR_INITF) == 0) { cnt++; } RTC->ISR &= ~RTC_ISR_INIT; Флаг INITF так и не выставился. Тогда решил не выпендриваться, а воспользоваться HALом. Нашел в инете пример: RCC_OscInitTypeDef RCC_OscInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; HAL_RCCEx_PeriphCLKConfig (&PeriphClkInitStruct); if (HAL_IS_BIT_CLR(RTC->ISR, RTC_FLAG_INITS)) { RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.LSIState = RCC_LSI_OFF; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; HAL_RCC_OscConfig (&RCC_OscInitStruct); __HAL_RCC_RTC_ENABLE(); hRTC->Instance = RTC; hRTC->Init.HourFormat = RTC_HOURFORMAT_24; hRTC->Init.AsynchPrediv = 128; hRTC->Init.SynchPrediv = 256; hRTC->Init.OutPut = RTC_OUTPUT_DISABLE; hRTC->Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hRTC->Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; result = HAL_RTC_Init (hRTC); if (result != HAL_OK) { ... } } Увы, функция HAL_RTC_Init() возвращает ошибку (INITF , естественно, то же не устанавливается). Правда в этом случае часики все-таки начинают тикать, секунды/минуты идут как и положено. Я , было, обрадовался, бог с ней с ошибкой, часы то работают. Но все оказалось не так просто, функция установки времени HAL_RTC_SetTime работает глючно: значение часов записывается на 1 больше, минуты и секунды записываются правильно только если значение меньше 16, иначе в регистре оказывается другое число. Короче, полный бред. Если у кого-то есть работающий код инициализации RTC, буду признателен. PS. Вряд ли проблема в кварце, часы то идут, но как проверить, что он генерит? Щуп даже через резистор 10МОм останавливает часы. И какой там должен быть постоянный уровень? У меня всего 300мв.
  7. Перепаял, заработало. Всем спасибо!
  8. Странно только он как-то помер, обычно трупы процессоров жрут и греются, а этот - холодный :). Ну раз других идей нет, включаю фен...
  9. Всех с прошедшими! Да, поначалу я включал без AVDD, но потом бросил перемычку . Это могло угробить камень? Питание проверял. На ресете 1, при чем она идет с самого входа. Запаяно все правильно, как и на предыдущей плате. Да и редизайн то был не ахти какой, несколько свободных выводов развел для дополнительного функционала и несколько других переназначил, что бы этот самый функционал освободить.
  10. После очередного редизайна платы под STM32F746 (144pin) столкнулся с тем, что камень не проявляет никаких признаков жизни, а именно: потребление по Vdd порядка 100 мка, напряжение на выходе встроенного регулятора (пины Vcap)отсутствует, не работает кварц и JTAG (не программируется). На плате пока распаян только сам микроконтроллер с обвязкой, т.е. все его выводы кроме питания, кварца и JTAG висят в воздухе. Похоже, он глубоком дауне, если, конечно, живой. В трех предыдущих ревизиях платы с подобным не сталкивался. Я понимаю, что причин может быть миллион: ошибка в схеме, сопли при пайке, которых не видно и т.д. Но не хочется начинать с перепайки или тотальной прозвонки. По этому вопрос: могут ли ошибки включения привести камень в такое состояние? Не знаю, на какую-то хитрую ногу подал не тот уровень... В даташите нашел только про вывод BYPASS_REG, но в моем LQFP144 таковой отсутствует.
  11. То, что область ТСМ не кешируется, я знал, а вот о том, что кэш плохо дружит с DMA не подумал... Теперь понятно, еще раз спасибо.
  12. В обоих случаях задавалось выравнивание 4 байта.
  13. Почитал повнимательнее доки. В самом деле, первые 64к ОЗУ, это Tightly Coupled Memory. После того, как я принудительно расположил стек в ТСМ области, а все остальное выше нее (в SRAM1), то первый глюк с возвратом из подпрограмм пропал. Это я могу понять, потому что раньше стек оказывался на границе двух разных ОЗУ с разными шинами. Следующим шагом я запихнул в первые 64к еще и буфера ethernet и чудо, он то же стал нормально работать. А вот этого я понять не смог. в RM0385 черным по белому написано: 2.1.10 Ethernet DMA bus ... The targets of this bus are data memories: internal SRAM1, SRAM2 and DTCM (through the AHBS bus of Cortex®-M7) internal Flash memory, and external memories through the FMC or Quad SPI. Да, ТСМ быстрее, ну пусть бы отклик был дольше при размещении в SRAM1, но глючить-то зачем? Ну это уже не так важно, теперь, по крайней мере, стало понятно, как мне распределять память. Спасибо за ответы!
  14. Проект под IAR, ОСРВ нет, только HAL. Используется только главный стек и его указатель (в отладчике обозначается как SP_main) инициализируется правильно. Стек процессов всегда нулевой. За границей та же RAM, иначе причина была бы ясна. Программа не то, что бы совсем не работает, она глючит. Пока нашел две ситуации, в которых это приходит: 1.У меня есть функции в которых используется выключение/включение кеширования данных (записываю данные в CPLD через FMC в реальном времени). При входе в эти функции в стек помещается неправильный адрес возврата, соответственно, при выходе программа улетает фиг знает куда. 2. Глючит HAL, в частности работа с ETHERNET: не получает входящие пакеты, передает один кадр два раза подряд. У меня большое подозрение, что в программе есть какой-то баг, проявляющийся только при определенном расположении стека (или вообще, при определенном распределении ОЗУ).
×
×
  • Создать...