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

esaulenka

Свой
  • Постов

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

  • Посещение

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

    2

Весь контент esaulenka


  1. Классическая статья. Прямо вот эталонно-показательный библиотечный код. То, что "кишки" довольно сложные, неважно - главное, для пользователя это заканчивается простым понятным интерфейсом, а компилятор успешно распутывает все эти шаблоны в обыкновенную запись в регистр без всяких промежуточных вычислений в рантайме. Ведь эта библиотека пишется тоже один раз (и даже не Вами ;-) ). Сам использую библиотеку Антона Гусева с очень похожим подходом (и даже перепилил её на NRF52). Гораздо удобнее написать using Pin_LED = Pin<'A', 6>; Pin_LED::Mode(OUTPUT); Pin_LED::On(); чем вспоминать, в каких битах в данном конкретном камне указывается номер альтернативной функции. Но да, соглашусь, не уровень совсем начинающего. Если не написать, то хотя бы прочитать и понять этот код всё равно очень желательно.
  2. У ST'шников различная периферия по каким-то историческим причинам жёстко привязана к определённым портам. А поскольку набор периферии везде разный, порты тоже весьма вразнобой получаются. И если с GPIO ещё как-то можно жить, то какая-нибудь шина памяти у них ну ооочень неудобно разводится... Никак. Автор этой "методички" даже не пробовал задуматься, что можно подключить как-то иначе (и не написал это БОЛЬШИМИ БУКВАМИ в самом начале). Вам нужно переписать инициализацию и использование этих ног (т.е. функцию SendByte() ). Ещё раз рекомендую прочитать reference на предмет работы с GPIO, там несложно. Ну или статейку от более адекватного автора. Как-то так: сначала пишем вспомогательные функции вывода одного бита: // display D7 -> PB2 void LCM_D7_set() { GPIOB->BSRR = 1<<2; } void LCM_D7_clr() { GPIOB->BRR = 1<<2; } // аналогично - D6..D4, RS, EN. Потом меняем void PulseLCD() { LCM_EN_Clr(); delay(220); LCM_EN_Set(); delay(220); LCM_EN_Clr(); delay(220); } тут обязательно перепроверить осциллографом, как "попугаи" delay'я соотносятся с микросекундами из даташита индикатора. void SendByte(char Data, int IsData) { // старшие пол-байта if (Data & 0x80) LCM_D7_Set(); else LCM_D7_Clr(); if (Data & 0x40) LCM_D6_Set(); else LCM_D6_Clr(); if (Data & 0x20) LCM_D5_Set(); else LCM_D5_Clr(); if (Data & 0x10) LCM_D4_Set(); else LCM_D4_Clr(); if (IsData) LCM_RS_Set(); else LCM_RS_Clr(); PulseLCD(); // младшие пол-байта if (Data & 0x08) LCM_D7_Set(); else LCM_D7_Clr(); if (Data & 0x04) LCM_D6_Set(); else LCM_D6_Clr(); if (Data & 0x02) LCM_D5_Set(); else LCM_D5_Clr(); if (Data & 0x01) LCM_D4_Set(); else LCM_D4_Clr(); if (IsData) LCM_RS_Set(); else LCM_RS_Clr(); PulseLCD(); } Инициализацию сделайте, пожалуйста, самостоятельно :-)
  3. ;-) Занятное название для символа. Это оттого, что он высокий и вертикальный, или от слова pipe ? И, кстати, если быть точным, используемые макросы должны быть определены не выше текущего define'а, а выше того места, где они реально подставляются. Т.е. это корректно: #define A B #define B 10 int c = A; Но, это, кажется, уже не "вопросы совсем начинающего" :-) Судя по скриншоту куба, дисплей подключен как получилось. Так что да, переделывать эту "библиотеку" придётся почти полностью. Это какая-то странная особенность, встречающаяся у ардуинщиков. Все переменные они стремятся делать глобальными. Зачем это делать, если переменная используется только в одном месте один раз - загадка... Эта структурка в примере используется в функции настройки GPIO, и по-хорошему, её надо перенести именно туда.
  4. Не читал, но осуждаю. Цитата из исходной "методички": Ещё одна В общем, как мне кажется, это плохая, негодная статья. Варианты действий: (возможно, быстрый) сделать именно так, как в оригинале. Может быть, оно таки заработает. (альтернативный) поискать какую-нибудь другую статью. Статей "СТМ32 для начинающих" я видел штук 5 от разных авторов. Возможно, там не будет таких ляпов. (правильный) научиться управлять GPIO на примерах "кнопка + диодик", прочитать описание на HD44780 (система команд там весьма примитивная) и сделать самому. Строить свои собственные велосипеды - это хорошо, если делается для обучения.
  5. Кажется, это https://cdn.datasheetspdf.com/pdf-down/U/P/D/UPD78F0883_NEC.pdf Но с остальным согласен. Разве что, может быть, при очень большом везении удастся найти какого-то рукастого ковырятеля автомобильных "мозгов". Тогда, может быть, у него будет какой-нибудь совместимый программатор - в японской автомобилке NEC'и встречаются... Если, конечно, эти японцы не закрыли возможность считывания прошивки из донора...
  6. У меня подозрение, что мы наблюдаем проблемы а) с битовой скоростью и б) с тем, что ардуина принимает всё подряд и не говорит, что принято с ошибкой. Осцилл у Вас есть? А ещё лучше - логический анализатор (подключать между контроллером и PHY'ем CAN'а). Советики: - объявите в настройках проекта дефайн USE_FULL_ASSERT. Очень помогает в отладке этого чёртова хала - иначе при ошибках вызова он "ест" любые комбинации параметров и падает в совершенно неожиданных местах. - как что-то заработает, верните назад авторетрансмит. Это полезная фича CAN'а. Иначе на более-менее загруженных шинах сообщения будут теряться (ну или придётся руками этот ретрансмит делать).
  7. А я вижу. Когда у меня не работает, я беру отладчик, описание и медленно и печально сравниваю одно с другим. Прям вот методом написания на бумажке "в CR1 установлены бит SCAN, в CR2 ADON, DDS, DMA, CONT. В SQRx установлены ..., в SMPRx установлены ...". Помогает. У Вас, кстати, sample time для температурного канала какой-то подозрительный. Подробности - в даташите.
  8. А меня бесят разработчики, у которых простейший измеритель скорости вращения, который всегда должен выдавать скорость, начинает вести себя неадекватно. Здесь играем, здесь не играем, здесь мы какую-то лажу показываем... Извините. Если импульсы не приходили дольше, чем N миллисекунд (договориться, что скорость меньше K имп/сек мы не меряем), выдавать, что скорость равна нулю. Всё. Нет, начинаются странные костыли "тут спрашивали, тут не спрашивали, тут сами отключили"...
  9. Я правильно понимаю, что выравниванием износа у них занимается отдельный слой - FlashFX, а эта Reliance при записи в условный логический сектор 1 так и пишет всегда в физическую страницу 1 ? А на FlashFX во-первых, системные требования конские, а во-вторых, вместо кнопки "download" - "contact sales" ;-)
  10. Вы вот за свои слова отвечать так и не научились... FatFs - 6.3k (http://elm-chan.org/fsw/ff/doc/appnote.html, full @ cortexM3) lwIP - 30..35k (https://community.nxp.com/docs/DOC-330816, минимально рабочая конфигурация) Зачем Вы решили, что топикстартеру нужна ФС, обсуждать не будем. А то выяснится, что его контроллер и кино в fullHD должен показывать...
  11. "Здесь" нашёл только, что "-O3 will change the way code reacts to ELF symbol interposition". Этот самый interposition - какая-то хитрая магия, позволяющая сторонним объектникам подменять функции (или переменные). Не уверен, что большинство эмбеддеров это использует (я сам узнал об этой штуке 5 минут назад). Объяснение: https://www.airs.com/blog/archives/307 В принципе, звучит логично - каким-то образом можно подменить только то, что не заинлайнено, а O3 может инлайнить всё подряд. Что-то ещё?
  12. А где об этом пишут? (желательно, в более приличных местах, чем общие рекомендации по сборке генту). С указанием версий компилятора, конкретных исходников и мест, где оно, собственно, ломается.
  13. ... но имеет полное право не работать. См. волшебное слово волатайл.
  14. Есть такая беда с ST'шной периферией. Они периодически меняют периферию, и писатели отладчиков и прочих периферийных драйверов в этом путаются. Видимо, и тут пропустили отличия и вставили описание от стандартного АЦП. Слава богу, в документации ошибок таких нет (я не слышал, по крайней мере).
  15. 103 и 105 - это разные контроллеры, и USB у них тоже разный. На 105 не Device-only, а OTG, как на более "взрослых" 200-ых и 400-ых сериях. Подтяжка там встроена, но этот куб её даже не пытается включать почему-то...
  16. Ничего нового. "нажал кнопку в кубе, не работает, помогите!" :-( Отладчик-то есть? Какие события приходят из прерывания? saleae (или что-то похожее) если есть, тоже помогает - видно обмен на шине. В стародавние времена экспериментировал с STшным примером STM32_USB-Host-Device_Lib_V2.2.0 на абсолютно таком же камне. Структура адски неудобная (если хочется что-то поправить, надо менять ВСЁ), работа с железом неоптимальная, но работает...
  17. Объяснить человеку, для которого существуют два мнения - его и неправильное, что слово "любое" означает ЛЮБОЕ обращение к флеш, в т.ч. из программы, исполняемой ядром, - это сложно. Извините, я сдаюсь.
  18. И дальше всё заканчивается. Специально для Вас прочитаю официальную документацию. When the read protection Level 1 is set: – No access (read, erase, program) to Flash memory can be performed while the debug feature is connected or while booting from RAM or system memory bootloader. A bus error is generated in case of read request. – When booting from Flash memory, accesses (read, erase, program) to Flash memory from user code are allowed. Здесь написано, что чьё бы то ни было обращение к флеш приводит к ошибке. Ядро при этом сваливается в эксепшн, отладчик ничего прочитать не может. Ещё раз повторить, или хватит?
  19. Ну как обычно. "Не читал, но осуждаю". Включенный Readout protection (level 1) в STM32 приводит к тому, что при подключенном отладчике любое обращение к адресам флеш приводит к хардфолту. Отладчик при этом ОЗУ видит (в состоянии на момент подключения отладчика).
  20. Это не вопрос "делают ли так нормальные люди". Очевидно, что делать так не надо. Вопрос "делает ли так Simcom?".
  21. Ай-ай за категоричность! Вот, например: http://www.ti.com/motor-drivers/brushless-dc-bldc-drivers/tools-software.html
  22. Инфинеон решил кардинально решить вопрос с фанатами AVR, у которых "этот ваш кортекс на 5 вольт не делают!". Питание прямо от автомобильной бортсети - это круто. Жаль, мне моторчик крутить не надо ;-)
  23. SIM800C - да, работает. +CIPMUX=0 Хотя раздел документации "вот эти фичи у нас работают одновременно, а вот эти - только по очереди" очень хотелось бы почитать. Увы...
  24. Реле, мне кажется, лучше оставить как есть. Модуль питания наглухо припаять (прямо к площадкам снятой 1117). Супрессор поменять - дело хорошее (лучше вольт этак на 36, в 12-вольтовом авто всё что выше - точно помехи), но на алиэкспрессе "некитайский" вряд-ли получится найти, а у приличного поставщика одна копеечная деталька со всеми доставками будет стоить очень дорого. Нормальный импульсный источник обеспечивает качество питания, достаточное для большинства применений. Ну а там, где важно измерять микровольты, и AMS1117 будет не к месту.
×
×
  • Создать...