Перейти к содержанию
    

2 часа назад, do_not_know_Linux сказал:

Скажите пожалуйста, хотелось бы не городить огороды, а как-то правильно сделать чтобы таймер, допустим три раза отсчитал, три раза не значит до трех,  а отсчитал три раза до нуля от определенног значения(тоесть отработал три цикла), а после прекратил работу.  Можно ли это как-то сделать в настройках таймера stm32f103 микроконтроллера?

Включите прерывание по переполнению таймера (в STM32 это называется Update Event), в обработчике этого прерывания отсчитайте 3 события после чего выключите таймер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, Eddy_Em said:

Нормально в STM32 "дозапись" работает, именно на этом и основана эмуляция EEPROM во флеш. У меня обычно килобайт под 100 свободных во флеше остается - с размахом хватает, чтобы какие-нибудь настройки записывать (даже если размер структуры с настройками под 256 байт, это получается аж 400 записей вплоть до необходимости заново стирать все страницы).

Я пробовал на STM32F103 эмулировать EEPROM у меня получилось только страницами по 2К работать без дозаписи. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 часов назад, Eddy_Em сказал:

Нормально в STM32 "дозапись" работает

Разве кто с этим спорил? Вопрос был в дискретности минимального элемента дозаписи.

Для просвещения советую ознакомиться с этой темой:  

Исходя из неё, разные МК семейства STM32 имеют разную величину этой дискретности: 16 бит, 32 бита, ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 hours ago, misyachniy said:

у меня получилось только страницами по 2К работать без дозаписи.

Что-то вы не так делали. Я ж дал ссылку на свой гитхаб, все там нормально работает: стерли всю флеш-память, потом пишем 32-битными или 16-битными блоками. Как память кончилась, опять стираем и снова пишем. При включении использую дихотомию для поиска последней записи.

Иначе у меня куча железяк просто не работала бы!

Понятно, что дискрет зависит от конкретной модели: у некоторых линеек может не быть возможности записи 16-битными блоками. Аналогично и с размером страниц. Т.к. на стадии компиляции это автоматом определить невозможно, я в ld-скрипте указываю.

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 hours ago, do_not_know_Linux said:

Можно ли это как-то сделать в настройках таймера stm32f103 микроконтроллера?

Да, можно: если связать два таймера. Но если "не горит" и скорость невелика, проще в прерывании по UEV считать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У F103 есть таймера 1 и 8. Оба они имеют счетчик повторений RCR. В сочетании с однократным режимом (One pulse mode),  судя по описанию,  он должен обеспечивать именно то, что требуется. Подробности в документации. Не проверял. 

И каким боком этот вопрос к стиранию флеша?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 нивкакую не хочет отрабатывать, он не вызывает обработчик прерывания. В чем может быть дело? ошибок в коде нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, do_not_know_Linux сказал:

В чем может быть дело? ошибок в коде нет

Чудес тоже не бывает, значит - ошибки в коде есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, do_not_know_Linux сказал:

ошибок в коде нет

Занимаюсь программированием МК уже более 20 лет. Разных МК. И уверен, что у меня в моём коде есть ошибки. Непроявляющиеся.

Вы МК потрогали только без году неделя как. Ничего ещё не умеете. И уверены, что ошибок нет. да уж.....  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

52 minutes ago, jcxz said:

Занимаюсь программированием МК уже более 20 лет. Разных МК. И уверен, что у меня в моём коде есть ошибки. Непроявляющиеся.

Вы МК потрогали только без году неделя как. Ничего ещё не умеете. И уверены, что ошибок нет. да уж.....  :biggrin:

ну вот сами посмотрите и согласитесь.  пишу код в котором работает тактирование от таймера, где  таймер TI2 в режиме slave а TIM1 в режиме мастер. все работает. меняю просто адреса и хочу получить чтобы TIM1 был в режиме Slave а ТIM2 в режиме master и не работает. код я не трогал, адреса для пущей уверености заносил не руками а копирование из документации.  Так в чем же может быть дело?  почему TIM1 не хочет работать в режиме Slave?  я что-то упустил?  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, do_not_know_Linux сказал:

меняю просто адреса

3 минуты назад, do_not_know_Linux сказал:

код я не трогал

В этих двух высказываниях Вы противоречите самому себе.

 

С STM32F103 я почти не знаком, но могу предположить, что для смены мастер/слэйв недостаточно просто поменять их местами. Например: могут быть какие-то сигналы (между таймерами), которые вы не инициализируете как надо. Так как не прочитали мануал (или прочитали его по диагонали). И в старом варианте просто их значения по умолчанию удачно совпали с требуемыми, а в новой конфигурации - не совпали. Эта одна из вероятных причин неработы. Или 100500 других...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 минут назад, do_not_know_Linux сказал:

меняю просто адреса и хочу получить чтобы TIM1 был в режиме Slave а ТIM2 в режиме master и не работает

Покажите, что именно и на что вы меняете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, jcxz said:

В этих двух высказываниях Вы противоречите самому себе.

 

С STM32F103 я почти не знаком, но могу предположить, что для смены мастер/слэйв недостаточно просто поменять их местами. Например: могут быть какие-то сигналы (между таймерами), которые вы не инициализируете как надо. Так как не прочитали мануал (или прочитали его по диагонали). И в старом варианте просто их значения по умолчанию удачно совпали с требуемыми, а в новой конфигурации - не совпали. Эта одна из вероятных причин неработы. Или 100500 других...

cобственно по этому и обратился. скажите что надо включить в TIM1 и в TIM2 чтобы TIM1 работал в режиме slave а TIM2 в режиме master?

16 hours ago, Сергей Борщ said:

Покажите, что именно и на что вы меняете.

адреса регистров со смещениями. Сергей, там простыня кода. Тем более форум всегда говорил что не имеет желание читать чужой говнокод. Поэтому я просто написал что не могу сделать так чтобы ТIM1 работал в slave.   И вот спрашиваю что нужно сделать чтобы это получилось.  Я лишь прошу на словах чтобы скзаали что надо включить  и TIM1 и TIM2?  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, jcxz said:

В этих двух высказываниях Вы противоречите самому себе.

 

блин, ребята да перестаньте)))) нашли  в чем найти противоречие. А так конечно же знание логических законов которыми обладают уважаемые форучане и легко находят с помощью них ошибки речах невеж как я, говорят о высокой культуре данного ресурса.  Вы конечно же огромные молодцы

17 hours ago, jcxz said:

недостаточно просто поменять их

скажите на словах что нужно включить в таймере1 и таймере2 чтобы таймер один работал в режиме slave а таймер2 в режиме master?   я надеюсь это не сложно сделать для вас?   для таймера2 я выбираю

в Master mode selection  010

это правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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. Я по-прежнему не понимаю, какие адреса вы пытаетесь менять, поэтому хотел это увидеть.

А ответ на "что нужно сделать" - прочитать документацию. Всю. Возможно, даже несколько раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...