Скачал тут IAR 8.30 для ARMов. Открыл проект, который в 8.22 компилился, вроде. А тут - подключение <string> вызывает Error[Pe1061]: declaration of enum "std::align_val_t" is incompatible with a declaration in another translation unit C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.1\arm\inc\cpp\new 137 У меня включен компилятор С++ принудительно, не экстендет бейсед. В общем проблема не в проекте - сгенерил кубом чистый проект, как только подключаю стринг - ошибка. Экспериментальным путем обнаружил что снятая галочка мультифайловой компиляции решает проблему. Ну ок, не суть. Но, внезапно, из мейна перестал быть виден инклюд в другой папке, пр итом что в список источников эта папка добавлена. Указание полного пути тоже не решает проблему В общем файлы перенес файлы в общую папку, благо их только два, и проект собрался. Уже сил нет дальше ковырять, тем более создавать бесплатную пробную учетку и делать реквест в сапорт (с АВР я так делал - прокатило ). Если есть идеи куда посмотреть-потыкать буду благодарен.
Ярослав555, Первое подтверждаю. Конкретнее в <new>. Для C++17 пилят overaligned allocation. Ну ничего, подождём, допилят. Второе не подтверждаю, всё подключается из списка директорий.
Oxford, когда в Keil C++17 завезут - приходи, похоливарим
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Первое подтверждаю. Второе не подтверждаю, всё подключается из списка директорий.
По первому - ок, ждем обновы. Пока что проблему поборол. По второму - у меня мейн лежит в папке срц, инклюды в папке инк. А вот системный таймер лежал со своим инклюдом в отдельной папочке, и эта папка была добавлена в источники. При этом из мейна хидер таймера был в упор не виден. Ну ладно, не суть может глюк какой-то. Тоже поборол. Ждем обнову.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
еще один "бажик" нового иара - открываю проект, снимаю птичку мультифайловой компиляции, сохраняю, закрываю среду. Запускаю по новой - птичка стоит. Не знаю - баг самого проекта от предыдущей версии, или баг среды, или оно эту птичку само выставляет потому что по каким то причинам считает это нужным.
Приветствую, уважаемые. Есть тривиальная задача подключения 7 сегментного индикатора. Для экономии ног будет использован отдельный bcd в 7 сегмент дешифратор. Вопрос в следующем какие есть варианты передачи на сам дешифратор? Сам пока вижу следующее - ширина 4бит следовательно используется 4 ноги (для примера P1 - P4):
pavell , оптимальное -аппаратная динамическая индикация на таймере и дма. Есть вариант на внешних сдвиговых регистрах, здесь эмуляция многоканального SPI опять таки же на таймере и дма...
Если необходимо экономить ножки до такой степени что хочется вставить внешний чип, то лучше не дешифратор, а сдвиговый регистр. Всего 2 ноги на управление. Можно SPI, а можно и ногодрыжеством, поскольку скорости много не надо. Так проще. В прерывании по таймеру. Если больше одной цифры, можно либо использовать еще сколько то ножек для динамической индикации. Скажем 4 знака. Если осталось 4 ноги процессора, то прямо управлять ключами. Если нет - 2 ножки и дешифратор.
Спасибо за советы, посмотрю на сдвиговые регистры, реализация как мне кажется более изящная + экономия ног. К слову МК будет использоваться в корпусе TSSOP-20 т.е. ног не много. Ну и сегодня попытался реализовать описанное мою выше , понял что даже там можно упростить. Вот так глядишь и научусь чему-нибудь ))
alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.
Ну я собственно им и являюсь, чоуж. А выбор сделан в соответствии со своими возможностями, под 48 ногий корпус мне ни платы не изготовить, ни МК запаять.
alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.
Естественно В ОБЩЕМ СЛУЧАЕ лучше всего выбрать чип где всего хватает. Но вопрос был не об этом. Более того, в отдельных случаях дополнительный корпус полезен, например если нужно 5 В на выходе, или больше ток чем может дать сам процессор. Но главное, что на вопрос "как вытащить Жигули из лужи", ответ "ездить на Джипе" может и правильный, но не очень полезный.
P.S. В наше время китайцы делают небольшие двухсторонние платы с маской и надписями примерно по $1 штука. Если не надо прямо сегодня, зачем лутовское наколенное кулибинство?
Добрый вечер столкнулся с необъяснимым для себя. Имеется таймер с прерыванием по переполнению, который работает при дефолтных настройках тактирования (HSI 8Мгц). Добавляю в функцию SystemInit() файла system_stm32f0xx.c, сразу после сброса предделителей, делитель шины APB1EHR и либо таймер, либо прерывание перестают работать (а может и оба сразу). Мануал каких то особых рекомендаций и условий установки предделителя не дает. Я обескуражен
Уверен, так как меняю значения прескейл с 7999 на 999, даже если бы я этого не сделал, то работал бы он только в 8 раз медленнее, т.к. на эти таймеры после делителя идет "железный" множитель на 2
UPD. Не знаю на сколько можно верить отладчику, но он показывает, что таймер таки работает и по крайней мере значение счетчика растет. Смею предположить, что дело в прерывании.
Уверен, так как меняю значения прескейл с 7999 на 999, даже если бы я этого не сделал, то работал бы он только в 8 раз медленнее, т.к. на эти таймеры после делителя идет "железный" множитель на 2
Точно, в 8 раз, но это сам таймер будет в 8 раз медленнее, а шина в 16 раз и через эту шину идет доступ к регистрам таймера. В начале обработчика прерывания обычно сбрасываются флаги, но из-за делителя это произойдет с опозданием и если обработчик небольшой, то сразу после выхода в него сразу попадем снова. Чтобы удостоверится, что флаги сброшены достаточно прочесть регистр TIMx->SR...
но из-за делителя это произойдет с опозданием и если обработчик небольшой, то сразу после выхода в него сразу попадем снова.
Спасибо, все так и было. Поставил в обработчик цикл задержки и появились признаки правильной работы. Это что получается - использование отдельных делителей шин AHB, APB зло?
Здравствуйте!. Помогите разобраться с FSMC. Пишу программу для управления дисплеем на ST7735R (8 бит, параллельный интерфейс). https://cdn-shop.adafruit.com/datasheet ... R_V0.2.pdf Весь даташит прочитала, но всего, что мне надо не нашла.
Send(SLPOUT,0); //будим после ресета _delay_ms(120);
Send(DISPON,0); //включаем экран
Send(MADCTL,0); //меняем вывод цветов с GBR на RGB Send(0b00001000,1);
Send(COLMOD,0); //меняем кодировку цветопередачи на 2-байтную (64К цветов) Send(5,1);
}
То есть человек просто отправляет данные и флаг команда/данные. А мне получается надо в функции LCD_Write_Com отправлять данные по одному адресу, а команду по другому. То есть data =SWRESET, например. Флаг данных/команды тоже выставляется там где #define. А соm где найти? И я не очень понимаю откуда эти адреса брать. В документации показаны только данные, адресов нет. Во вложении показано как выглядит описание команд. Есть еще одна статья, но там тоже не объясняется откуда это все берется и как искать https://microtechnics.ru/stm32-i-disple ... anie-fsmc/. Как это искать? Или я что-то неправильно понимаю.
Или может быть этот подход для других дисплеев, а мне нужны функции с одним аргументом?
Код:
void LCD_Write_Com(uint16_t com); void LCD_Write_Data(uint16_t data );
Вложения:
Комментарий к файлу: список команд ч3 3.png [119 KiB]
Скачиваний: 426
Комментарий к файлу: список команд ч2 2.png [111.75 KiB]
Скачиваний: 226
Комментарий к файлу: список команд ч1 1.png [91.21 KiB]
Скачиваний: 430
_________________ Я конечно все понимаю, но этого я не понимаю.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения