Jump to content

    

Baser

Свой
  • Content Count

    1579
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Baser

  • Rank
    Просто Che
  • Birthday 04/08/1967

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    ExUSSR

Recent Profile Visitors

5318 profile views
  1. Цифры интересные, но есть проблема, что ресурс сильно зависит от температуры чипа и зависимость там сильно нелинейная. При комнатной температуре цифры одни, а попадет в жаркий климат, где будет +40..+50С и они могут упасть на пару порядков. В даташите то ресурс приведен для всего рабочего температурного диапазона.
  2. Чтение EEPROM в STM32L152

    Ну, то что стирается только словами (4х) или двойными словами (8х) это описано у них понятно. Там суммарно непонятно описан их весь зоопарк команд. Я тоже с этим разбирался, почитайте, может не видели: EEPROM в STM32L151 Стирание в явном виде нужно только для Cat.1 devices. Для всех других нет ограничений команд записи. Можно в ненулевой байт/полуслово/слово писать хоть нули, хоть другой код, все работает. Поэтому я применяю только команды записи. Причем для МК и HAL все равно, вызовите вы функцию "быстрой записи" или "обычной". Там все равно все одинаково. Я применяю быструю, т.к. она в явном виде очищает бит быстрой записи.
  3. На самом деле это все дело привычки. Когда это все только начали ломать - вот тогда было ужасно. Пришлось на полгода-год покинуть форум, пока устаканится. Сейчас максимально приблизили к прежнему виду и функционалу, и если вы "Больше ничего не заметили", то это уже большая похвала владельцам Меня вот больше всего огорчает то, что в "процессе" частично накрылись архивы. Большинство старых ссылок не работает. Искал недавно один старый топик - следы затерялись... Вот это печально А к внешнему виду привыкните.
  4. Какое-то время назад тоже потратил несколько часов на поиск решения подобной задачи "преобразовать макрос в строку". Ответ получился отрицательный - средствами языка Си это невозможно. Вот, в справке по GCC есть такая фраза: "There is no way to convert a macro argument into a character constant." И проблема в том, что как уже сказали выше, препроцессор только осуществляет макрозамену одних выражений на другие. А все вычисления потом проводит уже компилятор. А как только препроцессор превращает выражение в строку, то компилятор согласно правилам это выражение больше не трогает. В результате имеем: если результатом макроподстановки была константа (уже в явном виде), то её можно преобразовать в строку, если же результатом макроподстановки было выражение, то его тоже можно превратить в строку, только оно и останется "текстовым выражением", т.к. строки компилятор уже не обрабатывает. Где то даже читал, что были попытки написать "несколько-проходный" компилятор, чтобы препроцессор+компилятор вызывались дважды для решения подобных проблем. Но поскольку это не было стандартизовано, то все так и осталось как есть...
  5. STM32L1XX - свой загрузчик

    Можно настраивать или в загрузчике или в приложении, или и там и там, важно делать это корректно. Я привел одно из возможных решений. Никто не мешает не запрещать SystemInit в приложении, а переопределить в ней define VECT_TAB_OFFSET. Это будет другое решение, тоже рабочее. Ссылка приведена в моем сообщении на ИАРовский App.Notes. Там это идет отдельным пунктом. Другое дело, что эта рекомендация в общем случае надуманная, что я и отметил. Но вполне могут быть и нюансы там, где присутствуют локи или необходима строгая последовательность действий. Это нужно смотреть на конкретный процессор.
  6. STM32L1XX - свой загрузчик

    Я вижу, что у вас большой опыт разработки сетевых интерфейсов. Но "каждый меряет по себе и своим задачам". И вы слишком углубились в свои и взгляд зашорился. Вам нужно оглядеться вокруг себя. Если вы это сделаете, то обнаружите, что ваши задачи - это узенькая отраслевая ниша, а вокруг простирается огромный мир с миллионами совершенно других задач и других условий. Просто физика. Если сектор флеша разрешен для записи и в программе есть функции программирования флеша, то есть вероятность порчи содержимого флеша. Может гроза была и молнии рядом били. Может рабочие подключили сварку рядом с прибором. Мало ли что. Возможность то есть... Смотрим выше: Просто физика... и так далее... Опять же - не переживайте вы так, вам не повезло работать в такой фирме. Нашей фирме удалось 20 лет до моего прихода и 10 лет с моим участием продавать промышленную измерительную аппаратуру по всему миру с контроллерами ва-аще без загрузчиков. И представьте себе: никто не умер и даже не разорился И только сейчас с переходом на АРМы я добавил загрузчик исключительно по собственной инициативе Во-первых юзеру ничего доверять вообще нельзя - испортит все. А во-вторых, я согласен, что если безопасное обновление не нужно, то вообще нет смысла заморачиваться с загрузчиками: "и так хорошо..."
  7. STM32L1XX - свой загрузчик

    Вот вам полезная ссылка, там все хорошо расписано и есть ньюансы отладки в среде ИАРа: Creating a bootloader for Cortex-M using IAR Embedded Workbench for ARM И еще: инициализацию различных регистров не рекомендуют проводить дважды, в бутлоадере и прикладной программе. Но для большей части регистров это не приводит к проблемам. Исключение - начальная инициализация ядра, функция SystemInit(), которая вызывается при стартапе еще до вызова функции main(). Она вызывается в функции Reset_Handler() в файле startup_stm32l...xc.s. В прикладной программе вызов этой функции нужно запретить, так как она сбрасывает установленный в бутлоадере регистр SCB_VTOR.
  8. STM32L1XX - свой загрузчик

    Раньше это называлось - "два мира, две политики". Я конечно понимаю, что такая идеология в отдельных проектах может быть оправдана (перепрошивка с применением функций прикладной программы), но рекомендовать такое направо и налево - это вы зря. В описанном вами вашем случае это приходится делать, но таких случаев - 1 из 100. Что вы предлагаете: Загрузчик может обновляться (т.е. может запороть себя при сбое). При отсутствии рабочей прикладной программы обновиться нельзя. На это могу только сказать: "Такой загрузчик нам не нужен!!!" Поддерживаю точку зрения Сергея Борща и Антохи. Загрузчик должен работать сам по себе без приложения. И должен быть защищен от перезаписи и от чтения.
  9. Ну, при таком токе нагрузки по 3.3В, ставить последовательно линейный стабилизатор, конечно, не имеет смысла. Так что присоединяюсь к совету Сергея Борща, считайте экономику. Если цена этого десятка микросхем, которые могут помереть при отказе стабилизатора достаточно велика, можно подумать о более сложном SEPIC-е. Иначе - простой Buck. з.ы. а тиристоры я тоже в таких местах не люблю...
  10. Вы бы озвучили потребление схемы по 3.3 В. А то может оказаться, что оно достаточно мало, и оптимальным решением по цене/КПД/надежности, действительно будет связка из Step-Down DC/DC и мелкого линейного стабилизатора с достаточным входным напряжением и защитой от перегрева. При "выбивании" импульсника, линейный начнет выключаться/включаться от перегрева и спасет все остальное. Я такой вариант иногда применяю.
  11. Нет, это разные вещи. SEPIC - это именно топология преобразователя, а buck-boost - это свойство топологии, которая позволяет получать выходное напряжение меньше или больше входного. Свойство buck-boost присуще нескольким топологиям. Почитайте по поиску на "dc dc converter topologies" Основные маломощные топологии: Step-Down (Buck), Step-Up (Boost) с одним ключем, гальванически неразвязанные. Step-Up/Down (Buck-boost) c двумя ключами, гальванически неразвязанные. Flyback с трансформаторной развязкой. SEPIC и ZETA с конденсаторной развязкой.
  12. В английской Википедии наиболее полное описание групп ТКЕ: Ceramic capacitor
  13. Встроенные в IDE дизассемблеры, как правило, не обладают хорошим интеллектом, поэтому спотыкаются об секции с данными, таблицами и тому подобным. И начинают дизассемблировать данные как код. Ессно получается лабуда. Тут нужно или глазами эти куски смотреть, или применять сторонние интерактивные дизассемблеры.
  14. Делитель на ионисторе и прямое измерение напряжения на нем не нужны. Если у вас VDDA = VDD, то измеряя питание всегда получите макс. значение АЦП. Поэтому нужно просто измерять встроенную опору и вычислять значение питания. Посмотрите на LDO с NMOS в качестве ключа. У них встроенная накачка (charge pump) для открытия NMOS. При этом само собой получается защита от реверсных токов. Типа TPS73733. Этот мощный, но может есть что поменьше. Я сейчас такой применил с подачи коллеги, правда обнаружил странную особенность: при дребезге питания на входе (0...5В) иногда эти 5В пролазят на выход :( и потом медленно спадают, ибо нагрузка маленькая. Но МК пока не погорел... А по входам и программной части ничего сказать нельзя, ибо вы не привели даже примерной частоты и длительности сигналов. Если все это медленно, то цифра в 700 мкА может оказаться просто гигантской, по сравнению с реально достижимой.
  15. Судя по всему при делителе на 1 у вас прерывание возникает еще до того, как вы настроите регистр TACCR0. Попробуйте запускать таймер после настройки: mov.w #MC_0, TACTL; Stop timer mov.w #CM_0+CCIE, TACCTL0 mov.w #10000, TACCR0 mov.w #TASSEL_2+ID_0+MC_0+TACLR, TACTL; Cfg. and Clear timer mov.w #TASSEL_2+ID_0+MC_1, TACTL; Start timer Ну и флаги прерываний на других каналах тоже видите поэтому. Ибо 0=0 А в других случаях они успевают сброситься в прерывании-заглушке.