STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3626914#p3626914"]Ну вот объясни, зачем было марать нам мониторы вот этой какашкой[/uquote]
Отдыхайте, товарищ, праздники все-таки. Предлагаю лучше подождать, когда кто-нибудь разглядит в чем фишка.
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Ok, давай сделаем многозначительную паузу. Глядишь от этого цикл из трёх ассемблерных команд заиграет новыми красками :)))
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

То-то смеху будет, когда заиграет. Не ухудшайте своего бедственного положения, мой вам совет.
Аватара пользователя
Adusik
Поставщик валерьянки для Кота
Сообщения: 2198
Зарегистрирован: Ср мар 14, 2007 01:50:10

Re: STM32 новичку в ARM что к чему

Сообщение Adusik »

Подскажите пожалуйста, есть прошивка для STM32F042C4T6, тактируется от внешнего кварца на 16мГц. Будет ли она работать в чипе STM32F072C8T6?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Будет.
Реклама
Аватара пользователя
Adusik
Поставщик валерьянки для Кота
Сообщения: 2198
Зарегистрирован: Ср мар 14, 2007 01:50:10

Re: STM32 новичку в ARM что к чему

Сообщение Adusik »

Спасибо!
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

Компактный код для организации микросекундных задержек по таймеру на STM32F0:

Код: Выделить всё

__STATIC_INLINE void udelay(uint32_t micros) {
  TIM14->SR = TIM14->CNT = 0;
  TIM14->ARR = micros * 8 - 1;
  while (TIM14->CR1 = TIM14->SR + 1 & TIM_SR_UIF) { ; }
}
Можно даже без оформления в процедуру или макрос вставлять в текст программы по мере надобности. Подразумевается, что рабочая частота мк равна 8мгц и тактирование TIM14 включено. Из любопытного, советую обратить внимание на то, каким образом запускается и останавливается таймер. Чем то это напоминает "трюк" из предыдущей загадки. Специалистам по предупреждениям компилятора уже можно начинать голосить. Тут тоже будет предупреждение внутри while().
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32 новичку в ARM что к чему

Сообщение Reflector »

[uquote="a5021",url="/forum/viewtopic.php?p=3628186#p3628186"]Компактный код для организации микросекундных задержек по таймеру на STM32F0[/uquote]
Так не проще?

Код: Выделить всё

__STATIC_INLINE void udelay(uint32_t us)
{
	TIM14->CNT = 0;
	TIM14->CR1 = TIM_CR1_CEN;
	while (TIM14->CNT < us * 8 - 6) {}
	TIM14->CR1 = 0;
}
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

А чем проще-то ? Четыре строки против трех. Какие-то шестерки неизвестного свойства. Да и не по канону как-то -- таймер в железе умеет считать до нужной позиции, чтобы не заниматься этим в софтах.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32 новичку в ARM что к чему

Сообщение Reflector »

[uquote="a5021",url="/forum/viewtopic.php?p=3628253#p3628253"]А чем проще-то ? Четыре строки против трех. Какие-то шестерки неизвестного свойства.[/uquote]
Мой пример предельно простой, генерируемый код будет чуть меньше и никаких предупреждений компилятора(у меня еще и подчеркивание добавляется). Шестерка там нашару взята, чтобы примерно компенсировать время прошедшее после чтения CNT, но она точно лучше единички.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

Тогда так:

Код: Выделить всё

__STATIC_INLINE void u_delay(uint32_t us) {
   TIM14->CNT = 0;
   while (TIM14->CR1 = (TIM14->CNT < us * 8 - 6)) { ; }
}
или даже так:

Код: Выделить всё

#define U_DELAY(US) for(TIM14->CNT = 0; TIM14->CR1 = TIM14->CNT < (US) * 8 - 6;) { ; }
:-)
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32 новичку в ARM что к чему

Сообщение Reflector »

[uquote="a5021",url="/forum/viewtopic.php?p=3628274#p3628274"]Тогда так:[/uquote]
Вообще ты прав, правильнее проверять флаг, потому что если задана большая задержка и какое-то тяжелое прерывание будет длиться до переполнения таймера, то он начнет ждать по-новой... Но тогда уже так, в байтах все равно размер одинаковый:

Код: Выделить всё

__STATIC_INLINE void udelay(uint32_t micros) 
{
	TIM14->SR = TIM14->CNT = 0;
	TIM14->ARR = micros * 8 - 1;
	TIM14->CR1 = TIM_CR1_CEN;
	while (!TIM14->SR) {}
	TIM14->CR1 = 0;
}
Больше на 2 строки, но понятно и никто волнистой линией ничего не подчеркивает :)
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

Не. В этом варианте ошибка в

Код: Выделить всё

while (!TIM14->SR) {}
С первым тиком таймера в TIM14_SR встанет флаг CC1IF и цикл закончится.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32 новичку в ARM что к чему

Сообщение Reflector »

[uquote="a5021",url="/forum/viewtopic.php?p=3628288#p3628288"]

Код: Выделить всё

while (!TIM14->SR) {}
С первым тиком таймера в TIM14_SR встанет флаг CC1IF и цикл закончится.[/uquote]
Нет, если в CCR1 ноль, но флаг выставится вместе с апдейтом, потому что там проверка на равенство, то что после первого цикла в счетчике станет 1 и она больше 0 значения не имеет.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

Хотя, да. Согласен.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Вопрос по таймеру в захвате

Сообщение a5021 »

В данный момент проверить никак, а вопрос чешется. Суть же вот в чем: на F0 два канала таймера в режиме захвата можно скоммутировать к одному входному пину. Так делают, например, для того, чтобы измерять период следования и длительность импульсов на этом входе. Метода простая, понятная и есть масса информации по данному вопросу. Мне же тут подумалось о другом: что получится, если с первого канала к данному пину подключить не вход, а выход, предварительно переведя канал на формирование шим-сигнала ? Будет второй канал иметь возможность делать захват фронтов этого шим-сигнала? А такой же захват, если первый канал отключить и дрыгать пином "вручную" ? Чет нифига в интернетах не могу найти подробностей на эту тему.
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: STM32 новичку в ARM что к чему

Сообщение arkhnchul »

[uquote="a5021",url="/forum/viewtopic.php?p=3628253#p3628253"]А чем проще-то ? Четыре строки против трех[/uquote]например отсутствием неочевидных конструкций а-ля "я у мамы кулхацкер" :dont_know:
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

Что такое "неочевидные конструкции" ? Для кого они "неочевидные"?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Да для тебе же самого. Мы то поржём и дальше пойдём, а тебе в этом вариться. За примером далеко ходить не надо. Ты так и не объяснил, зачем вместо простого

Код: Выделить всё

for(;;) GPIOC->ODR = TIM2->CNT & GPIO_ODR_ODR13;
пишешь подобную дичь?

Код: Выделить всё

for(__O int *i = &GPIOC->ODR;; *i = TIM2->CNT & GPIO_ODR_ODR13);
Думаешь страница перевернулась и все забыли?

Так вот, простой и понятный код:
- содержит меньше ошибок;
- проще отлаживать и в последствии сопровождать;
- лучше переносим;
- более эффективно оптимизируется компилятором;
- и т.д. и т.п.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3629832#p3629832"]Да для тебе же самого. Мы то поржём и дальше пойдём, а тебе в этом вариться. За примером далеко ходить не надо. Ты так и не объяснил, зачем вместо простого

Код: Выделить всё

for(;;) GPIOC->ODR = TIM2->CNT & GPIO_ODR_ODR13;
пишешь подобную дичь?

Код: Выделить всё

for(__O int *i = &GPIOC->ODR;; *i = TIM2->CNT & GPIO_ODR_ODR13);
Думаешь страница перевернулась и все забыли?[/uquote]
Я думаю, что вы не смогли разобраться, вам обидно и от этого гоните волну. Забыли/незабыли -- воопрос вообще не стоит. Вопрос здесь больше в том, зачем вы смешиваете два разных случая и делаете вид, будто это один? Набросить, хоть чего нибудь? Ваше право.
Так вот, простой и понятный код:
- содержит меньше ошибок;
...
Похоже на "заговор на удачу".
Ответить

Вернуться в «ARM»