Вот есть функции, но они мне не подходят. GPIO_ResetBits(); GPIO_SetBits();
Есть байт например 0b11110000(он меняется в программе), мне нужно записать 7 бит этого байта в PD9, 5 бит в РВ4 и т.д. Как это реализовать. Туплю сижу.
Используя маску, например, выделяете нужный бит, а по результату (ноль/!ноль) оперируете регистрами "сет-ресет", как сказано выше. Еще через бит-бандинг можно, если он присутствует.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Есть байт например 0b11110000(он меняется в программе), мне нужно записать 7 бит этого байта в PD9, 5 бит в РВ4 и т.д. Как это реализовать. Туплю сижу.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Снова я затупил. может, кто знает, где. Был код на stm32F051. Хочу перенести на stm32F030. Но в 030 нет TIM15. Так как этот таймер мне создавал переодические прерывания и запуск АЦП, пришлось его переместить на TIM1. И вот: нет прерываний (про АЦП еще даже не смотрел).
В отладчике что-то считает. в регистре SR значение 0x001F - Все возможные флаги прерываний выставлены. Не мог же я снова перепутать название функции обработчика? ведь делаю NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn) и обработчик зовётся TIM1_BRK_UP_TRG_COM_IRQnHandler.
Добавлено after 1 hour 38 minutes 51 second: Еще странность... при отладке не разрешает поставить брейкпоинт в этом обработчике. Причем, в соседнем - позволяет (это там где тёмно-серые поля):
Таксс. в хидерах, я не нашел вообще такого названия. Так как должен называться обработчик прерывания от TIM1 ?
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
TIM1 немного отличается от других таймеров. У него надо еще задавать количество повторений в регистре RCR, иначе update event не будет происходить. Спойлер
Код:
uint8_t TIM_RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter reaches zero, an update event is generated and counting restarts from the RCR value (N). This means in PWM mode that (N+1) corresponds to: - the number of PWM periods in edge-aligned mode - the number of half PWM period in center-aligned mode This parameter must be a number between 0x00 and 0xFF. @note This parameter is valid only for TIM1. */ } TIM_TimeBaseInitTypeDef;
Там значение 0 - значит REP+1 = 1. Так что не влияет. Нашел - всё-таки опять напутал с названием функции. Должно было быть TIM1_BRK_UP_TRG_COM_IRQHandler(void) - без 'n'.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Нет, не так. Update event генерируется когда RCR-1=0, то есть для генерации каждый период надо установить RCR=1. Я лично это уже проходил... Извините, вспомнил в чем у меня была проблема - когда инициализировал таймер, не задавал значение TIM_RepetitionCounter и там был мусор.
Cудя по картинке, мне как раз и нужно там 0. Если записать там 1, то update event будет происходить через раз. О, и у TIM15 тоже был такой регистр. А я и не обратил внимания.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Подскажите сброс/установку несколько битов в регистр MODER можно сделать как то более по феншуйне( код был по меньше, а то там ещё парочку регистров настроить и растянется это все на всю страницу )
О спасибо, я же уже натыкался на этот пример правда давненько забыл на проч про него. Если ещё добавить X-macros на соотношение порта и пина то будет отлично.
Как подсчитать количество нажатий кнопки таймером? Использую TIM2, тактирую от ETR2 (pull_up), опускаю ETR2 на землю кнопкой, запускаю таймер HAL_TIM_Base_Start(&htim2) Значение счётчика получаю __HAL_TIM_GET_COUNTER(&htim2) Что-то не работает увеличение счётчика TIM2 от нажатий...
Код:
/* TIM2 init function */ static void MX_TIM2_Init(void) {
Всем доброго времени суток. Спаял платку с STM32F071. Пока решил не разбираться детально с регистрами, сконфигурирован периферию Кубом. И вот что интересно, МК виснет, если выбрать тактирование от HSE, от HSI работает нормально. Не работал раньше с линейкой F0, и впервые конфигурирую периферию Кубом, поэтому возникают вопросы. Можно на 100% доверять конфигам периферии от Куба? Для F0, если проблемы с HSE, разве не включается автоматически HSI? Если я случайно перегрел при пайке выводы входов тактирования.
_________________ Нужно добиваться того чего хочется. В противном случае останется лишь довольствоваться тем, что есть.
Куб 4.20.1. С HSE всё оказалось до смешного банально - не заметил мелкую закоротку между ножками. Убрал - заработало HSE. Теперь та же проблема с LSE - не возводится в 1 бит LSERDY.
_________________ Нужно добиваться того чего хочется. В противном случае останется лишь довольствоваться тем, что есть.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения