Sergeba писал(а): "аппаратной поддержке" пофиг и она пропускает пакет?
А вы включили эту аппаратную поддержку? В кубе это "Hardware Flow Control (RS485)".
Для этого МК я бы не стал использовать куб как кодогенератор. Если нужно упростить работу, лучше используйте SPL. Она требует меньше ресурсов и больше контроля над кодом.
[uquote="Мурик",url="/forum/viewtopic.php?p=3604135#p3604135"][/quote]А вы включили эту аппаратную поддержку? В кубе это "Hardware Flow Control (RS485)".[/uquote]
Да, в том то и дело, что включил. И теперь пакеты летят через порт несмотря на то, как я дёргаю ногу. Причём всё ещё хуже... У меня на плате разведен сигнал 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 конфигурация изменяется и работает без проблем, а вот обратно конфигурация изменяется, а пакетов нет. Подскажите пожалуйста, можно ли вообще так делать?
[uquote="baghear",url="/forum/viewtopic.php?p=3608772#p3608772"]Поясните пожалуйста, почему над кодом выше надо задуматься?[/uquote]Во-первых, все эти значки около операции присваивания что-то да значат. Во-вторых, как следствие первого, регистр BSRR только для чтения, зачем его читать?
Ребята все заработало, проблема была в том, что по окончанию работы с дисплеем эта ножка устанавливается в низкое состояние. Установил в высокое и все заработало.
[uquote="baghear",url="/forum/viewtopic.php?p=3608772#p3608772"]Поясните пожалуйста, почему над кодом выше надо задуматься?[/uquote]Над BSRR, вижу, поработали. А дальше? По коду вижу задачу поменять значения битов GPIO_MODER_MODER2_0 и GPIO_MODER_MODER2_1 на противоположные. Давай сравнивать.
Последний вариант, правда, надо применять очень "строго" и я бы его не рекомендовал. Зато, если режим работы других ножек на GPIOD не меняется, то рекомендовал бы просто запись новой константы в MODER.
А разве не в этой теме недавно обсуждали эти конструкции, где не надо отдельно каждый бит выписывать, что лучше делать сразу все? И тоже ассемблер приводили.
Добавлено after 1 minute 26 seconds:
Я бы тоже написал в две строки... Может не совсем рационально, но зато понятнее. )))
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3609441#p3609441"]А разве не в этой теме недавно обсуждали[/uquote]Да где только не обсуждали, а толку?
Вон в соседней теме пишет
Подскажите как более правильно писать 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 байт озу? Может я, по не знанию, что то не то подключил? Или это не ОЗУ?