-
Постов
1 462 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Весь контент esaulenka
-
Вы там, случаем, вход приёмника в dominant state не держите? Подключения к шине для инициализации и не требуется - там как раз условие выхода из неё, чтобы на шине не было активности.
-
Какое-то спорное утверждение. Какие-то исследования есть? Почему-то на этих инопланетных контроллерах созданы миллионы устройств. К десяткам тысяч я приложил руку. Там есть батарейка (литиевая coin cell, 3 вольта), конденсатор рядом с ней и стабилизатор на 3.3 вольта для ядра. Подозреваю, с этой уникальнейшей конструкцией я не одинок. Пролёт "мощных ступенек" не зафиксирован. Также очень хочется подтверждений.
-
Инклинометр на датчике ФГ-3ОА
esaulenka ответил LAS9891 тема в В помощь начинающему
Число 94 означает "на столько милливольт изменится сигнал на выходе при изменении ускорения на 1 g." Если Вы видите на одном из каналов напряжение 3 вольта, значит, вы прямо сейчас ускоряетесь на (3 В -2,5 В) / 0,094 В/g = 5.3 g (и если делаете это вертикально вверх, скоро выйдете в открытый космос :-) ). Рекомендую ещё прочитать сноску к этой цифре - это максимальное значение коэффициента. Правильное значение определяется экспериментально, при калибровке, и должно быть написано в паспорте. Не надо верить всему, что пишут в интернетах. В документации русским языком сказано, что на выходе в покое 2.5 вольта. Вот документации и верьте. -
Ещё куб (STM32 CubeMX) посмотрите. У них STM32L4xx есть, экспорт проекта в кейл - тоже есть. Как этот контроллер будет отображаться в кейле, я не знаю. Но компилятору разницы особо никакой, все Cortex-M4 одинаковы. Тут вопрос линкера (надо подобрать камень с таким же объемом памяти, или поправить настройки руками) и отладчика (чтоб периферию красиво показывал).
-
Запись в Serial EEprom.
esaulenka ответил jenya7 тема в ARM, 32bit
Извините за флуд, но проверка регистра статуса - это рабочее решение (собственно, для того он там и есть). Ищите ошибку, кто такие LOGGER_DELAY, SPIEEPROM_ReadStatus() и SPIEEPROM_STATUS_WIP нам неведомо. И название микросхемы хорошо б сразу указывать. Тут, конечно, у многих навыки телепатии неплохие, но некрасиво это. -
Мне кажется, надо только переделать HAL_LockTypeDef на мьютекс. И дефайны __HAL_LOCK() / __HAL_UNLOCK() переопределить. Ну или вручную, критическая секция в __HAL_LOCK()
-
Нириально хороший. Просто флажок "периферия занята". Поддержки RTOS (типа "семафор"), как и банальных критических секций, там нет. Т.е. наблюдаем типичную хорошо спрятанную граблю - неатомарная операция "проверил - поменял - записал" выполняется, теоретически, в нескольких потоках. Дальше только вопрос времени, когда это добро "выстрелит"...
-
Ой, простите, STM32 _L_ 4xx - это ж очередная линейка, низкопотребляющий M4. Тогда так: поддержка ядра M4 давным-давно есть, поддержки именно Вашего контроллера я не вижу. Соответственно, над где-то (ST Cube ?) найти заголовки с описанием регистров и подложить в нужное место. Где брать XML'ки с теми же регистрами, чтоб подсунуть их отладчику, я не знаю... Приключения, чтоб их... Для поддержки ARM7, если ничего не путаю, надо http://www2.keil.com/mdk5/legacy/
-
Возьмите последний кейл, полгода назад они анонсировали поддержку Cortex-M7. Тут можно картинки полистать: http://www2.keil.com/mdk5/cortex-m7/ Поддержка STLink в кейле встроенная, надо просто выбрать правильный отладчик (правда, откуда драйвер поставился, я не помню. Возможно, от штатной ST'шной утилиты).
-
static variable
esaulenka ответил jenya7 тема в Программирование
Да что этот Шилдс понимает... :-) Я осваивал плюсы на scmRTOS ("кишки" довольно сложные, но снаружи всё просто и понятно) и на Qt (супер-понятный внешний интерфейс, в "кишки" даже не лазил). Рекомендую! После этого свои классы без особых проблем придумываются. При этом проекты не сказать, чтоб прямо сложные. Пара сотен килобайт исходников - это немного совсем... -
STM32, timer capture/compare
esaulenka опубликовал тема в ARM, 32bit
Господа, подскажите пожалуйста: вход таймера ETR можно использовать для определения длительности/периода импульса? В документации вижу только возможность тактировать таймер. Может, как-то slave использовать можно?.. На готовой железке возникла необходимость измерять параметры импульсов, а на той ноге только ETR и есть... -
Как считать показания датчиков.
esaulenka ответил jenya7 тема в В помощь начинающему
Предлагаю прорывную нано-технологию. Цепляем к выходам датчика осциллограф (как выяснилось, они аналоговые. и то хорошо). Пальцем крутим вал. Глазами смотрим на осциллограф. Если видим там что-то похожее на две синусоиды (сдвинутые на 90 градусов), радуемся и пытаемся вспомнить школьную тригонометрию. Если видим там что-то похожее на меандр "включено-выключено", пытаемся приспособить этот датчик к чему-то ещё. -
Нет. Значение SYSCFG определяет, на какую область памяти будет отображаться адрес 0. Т.е., выставляем в одно значение - и содержимое памяти по адресам 0x00000000 и 0x08000000 будет одинаковое (и так же одинаковым будут следующие N килобайт, цифирку за ненадобностью не помню). Выставляем другое значение - будут одинаковыми 0x00000000 и 0x20000000 и т.д. Но вот правда - бросайте Вы эти глупости. Мне кажется, этим ремапом никто толком и не пользуется. Разве что штатный загрузчик, да отладчики в режиме "загружать код в RAM" (этакий быстрый режим отладки для маленьких программ, чтобы флеш каждый раз не стирать).
-
Reset - это команда со стороны хоста. Виндовс при подключении устройства делает reset, потом считывает дескрипторы, потом снова reset, снова считывает дескрипторы, и только потом считает, что процедура подключения завершена. Почему так, видел какое-то внятное описание, но забыл где... PS должно сильно поспособствовать сравнение рабочего и нерабочего вариантов каким-нибудь сниффером. Я крайний раз пользовался "free usb analyzer". Не очень удобно, зато совесть чиста :-)
-
Да, в этих библиотеках надо обязательно инициализировать все поля структур-параметров. Иначе возможны разнообразнейшие приключения. Тут, судя по всему, порт переключился в режим "открытый коллектор".
-
Адрес пина.
esaulenka ответил jenya7 тема в ARM, 32bit
следующая тема, чувствую, будет опять "как в этой лапше выгадать 3 такта". Jenya7, предлагаю: - забыть слово "адресс" (а то придёт Herz, и научит Вас русскому языку) - написать модуль-прослойку, у которого на входе не некие странные "GPIOA+1", а вполне понятные "вход кнопка 1", "вход XXX". Тогда привязка функции входа к конкретной ноге будет ровно в одном месте. Не, ну можно, конечно, благо у STM'ок адреса разных портов GPIO различаются аж на 0x400. uint32_t get_input (uint32_t param) { GPIO_TypeDef * port = (GPIO_TypeDef *) (param & ~0x1F); uint32_t pin = param & 0x1F; return port->IDR & (1UL << pin); } ... get_input (GPIOA | 1); get_input (GPIOB | 31); Но всё равно, не надо так делать. -
Пишите на с++, stm32tpl - образец компактности и лаконичности! typedef Pin<'C', 9> GreenLed; GreenLed::Mode (OUTPUT); GreenLed::On();
-
Структурная реализация ПИД
esaulenka ответил _Ivana тема в В помощь начинающему
Отстаньте вы от человека! Он же сразу сказал - это спорт такой. Что-то вроде "я напишу hello world в N байт", только следующий уровень :-) Если _Ivana хватит упорства и знаний затолкать всё это в тиньку, он будет на порядок больше молодец, чем реализация того же ПИДа на stm32discovery. -
С чего бы это? Растянуть импульсы с триггера, и готово. Другой вопрос, что придётся вешать табличку на энкодер "быстро не крутить" :-) (будет "проглатывать" импульсы).
-
Что-то типа того. Только ещё делители нужны на выходах. Энкодер, который предложил Plain, будет выдавать импульсы каждые 15 градусов. Точная настройка прибора будет довольно неудобной (это +/- 20 единиц легко накрутить; +/- 1 придётся делать очень аккуратно). В общем, самое время освоить какую-нибудь ардуину. На входе - энкодеры (статей "подключаем энкодер к ардуино" в сети десятки), на выходе - эмулятор 74hc4021 в лице SPI.
-
Удаленная диагностика автомобиля
esaulenka ответил human_being тема в АВТО электроника
Имхо, вполне реальная задача. Если диагностический прибор цепляется только на разъем OBD2, никаких сверхъестественных сигналов передавать не надо. С одной стороны 1-2 CAN'а, с другой стороны 1-2 CAN'а. Ну ещё K-Line может быть. Настройка скорости - вручную (выбор диагностируемого авто) или автоматом. Зажигание может быть. Ещё J1850 может быть (я не в курсе специфики сельхоз. и строительной техники), туда свои драйвера надо ставить. Таймауты в автомобильных протоколах обычно с изрядным запасом. Чисто умозрительно, если связывать оба блока не через GPRS, должно взлететь. -
(раз уж взялись оффтопить...) Руслан, а как этот logic16 на сотне мегасэмплов работает? Беглый гуглинг сообщает нам "у меня всё работает, ногодрыг с ардуины захватывается, больше мне ничего не надо" и "ничего не работает, сэмплы теряются напрочь"
-
ISP бутлоaдер
esaulenka ответил rsln тема в ARM, 32bit
Да, кстати. Загрузчик понимает, что код - в thumb mode, и program counter должен быть нечётным? Попробуйте сделать GO на адрес 0x02001001 -
ISP бутлоaдер
esaulenka ответил rsln тема в ARM, 32bit
Не знаю. Сделайте то же самое, но под отладчиком: char remap_flash[] = { 0x00, 0x4F ... }; ( (void (*)(void)) remap_flash) (); -
ISP бутлоaдер
esaulenka ответил rsln тема в ARM, 32bit
Да это просто :-) Длина команды thumb2 - 16 бит или 32. 32-битная константа напрямую в эту команду не влезает (нужно же место под код самой команды). Можно положить константу рядом, и ссылаться на неё (что-то вроде LDR r0, [pc, #смещение-до константы]); компилятор так и делает. Но руками проще загрузить в регистр за два раза, благо у кортексов команда MOVT сделана, похоже, специально для этого.