"аппаратной поддержке" пофиг и она пропускает пакет?
А вы включили эту аппаратную поддержку? В кубе это "Hardware Flow Control (RS485)".
Для этого МК я бы не стал использовать куб как кодогенератор. Если нужно упростить работу, лучше используйте SPL. Она требует меньше ресурсов и больше контроля над кодом.
[/quote]А вы включили эту аппаратную поддержку? В кубе это "Hardware Flow Control (RS485)".
Да, в том то и дело, что включил. И теперь пакеты летят через порт несмотря на то, как я дёргаю ногу. Причём всё ещё хуже... У меня на плате разведен сигнал DE+RE на ногу PA0, хотя по умолчанию в Кубе DE резервирует ногу PA1. После генерации кода, я вручную меняю на PA0 - пакеты идут - я их вижу, далее становиться вообще грустно (т.к. не втыкаю почему...) - один раз забыл поправить, в тексте остался PA1 и пакеты продолжили проходить не взирая на какие-то там сигналы и ноги... Такое впечатление, что я подключился не через "адаптер" RS485, а напрямую, через UART... Где же пропало управление потоком?
Добавлено after 5 hours 19 minutes 58 seconds: Попробовал разные варианты. Получилось так:
1. Включаю аппаратную поддержку. Пакеты идут невзирая на дрыганье сигналом DE+RE 2. Выключаю аппаратную поддержку. Выход для DE не назначаю. Пакеты продолжают проходить. Предполагаю из-за того, что соответствующий выход имеет неопределённое значение. 3. Выключаю аппаратную поддержку. Назначаю выход для DE. Теперь всё в порядке - работает софтовое управление потоком.
Вот теперь вопрос. Как мне портировать Modbus? Тут, немного выше писали, что F0 имеет аппаратную поддержку Modbus, но что-то я не нашёл в RM такого...
Добрый день, у меня модуль SDIO и дисплей используют один вывод и подключены через мультиплексор. Так как они не работают одновременно предполагалось изменять конфигурацию этого вывода по необходимости. С AF на PP конфигурация изменяется и работает без проблем, а вот обратно конфигурация изменяется, а пакетов нет. Подскажите пожалуйста, можно ли вообще так делать?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Поясните пожалуйста, почему над кодом выше надо задуматься?
Во-первых, все эти значки около операции присваивания что-то да значат. Во-вторых, как следствие первого, регистр BSRR только для чтения, зачем его читать?
Ребята все заработало, проблема была в том, что по окончанию работы с дисплеем эта ножка устанавливается в низкое состояние. Установил в высокое и все заработало.
Поясните пожалуйста, почему над кодом выше надо задуматься?
Над BSRR, вижу, поработали. А дальше? По коду вижу задачу поменять значения битов GPIO_MODER_MODER2_0 и GPIO_MODER_MODER2_1 на противоположные. Давай сравнивать.
Последний вариант, правда, надо применять очень "строго" и я бы его не рекомендовал. Зато, если режим работы других ножек на GPIOD не меняется, то рекомендовал бы просто запись новой константы в MODER.
А разве не в этой теме недавно обсуждали эти конструкции, где не надо отдельно каждый бит выписывать, что лучше делать сразу все? И тоже ассемблер приводили.
Добавлено after 1 minute 26 seconds: Я бы тоже написал в две строки... Может не совсем рационально, но зато понятнее. )))
Подскажите как более правильно писать volatile перед типом переменной Переписываю чужой проект, меняю его структуру, избавляюсь от глобальных переменных. И столкнулся с одним моментом, который не совсем понятен и в гугле не знаю как правильно найти интересующий вопрос. Есть два варианта, оба работают, но хотелось бы выбрать более правильный.
В первом варианте я пишу volatile перед названием структуры, во втором пишу volatile перед типом каждой переменной в самой структуре Абстрактный пример кода набросал, который передает суть
hosturik, а нет никакого "как правильно", есть как надо вам в вашей программе. Что вы хотите от этой структуры? 1. Все структуры данного типа будут volatile как, например, регистры периферии в CMSIS. 2. Только конкретный экземпляр структуры будет volatile и возможно обычное её применение. Нам то откуда знать? Ваша программа, вам и решать.
VladislavS, Поскольку почти все элементы структуры будут изменятся в прерывании, важно чтобы программа работала правильно. Структуры в моем случае нужны чтобы не плодить глобальные переменные. Я создаю переменную типа структуры в одном сишном файле и все нужные функции вызываю в нем, передавая в них указатель на структуру. Итог - с более чем 30 глобальных переменных, их не стало вообще. И код стал намного чище. Под глобальными имею ввиду когда в хедере пишется extern uint8_t val; а в си файле то же самое но без extern. И эта переменная будет видна везде где подключается этот хедер. Такой стиль написания мне не понравился решил все переписать, чтобы было красиво.
typedef volatile struct {} my_struct_type; определит тип my_struct_type, который будет соответствовать вашей структуре с префиксом volatile. все экземпляры структур этого типа будут исключены из оптимизации компилятора, т.е. доступ к ним и всем их полям будет, как к volatile-переменным. можно создавать указатели на этот тип (в параметрах функций, например) и т.п.
но если вам вдруг потребуется создать, например, локальный экземпляр такой структуры (не-volatile то есть), типа для этого не найдется. вам об этом говорили.
поэтому лучше (имхо) определять алиас типа структуры, а префикс volatile указывать при определении конкретного экземпляра - если надо, конечно.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
hosturik, вы практически пришли к первому постулату ООП - инкапсуляция. Если ещё вспомнить, что в С++ struct и class это практически одно и то же, то можете смело перемещать функции в структуры, обзывать их методами и вместо структур создавать объекты.
Пытаюсь освоить stm32f100. Что значат эти цифры? Program Size: Code=612 RO-data=304 RW-data=0 ZI-data=1632 На пустом проекте реально занято 1632 байт озу? Может я, по не знанию, что то не то подключил? Или это не ОЗУ?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения