-
Постов
1 459 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Весь контент esaulenka
-
Классическая статья. Прямо вот эталонно-показательный библиотечный код. То, что "кишки" довольно сложные, неважно - главное, для пользователя это заканчивается простым понятным интерфейсом, а компилятор успешно распутывает все эти шаблоны в обыкновенную запись в регистр без всяких промежуточных вычислений в рантайме. Ведь эта библиотека пишется тоже один раз (и даже не Вами ;-) ). Сам использую библиотеку Антона Гусева с очень похожим подходом (и даже перепилил её на NRF52). Гораздо удобнее написать using Pin_LED = Pin<'A', 6>; Pin_LED::Mode(OUTPUT); Pin_LED::On(); чем вспоминать, в каких битах в данном конкретном камне указывается номер альтернативной функции. Но да, соглашусь, не уровень совсем начинающего. Если не написать, то хотя бы прочитать и понять этот код всё равно очень желательно.
-
У 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(); } Инициализацию сделайте, пожалуйста, самостоятельно :-)
-
;-) Занятное название для символа. Это оттого, что он высокий и вертикальный, или от слова pipe ? И, кстати, если быть точным, используемые макросы должны быть определены не выше текущего define'а, а выше того места, где они реально подставляются. Т.е. это корректно: #define A B #define B 10 int c = A; Но, это, кажется, уже не "вопросы совсем начинающего" :-) Судя по скриншоту куба, дисплей подключен как получилось. Так что да, переделывать эту "библиотеку" придётся почти полностью. Это какая-то странная особенность, встречающаяся у ардуинщиков. Все переменные они стремятся делать глобальными. Зачем это делать, если переменная используется только в одном месте один раз - загадка... Эта структурка в примере используется в функции настройки GPIO, и по-хорошему, её надо перенести именно туда.
-
Не читал, но осуждаю. Цитата из исходной "методички": Ещё одна В общем, как мне кажется, это плохая, негодная статья. Варианты действий: (возможно, быстрый) сделать именно так, как в оригинале. Может быть, оно таки заработает. (альтернативный) поискать какую-нибудь другую статью. Статей "СТМ32 для начинающих" я видел штук 5 от разных авторов. Возможно, там не будет таких ляпов. (правильный) научиться управлять GPIO на примерах "кнопка + диодик", прочитать описание на HD44780 (система команд там весьма примитивная) и сделать самому. Строить свои собственные велосипеды - это хорошо, если делается для обучения.
-
Подскажите по datasheet
esaulenka ответил sanjaz тема в В помощь начинающему
Кажется, это https://cdn.datasheetspdf.com/pdf-down/U/P/D/UPD78F0883_NEC.pdf Но с остальным согласен. Разве что, может быть, при очень большом везении удастся найти какого-то рукастого ковырятеля автомобильных "мозгов". Тогда, может быть, у него будет какой-нибудь совместимый программатор - в японской автомобилке NEC'и встречаются... Если, конечно, эти японцы не закрыли возможность считывания прошивки из донора... -
stm32f103c8t6 + CAN + Hard Fault
esaulenka ответил Koteyk0o тема в ARM, 32bit
У меня подозрение, что мы наблюдаем проблемы а) с битовой скоростью и б) с тем, что ардуина принимает всё подряд и не говорит, что принято с ошибкой. Осцилл у Вас есть? А ещё лучше - логический анализатор (подключать между контроллером и PHY'ем CAN'а). Советики: - объявите в настройках проекта дефайн USE_FULL_ASSERT. Очень помогает в отладке этого чёртова хала - иначе при ошибках вызова он "ест" любые комбинации параметров и падает в совершенно неожиданных местах. - как что-то заработает, верните назад авторетрансмит. Это полезная фича CAN'а. Иначе на более-менее загруженных шинах сообщения будут теряться (ну или придётся руками этот ретрансмит делать).- 56 ответов
-
- can
- stm32f103c8t6
-
(и ещё 1 )
C тегом:
-
ADC в STM32F100. Нет сканирования каналов.
esaulenka ответил khlenar тема в ARM, 32bit
А я вижу. Когда у меня не работает, я беру отладчик, описание и медленно и печально сравниваю одно с другим. Прям вот методом написания на бумажке "в CR1 установлены бит SCAN, в CR2 ADON, DDS, DMA, CONT. В SQRx установлены ..., в SMPRx установлены ...". Помогает. У Вас, кстати, sample time для температурного канала какой-то подозрительный. Подробности - в даташите. -
Тахометр, ШИМ, нулевая скорсть
esaulenka ответил Anke тема в Программирование
А меня бесят разработчики, у которых простейший измеритель скорости вращения, который всегда должен выдавать скорость, начинает вести себя неадекватно. Здесь играем, здесь не играем, здесь мы какую-то лажу показываем... Извините. Если импульсы не приходили дольше, чем N миллисекунд (договориться, что скорость меньше K имп/сек мы не меряем), выдавать, что скорость равна нулю. Всё. Нет, начинаются странные костыли "тут спрашивали, тут не спрашивали, тут сами отключили"... -
Я правильно понимаю, что выравниванием износа у них занимается отдельный слой - FlashFX, а эта Reliance при записи в условный логический сектор 1 так и пишет всегда в физическую страницу 1 ? А на FlashFX во-первых, системные требования конские, а во-вторых, вместо кнопки "download" - "contact sales" ;-)
-
Вы вот за свои слова отвечать так и не научились... 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 должен показывать...
-
"Здесь" нашёл только, что "-O3 will change the way code reacts to ELF symbol interposition". Этот самый interposition - какая-то хитрая магия, позволяющая сторонним объектникам подменять функции (или переменные). Не уверен, что большинство эмбеддеров это использует (я сам узнал об этой штуке 5 минут назад). Объяснение: https://www.airs.com/blog/archives/307 В принципе, звучит логично - каким-то образом можно подменить только то, что не заинлайнено, а O3 может инлайнить всё подряд. Что-то ещё?
-
А где об этом пишут? (желательно, в более приличных местах, чем общие рекомендации по сборке генту). С указанием версий компилятора, конкретных исходников и мест, где оно, собственно, ломается.
-
Проблема с ADC в STM32F3 Discovery
esaulenka ответил Сёха тема в ARM, 32bit
... но имеет полное право не работать. См. волшебное слово волатайл. -
Проблема с ADC в STM32F3 Discovery
esaulenka ответил Сёха тема в ARM, 32bit
Есть такая беда с ST'шной периферией. Они периодически меняют периферию, и писатели отладчиков и прочих периферийных драйверов в этом путаются. Видимо, и тут пропустили отличия и вставили описание от стандартного АЦП. Слава богу, в документации ошибок таких нет (я не слышал, по крайней мере). -
STM32f105 не получается запустить USB
esaulenka ответил fokin91 тема в ARM, 32bit
103 и 105 - это разные контроллеры, и USB у них тоже разный. На 105 не Device-only, а OTG, как на более "взрослых" 200-ых и 400-ых сериях. Подтяжка там встроена, но этот куб её даже не пытается включать почему-то... -
STM32f105 не получается запустить USB
esaulenka ответил fokin91 тема в ARM, 32bit
Ничего нового. "нажал кнопку в кубе, не работает, помогите!" :-( Отладчик-то есть? Какие события приходят из прерывания? saleae (или что-то похожее) если есть, тоже помогает - видно обмен на шине. В стародавние времена экспериментировал с STшным примером STM32_USB-Host-Device_Lib_V2.2.0 на абсолютно таком же камне. Структура адски неудобная (если хочется что-то поправить, надо менять ВСЁ), работа с железом неоптимальная, но работает... -
Объяснить человеку, для которого существуют два мнения - его и неправильное, что слово "любое" означает ЛЮБОЕ обращение к флеш, в т.ч. из программы, исполняемой ядром, - это сложно. Извините, я сдаюсь.
-
И дальше всё заканчивается. Специально для Вас прочитаю официальную документацию. 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. Здесь написано, что чьё бы то ни было обращение к флеш приводит к ошибке. Ядро при этом сваливается в эксепшн, отладчик ничего прочитать не может. Ещё раз повторить, или хватит?
-
Ну как обычно. "Не читал, но осуждаю". Включенный Readout protection (level 1) в STM32 приводит к тому, что при подключенном отладчике любое обращение к адресам флеш приводит к хардфолту. Отладчик при этом ОЗУ видит (в состоянии на момент подключения отладчика).
-
Модуль SIM800 не отвечает на команды
esaulenka ответил zheka тема в В помощь начинающему
Т.е. на вопрос Вы не ответили. Спасибо. -
Модуль SIM800 не отвечает на команды
esaulenka ответил zheka тема в В помощь начинающему
Это не вопрос "делают ли так нормальные люди". Очевидно, что делать так не надо. Вопрос "делает ли так Simcom?". -
Демо плата для BLDC мотора.
esaulenka ответил jenya7 тема в В помощь начинающему
Ай-ай за категоричность! Вот, например: http://www.ti.com/motor-drivers/brushless-dc-bldc-drivers/tools-software.html -
Демо плата для BLDC мотора.
esaulenka ответил jenya7 тема в В помощь начинающему
Инфинеон решил кардинально решить вопрос с фанатами AVR, у которых "этот ваш кортекс на 5 вольт не делают!". Питание прямо от автомобильной бортсети - это круто. Жаль, мне моторчик крутить не надо ;-) -
SIM800C - да, работает. +CIPMUX=0 Хотя раздел документации "вот эти фичи у нас работают одновременно, а вот эти - только по очереди" очень хотелось бы почитать. Увы...
-
Реле, мне кажется, лучше оставить как есть. Модуль питания наглухо припаять (прямо к площадкам снятой 1117). Супрессор поменять - дело хорошее (лучше вольт этак на 36, в 12-вольтовом авто всё что выше - точно помехи), но на алиэкспрессе "некитайский" вряд-ли получится найти, а у приличного поставщика одна копеечная деталька со всеми доставками будет стоить очень дорого. Нормальный импульсный источник обеспечивает качество питания, достаточное для большинства применений. Ну а там, где важно измерять микровольты, и AMS1117 будет не к месту.