gerber 8 11 января, 2022 Опубликовано 11 января, 2022 · Жалоба 2 часа назад, do_not_know_Linux сказал: Скажите пожалуйста, хотелось бы не городить огороды, а как-то правильно сделать чтобы таймер, допустим три раза отсчитал, три раза не значит до трех, а отсчитал три раза до нуля от определенног значения(тоесть отработал три цикла), а после прекратил работу. Можно ли это как-то сделать в настройках таймера stm32f103 микроконтроллера? Включите прерывание по переполнению таймера (в STM32 это называется Update Event), в обработчике этого прерывания отсчитайте 3 события после чего выключите таймер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 11 января, 2022 Опубликовано 11 января, 2022 · Жалоба 18 hours ago, Eddy_Em said: Нормально в STM32 "дозапись" работает, именно на этом и основана эмуляция EEPROM во флеш. У меня обычно килобайт под 100 свободных во флеше остается - с размахом хватает, чтобы какие-нибудь настройки записывать (даже если размер структуры с настройками под 256 байт, это получается аж 400 записей вплоть до необходимости заново стирать все страницы). Я пробовал на STM32F103 эмулировать EEPROM у меня получилось только страницами по 2К работать без дозаписи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 11 января, 2022 Опубликовано 11 января, 2022 · Жалоба 20 часов назад, Eddy_Em сказал: Нормально в STM32 "дозапись" работает Разве кто с этим спорил? Вопрос был в дискретности минимального элемента дозаписи. Для просвещения советую ознакомиться с этой темой: Исходя из неё, разные МК семейства STM32 имеют разную величину этой дискретности: 16 бит, 32 бита, ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 12 января, 2022 Опубликовано 12 января, 2022 (изменено) · Жалоба 20 hours ago, misyachniy said: у меня получилось только страницами по 2К работать без дозаписи. Что-то вы не так делали. Я ж дал ссылку на свой гитхаб, все там нормально работает: стерли всю флеш-память, потом пишем 32-битными или 16-битными блоками. Как память кончилась, опять стираем и снова пишем. При включении использую дихотомию для поиска последней записи. Иначе у меня куча железяк просто не работала бы! Понятно, что дискрет зависит от конкретной модели: у некоторых линеек может не быть возможности записи 16-битными блоками. Аналогично и с размером страниц. Т.к. на стадии компиляции это автоматом определить невозможно, я в ld-скрипте указываю. Изменено 12 января, 2022 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 12 января, 2022 Опубликовано 12 января, 2022 · Жалоба 23 hours ago, do_not_know_Linux said: Можно ли это как-то сделать в настройках таймера stm32f103 микроконтроллера? Да, можно: если связать два таймера. Но если "не горит" и скорость невелика, проще в прерывании по UEV считать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 12 января, 2022 Опубликовано 12 января, 2022 · Жалоба У F103 есть таймера 1 и 8. Оба они имеют счетчик повторений RCR. В сочетании с однократным режимом (One pulse mode), судя по описанию, он должен обеспечивать именно то, что требуется. Подробности в документации. Не проверял. И каким боком этот вопрос к стиранию флеша? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 12 января, 2022 Опубликовано 12 января, 2022 · Жалоба 1 hour ago, Сергей Борщ said: У F103 есть таймера 1 и 8. Оба они имеют счетчик повторений RCR. В сочетании с однократным режимом (One pulse mode), судя по описанию, он должен обеспечивать именно то, что требуется. Подробности в документации. Не проверял. И каким боком этот вопрос к стиранию флеша? Cпасибо... 1 hour ago, Сергей Борщ said: И каким боком этот вопрос к стиранию флеша? да просто чтобы не плодить темы. это очень не нравится модераторам 2 hours ago, Eddy_Em said: если связать два таймера. Вот еще один совет от вас не помешает... два таймера, TIM1 если как master, а TIM2 как slave то все ок, TIM2 тактируется от TIM1, но если наоборот, то не получается. TIM1 нивкакую не хочет отрабатывать, он не вызывает обработчик прерывания. В чем может быть дело? ошибок в коде нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 12 января, 2022 Опубликовано 12 января, 2022 · Жалоба 6 минут назад, do_not_know_Linux сказал: В чем может быть дело? ошибок в коде нет Чудес тоже не бывает, значит - ошибки в коде есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 12 января, 2022 Опубликовано 12 января, 2022 · Жалоба 45 минут назад, do_not_know_Linux сказал: ошибок в коде нет Занимаюсь программированием МК уже более 20 лет. Разных МК. И уверен, что у меня в моём коде есть ошибки. Непроявляющиеся. Вы МК потрогали только без году неделя как. Ничего ещё не умеете. И уверены, что ошибок нет. да уж..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 12 января, 2022 Опубликовано 12 января, 2022 · Жалоба 52 minutes ago, jcxz said: Занимаюсь программированием МК уже более 20 лет. Разных МК. И уверен, что у меня в моём коде есть ошибки. Непроявляющиеся. Вы МК потрогали только без году неделя как. Ничего ещё не умеете. И уверены, что ошибок нет. да уж..... ну вот сами посмотрите и согласитесь. пишу код в котором работает тактирование от таймера, где таймер TI2 в режиме slave а TIM1 в режиме мастер. все работает. меняю просто адреса и хочу получить чтобы TIM1 был в режиме Slave а ТIM2 в режиме master и не работает. код я не трогал, адреса для пущей уверености заносил не руками а копирование из документации. Так в чем же может быть дело? почему TIM1 не хочет работать в режиме Slave? я что-то упустил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 12 января, 2022 Опубликовано 12 января, 2022 · Жалоба 3 минуты назад, do_not_know_Linux сказал: меняю просто адреса 3 минуты назад, do_not_know_Linux сказал: код я не трогал В этих двух высказываниях Вы противоречите самому себе. С STM32F103 я почти не знаком, но могу предположить, что для смены мастер/слэйв недостаточно просто поменять их местами. Например: могут быть какие-то сигналы (между таймерами), которые вы не инициализируете как надо. Так как не прочитали мануал (или прочитали его по диагонали). И в старом варианте просто их значения по умолчанию удачно совпали с требуемыми, а в новой конфигурации - не совпали. Эта одна из вероятных причин неработы. Или 100500 других... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 12 января, 2022 Опубликовано 12 января, 2022 · Жалоба 57 минут назад, do_not_know_Linux сказал: меняю просто адреса и хочу получить чтобы TIM1 был в режиме Slave а ТIM2 в режиме master и не работает Покажите, что именно и на что вы меняете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 13 января, 2022 Опубликовано 13 января, 2022 · Жалоба 16 hours ago, jcxz said: В этих двух высказываниях Вы противоречите самому себе. С STM32F103 я почти не знаком, но могу предположить, что для смены мастер/слэйв недостаточно просто поменять их местами. Например: могут быть какие-то сигналы (между таймерами), которые вы не инициализируете как надо. Так как не прочитали мануал (или прочитали его по диагонали). И в старом варианте просто их значения по умолчанию удачно совпали с требуемыми, а в новой конфигурации - не совпали. Эта одна из вероятных причин неработы. Или 100500 других... cобственно по этому и обратился. скажите что надо включить в TIM1 и в TIM2 чтобы TIM1 работал в режиме slave а TIM2 в режиме master? 16 hours ago, Сергей Борщ said: Покажите, что именно и на что вы меняете. адреса регистров со смещениями. Сергей, там простыня кода. Тем более форум всегда говорил что не имеет желание читать чужой говнокод. Поэтому я просто написал что не могу сделать так чтобы ТIM1 работал в slave. И вот спрашиваю что нужно сделать чтобы это получилось. Я лишь прошу на словах чтобы скзаали что надо включить и TIM1 и TIM2? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 13 января, 2022 Опубликовано 13 января, 2022 · Жалоба 17 hours ago, jcxz said: В этих двух высказываниях Вы противоречите самому себе. блин, ребята да перестаньте)))) нашли в чем найти противоречие. А так конечно же знание логических законов которыми обладают уважаемые форучане и легко находят с помощью них ошибки речах невеж как я, говорят о высокой культуре данного ресурса. Вы конечно же огромные молодцы 17 hours ago, jcxz said: недостаточно просто поменять их скажите на словах что нужно включить в таймере1 и таймере2 чтобы таймер один работал в режиме slave а таймер2 в режиме master? я надеюсь это не сложно сделать для вас? для таймера2 я выбираю в Master mode selection 010 это правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 13 января, 2022 Опубликовано 13 января, 2022 · Жалоба 3 часа назад, do_not_know_Linux сказал: Поэтому я просто написал что не могу сделать так чтобы ТIM1 работал в slave. И вот спрашиваю что нужно сделать чтобы это получилось. Я лишь прошу на словах чтобы скзаали что надо включить и TIM1 и TIM2? В документации об этом написано совершенно однозначно: для того, чтобы TIM1 работал как slave для TIM2, надо в TIM1->SMCR.TS записать b'001' и желаемый режим записать в TIM1->SMCR.SMS. При этом TIM2 должен выдавать необходимый сигнал на TRGO. Какой именно сигнал будет выдаваться на TRGO - определяется полем CR2.MMS. Я по-прежнему не понимаю, какие адреса вы пытаетесь менять, поэтому хотел это увидеть. А ответ на "что нужно сделать" - прочитать документацию. Всю. Возможно, даже несколько раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться