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

adnega

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    3

Сообщения, опубликованные adnega


  1. У меня STM32F407. Эти строчки нет смысла убирать, они делают как бы ресет бэкап домену. А вся процедура инициализации, запускается только один раз. После того как часы затикали, то она игнорится. Это в первой строке инициализации.

    Т.е. если часы настроены, то указанные мной битики не взводятся?

    Эти битики сбрасываются при ресете!

  2.     // Сбросим состояние энергонезависимого домена
        RCC->BDCR |=  RCC_BDCR_BDRST;
        RCC->BDCR &= ~RCC_BDCR_BDRST;

    Вроде, все Ок.

    Попробуйте временно закомментировать эти строчки.

    Вопросик: а проц у Вас какой? А то эта тема про новый STM32F42x. Если это он - тоды ой - я с ним пока не работал.

  3. Тогда почему об этом не заботятся в библиотечной функции? Или не предупреждают?

    /** \brief  Clear Pending Interrupt
        The function clears the pending bit of an external interrupt.
        \param [in]      IRQn  External interrupt number. Value cannot be negative.
    */
    __STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
    {
      NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */
    }

    Наверное, пока произойдет возврат из прерывания (там же восстанавливаются регистры из стека, по-моему, говорится о 12 тактах, или о 6, если в новое прерывание улетает?), конвейер освободится.

    Предупреждают! "Мамой клянусь" где-то читал.

    Возврат из прерывания занимает 12 тактов, если только нет других разрешенных необработанных прерываний.

    Если есть хоть одно, сразу вызывается обработчик без восстановления стека (т.н. Tail-chaining).

  4. Если прерывание не успело обработаться до прихода следующего запроса, тогда взведется Pending бит, и после выхода из прерывания программа снова в него зайдет. Если же его стереть перед выходом, то не зайдет. Пока следующий запрос не появится. Разве не так?

    Хуже! (хотя описаное Вами тоже имеет место быть).

    Если последней инструкцией обработчика будет команда сброса флага прерывания, то из-за конвеера/работы_NVIC_с_pending/шин_процессора

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

    периферийного блока не сброшен - милости просим в повторное прерывание.

    Но горе мне: не помню, где об этом читал((

  5. Сталкивался ли кто-нибудь с прерываниями NVIC, не требующими вызова NVIC_ClearPendingIRQ() ?

     

    Помнится, в начале своего знакомства с LPC176x не зная NVIC у меня прерывание таймера срабатывало в 2 раза чаще из-за отсутствия в его конце сброса пендинга. Пришлось принять за правило, ставить в конце всех прерываний NVIC_ClearPendingIRQ(). Но сейчас обнаружил в прерывании USB_IRQHandler() биоса LPC1343 тоже отсутствие сброса пендинга. Как и в проекте NXP AN11018.zip, который очень похож на код биоса.

     

    Если кто-то знает такие тонкости сброса пендинга, подскажите, плиз.

     

    И зачем в инициализации проекта AN11018 стоит включение тактирования таймера CT32B1, хотя в коде он не используется? Остаток от другого проекта?

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

    В конце нужни либо NOPы, либо DSB. Где читал уже не помню...

  6. Я про это уже писала:

     

    Исправьте в проекте множитель частоты, переключив плату с 180 МГц на 168 МГц и все наладится.

    Ибо тогда такое переключение будет эквивалентно уменьшению частоты кварца на том же множителе до:

    8*168/180=7.466...,

    что вы и доказали экспериментально.

    "Пересобирание проекта" ничего вам не даст. А замена кварца вместо замены множителя, мне кажется крывым путем.

    Может я не корректно выразился, но для меня "исправьте в проекте множитель" и "пересобирание проекта (разумеется с поправлеными честотами)"

    вещи эквивалентные. Встречный вопрос: а могли бы Вы выложить hex или bin с поправленным множителем (до 168МГц)? У многих бы вопросы сразу отпали))

    PS. Ваш пост читал и полностью с ним согласен.

  7. adnega, нет, ветку-то прочитал и даже сообщения эти видел. Но так и не понял из этих сообщений, это у всех так должно быть? Что нужно сделать, кварц заменить? Извиняюсь за дилетантизм в своих вопросах, просто STM32 в глаза сегодня впервые увидел. А попробовать USB Mass Storage уже "руки чешутся"... :)

    Итого: "из коробки" у меня не заработало. Отбросил SB18 (перемычка на плате) и подал на плату внешний клок ~7.46МГц. После этого флешка

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

    320х240@15fps (в итоге сделал, но тормозит). Из исходников проект не собирал - пока нет времени(

  8. Вот и пришла ко мне сегодня эта платка :)

    И сразу же возник вопрос - с внешней USB Mass Storage в изначально залитом демонстрационном приложении девайс не должен работать? Пока еще только-только начинаю вникать, но вот что-то уже в плане работы USB Host меня засмущал кварц 8 Мгц (разве USB Host на ней должен работать?). Ну и естест-но вопрос и задаю потому, что плеер в этой демо вместе с просмоторщиком картинок не видит флэшку (да и сама флешка не моргает).

    Вы, видимо, не всю ветку читали.

    В сообщении 83, 85 я про это уже писал))

  9. так-же отметил интерес к решению, данного вопроса.

    Если не затруднит(и нет секретов) - отпишите прямо на форуме. Думаю многим будет и интересно, и наколка на будущее - с кем можно пообщаться по данному вопросу.

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

    Если без особых подробностей, то есть единная шина, к которой контроллеры цепляются не совсем как к шине: на самом деле есть "левый" и "правый"

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

    "правый", соответственно, к следующему элементу. В нормальном состоянии "левый" и "правый" входы физически соединяются (реле) в контроллере и к ним

    подключается сам интерфейс контроллера. В некоторые моменты, при так называемой "автонумерации" шина распадается на сегменты, путем размыкания

    реле всех контроллеров - определить последовательность в этом случае дело техники (но я смог этого добится только для CAN, на RS485 не уверен, что

    можно реализовать). При отстутсвии пакетов на шине в течении определенного времени, нужно опять "развалиться" на отдельные сегменты - вероятно

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

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

  10. По мере усложнения системы все больше склоняюсь к использованию CAN вместо RS485. Но это только планы на будущее. Сейчас использую RS485.

    Использование CAN не решит данную проблему. Для CAN и RS485 подход к решению этой проблемы должен быть похожий.

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

    не должно превышать одну минуту.

    Так я Вам и описал охранно-пожарную систему для поезда. А требование в одну минуту там звучит еще жестче: за 20 секунд надо не только получить

    сигнал от датчика и обрабоать на ложные сработки, но и начать передавать речевое сообщение диспетчеру по радиостанции.

    Каким образом отключается неисправный сегмент при обнаружении КЗ или обрыва?

    Механически при помощи реле. В нормальном состоянии реле распитано и все сидят на одной линии. Если есть авария в сегменте, то

    обмен по шине не возможен, ни одно сообщение не может быть отправлено, по истечении таймаута все контроллеры размыкают свои

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

    распитывается, и левый и правый сегменты превращаются в единное целое. В итоге при одном неисправном сегменте будет по контроллеру

    слева и справа с запитанным реле - сегмент локалирован.

  11. Возможно, сможете посоветовать что-то еще. По крайней по такому принципу делают системы.

    А почему не CAN?

    Решал сходную задачу для поездов. Только там не кольцо, а "паравоз" из контроллеров. Важно было определять скорее

    не КЗ и Обрыв (это легко определается), а последовательность включения контроллеров. Т.е. вагоны можно как угодно перецеплять,

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

    какими контроллерами неисправен сегмент и выключить его из работы. Работоспособность системы от головы до "дохлого" сегмента

    восстанавливается, а что за "дохлым сегментом" происходит неизвестно (но там есть вторая голова, которая может вести протоколирование

    аварий, но не в оповещать в реалтайме).

    Да, придется повозится с пакетами, т.к. CAN это максимум 8 байтв пакете, но побочно получаете "кучу плюшек" самая ценная из них мультимастер!

    Менее ценные: запрет включенного зависшего передатчика, счетчики ошибок и автоматическое отключение от шины при их прерышении и т.п.

  12. Вообще, принят темный фон. Посмотрите на те же осциллографы и кардиомониторы. А если есть сомнения, то лучше проконсультироваться у дизайнера или человека просто обладающего выраженным художественным вкусом.

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

  13. Это вы про тиристорное защёлкивание рассказываете? Не пугайте человека, особенно вот этими высосанными из пальца "99%" и мистическими "что-то не так". В моей практике ни разу такого не было.

    А в моей было несколько раз.

    Причина - аварийное отрывание провода под напряжением и попадание его в случайное место на плате.

    Или подключение отладчика сначала к ПК, а затем к процу.

    Вот с AVRками такое тоже было не раз, но без необратимых последствий))

    Пугать не хочу, ибо пользуюсь STM32 серийно - полет нормальный. Но при переходе с AVR можно заметить некоторую "нежность".

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

    тем более не будет установлена, то о "мистике" мы еще поговорим(

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

    насчет резисторов подтяжки меня как то пугали что внутренние плохо "держат", уж не знаю какой физический смысл в это вкладывался.

    Если нужна скорость, то никаких битовых полей.

    Если ядро Cortex-M3, то используйте bit-band (и скорость и размер не страдают).

    Резисторы подтяжки это ничто по сравнению с "выгоранием ноги". На STM32 если что не так на выводе микросхемы, то с 99% вероятностью

    будет КЗ по питанию проца. Хотя, сам проц будет работать... жутко греется, но работает.

  15. Доброго времени суток.

    Не получается запрограммировать контроллер STM32f205RB, при помощи программатора ST-link/v2.

    post-60067-1384072738_thumb.jpg

    Программировать пытаюсь при помощи стандартной утилиты STM32 STlink Utility (чтобы просто проверить связь с кристаллом)

    Запаял уже 3 платы, пробовал подтягивать BOOT0 к земле через 10к.

    Все сигналы JTAGa по оссциллографу есть, кроме сигнала TDO (выхода с кристалла ).

    У кого нибудь получалось запрограммировать данный контроллер при помощи ST-link/v2?

    Нет ли там каких нибудь нюансов ?

    А через SWD пробовали? Я много каких семейств шил (F2xx не использую), все без ньюансов.

  16. Теперь возник другой вопрос: почему на некоторых тачах (даже если тач из одной группы) значения меняются в противоположную сторону. Может сталкивались с этой проблемой?

    Такого не должно быть. При касании значение должно уменьшаться (т.к. переносимый заряд увеличивается

    и для достижения порога нужно меньше иттераций). Где-то неправильно инициализируете.

  17. В общем разобрался, то я не правильно сконфигурировал порты. Данные получаются вполне адекватные. Когда не касаюсь сенсора счётный регистр показывает где-то 0x14С0, когда дотрагиваюсь - 0x17С0. Я думаю так и должно быть.

    Когда я делал сенсор, то числа отличались очень сильно (в разы).

    Теперь мне не понятно как определять что нажата конкретная кнопка?

    Переключением опроса кнопок по очереди.

  18. Спасибо хоть за это! Хотел ещё спросить: в моей схеме, та что я приложил в самом начале, я правильно подключил конденсаторы? А то я меряю осциллографом ножку PA0 на неё вообще ничего не приходит, а на PA1 идут импульсы примерно такого вида:

    post-76577-1383308588_thumb.jpg

    А данные при этом меняются?

    Осциллограмма очень похожа на правду.

×
×
  • Создать...