-
- Подход неправильный, оно быстро развалится опять. Надо либо брать библиотечные функции для реального времени, либо писать их на том же ассемблере. Если библиотечные, то тщательно читать условия работы, ибо (→). Если писать — то учитывая Николай Коровин(420 знак., 26.11.2016 12:31, ссылка)
- В Cortex-M3, M4, M7 обычно есть 32-бит дебаг-таймер DWT CYCCNT в ядре - Vit(26.11.2016 09:01 - 09:06)
- Использование DWT счетчика: VAI(215 знак., 27.11.2016 10:23)
- Поддерживаю. Можно еще SysTick пользовать. - LightElf(26.11.2016 13:04)
- так дело-то как раз в том, что там по умолчанию 1 мсек. - Лагунов(26.11.2016 15:33)
- Дык не надо ждать пока он переполнится - читайте текущее значение и дальше простая арифметика. - LightElf(26.11.2016 15:36)
- ну тоже вариант конечно. Но оказалось, что в бОльшей части выводов STM32 можно хоть какой-то таймер найти для однократного импульса. :-) И достаточно одной строки программы. - Лагунов(26.11.2016 17:15)
- Это ТруЪ™ - SciFi(26.11.2016 17:17)
- Эта "простая арифметика" легко может загнать неокрепшие умы в ступор :-) - SciFi(26.11.2016 16:55)
- Да ладно, чего там сложного. Но DWT->CYCCNT удобнее (поскольку полный 32-битный счетчик). Только не везде он есть. - LightElf(26.11.2016 17:22)
- ну тоже вариант конечно. Но оказалось, что в бОльшей части выводов STM32 можно хоть какой-то таймер найти для однократного импульса. :-) И достаточно одной строки программы. - Лагунов(26.11.2016 17:15)
- Дык не надо ждать пока он переполнится - читайте текущее значение и дальше простая арифметика. - LightElf(26.11.2016 15:36)
- так дело-то как раз в том, что там по умолчанию 1 мсек. - Лагунов(26.11.2016 15:33)
- Судя по частотам у вас arm или pic32. На этих процессорах задержки делают таймером потому что: конвейер, кэш, шинные коммутаторы (иногда с прозрачным fifo) и самое главное - изменяющееся тактирование в зависимости от режимов энергосбережения 3m(12 знак., 26.11.2016 08:54)
- да, согласен, надо ломать психологию :-) - Лагунов(26.11.2016 11:56)
- Учти ещё, что прерывание может сильно удлинить задержку на нопе. И многозадачность тоже. - fk0(26.11.2016 12:05)
- да, согласен, надо ломать психологию :-) - Лагунов(26.11.2016 11:56)
- Эм.. Можно так же __NOP(); А зачем, собственно? Битбанг? Если времянку - то лучше таймеры. - Dingo(26.11.2016 08:29)
- импульс на порту сформировать 10...15 мкс. А вот это NOP(); выполняется пропорционально (и насколько?) тактовой частоте ведь? - Лагунов(26.11.2016 08:33)
- Да импульс-то можно хоть на SPI, хоть на USART. - Олдфаг(26.11.2016 10:38, )
- Есть у таймеров STM32 режим формирования одного импульса - Vit(26.11.2016 09:20)
- очень полезный режим - для понимания и справки по применению - vitan(26.11.2016 23:10, ссылка)
- спасибо, у меня как раз на этой ножке выход TIM15 :-) - Лагунов(27.11.2016 06:41)
- очень полезный режим - для понимания и справки по применению - vitan(26.11.2016 23:10, ссылка)
- Лучше таймер. Если STM32 - два TIMx_OCx на одном таймере решат ситуацию. А пустой оператор <- конвейер, число тактов чтения, наличие кэша, выранивание/отсутвие, ... Dingo(276 знак., 26.11.2016 08:37 - 08:44)
- импульс на порту сформировать 10...15 мкс. А вот это NOP(); выполняется пропорционально (и насколько?) тактовой частоте ведь? - Лагунов(26.11.2016 08:33)