24.03.2015, 09:36
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Это же антилоп-гну!
|
Та да, на пингуина как бы совсем не похож.
Сообщение от eddy
|
это у тебя косяк, т.к. таймеры абсолютно идентичны".
|
Не абсолюьно, но в целом.
Сообщение от eddy
|
могу и 2-3 дня убить, методом тыка "отлаживая".
|
Если такая тяга к садомазохизму, юзай тестовые светодиоды, вывод через ЮАРТ. Отладочную информацию как-то получать то надо?
|
|
|
|
24.03.2015, 10:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от STM32F0
|
вывод через ЮАРТ
|
Им и пользуюсь, только не UART, а USB.
Проблему решил выкидыванием таймера. Причину зависона понял: почему-то я считал, что у меня частота APB1 == 72МГц (хотя там 36МГц), соответственно, в prescaler выставлял 71. Таймер 1 сидит на APB2, у которой частота 72 → период получился реально 1мкс, а не 2мкс как было раньше, и функции, похоже, просто не успевали завершиться до срабатывания таймера. В итоге происходила хрень, когда функция еще не закончилась, а из прерывания уже ее опять вызвали.
А может я и не прав и там какая-то магия.
Так как задержки там микросекундные, я решил не мудрствовать лукаво и поступить, как делают аврщики:
Код:
|
us *= 72;
for (i = 0; i ‹ us; i++) __asm__("nop"); |
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
24.03.2015, 10:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Ну не все даже AVR щики так делают. Ибо сначала определяют сколько тактов процессора будет выполняться этот цикл. И уж 72 точно станет меньше 24
|
|
|
|
24.03.2015, 10:35
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Проблему решил выкидыванием таймера.
|
Предлагаю более радикальный метод - выкинуть МК! Это настоящее решение всех проблем!
Сообщение от eddy
|
Так как задержки там микросекундные, я решил не мудрствовать лукаво и поступить, как делают аврщики
|
Вперёд к прошлому!
(слов нет)
|
|
|
|
24.03.2015, 10:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Во, нагуглил более подходящий способ микросекундных задержек: на измерении количества тактов.
Код:
|
#define DWT_CYCCNT *(volatile uint32_t *)0xE0001004
#define DWT_CONTROL *(volatile uint32_t *)0xE0001000
#define SCB_DEMCR *(volatile uint32_t *)0xE000EDFC
us *= 72;
SCB_DEMCR |= 0x01000000;
DWT_CYCCNT = 0;
DWT_CONTROL|= 1;
while(DWT_CYCCNT ‹ us); |
Конечно, получается малость побольше, но мне важно именно минимальную задержку выдержать, чтобы у затвора переходные процессы успели пройти.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
24.03.2015, 10:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Так как задержки там микросекундные, я решил не мудрствовать лукаво и поступить, как делают аврщики
|
Сорри за оффтоп: А как же "говнокод" с "ногодрыгом" ?
|
|
|
|
24.03.2015, 11:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Wiza_, пусть у меня лучше TIM1 в резерве будет, нежели я и его задействую для микросекундных пауз.
Хотя, конечно, можно запускать таймер в режиме "одновибратора", но не асинхронно, а ожидать, пока он отработает.
Те же яйца, только в профиль.
У меня подобная хрень была с реализацией программного I2C на STM8: сначала хотел по-кошерному, на таймерах (DMA там нет, поэтому жопа), но т.к. скорость слишком высока, в прерываниях ничего не выходит сделать, т.е. таймер можно использовать лишь для сравнительно точных пауз.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
24.03.2015, 11:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Конечно, получается малость побольше, но мне важно именно минимальную задержку выдержать, чтобы у затвора переходные процессы успели пройти.
|
М-м. Не понял соли.
Пины ногодрыгом управляются что ли?
|
|
|
|
24.03.2015, 11:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
пусть у меня лучше TIM1 в резерве будет
|
Так и я о том же ! "Если можешь сделать без лишней периферии - делай без неё". А то выводы о "коровости говнокода" в последнее время встречаются... слишком неуместно
|
|
|
|
24.03.2015, 11:49
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Wiza_, Ну дык не каждому это дано .
Это всего лишь ляпы eddy и не более, выводы о говнокоде в силе ...
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:23.
|
|