Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: stm32h7**

Чт янв 13, 2022 20:56:53

tonyk, Измерительный осцилл непростой проект, двигаемся малыми шажками. Именно для измерения низких частот и нужен период. Н743 имеет хорошие оперы на борту с калибровкой.
• 2× operational amplifiers (7.3 MHz bandwidth)

Re: stm32h7**

Сб янв 22, 2022 18:06:48

Измерительный осцилл кроме разных напряжений должен измерять частоты и периоды. В Н743 есть таймер высокого разрешения 2nS и возможность CubeIDE в один клик настроить измерение параметров ШИМ сигнала, длит. импульса и период. Параллельно на другом таймере считаем импульсы за секунду для более точного измерения на высоких частотах.

Re: stm32h7**

Сб янв 22, 2022 19:24:19

HAL и скорость- вещи несовместимые. Как не столкнусь с ХАЛом, так постоянно вижу туеву хучу кода на все случаи жизни, особенно в обработчиках прерываний. Так что осваивай работу с периферией напрямую.

Re: stm32h7**

Сб янв 22, 2022 19:42:44

возможность CubeIDE в один клик
Только проблема в том, что возможность сделать в один клик тотально уничтожает три четверти возможностей периферии, сводя все к тупейшим вариантам использования. Это терпимо лишь для тех, кто ставит типовые и простые задачи.

Re: stm32h7**

Сб янв 22, 2022 19:58:18

tonyk, HAL_TIM_ReadCapturedValue(&htim1, TIM_CHANNEL_1);
Так нельзя? Там же данные защелкнулись. CubeIDE(MX) настраивает работу таймеров на внутренних связях по железу.

Добавлено after 5 minutes 34 seconds:
КРАМ, Как сделать в один клик тоже полезно знать, если читать и переводить 4000стр. даташита нет времени.

Re: stm32h7**

Сб янв 22, 2022 20:08:05

переводить 4000стр. даташита нет времени.

А их сразу все и не требуется читать. Задачи решают по частям, выстраивая их под требуемую периферию и ее особенности.
Для того, чтобы работать с АЦП-ДМА, не требуется сильно вникать в интерфейсы экранной графики.
Кстати, нажимая на кнопки конфигуратора, тоже нужно понимать к чему это приведет... Такшта даташит придется таки читать.
Не вникал в фичи конкретно Н7, но нынче полно МК с разрешением быстрого ШИМ от 250 пс (0,25 нс) и даже менее. При относительно низкой частоте накачки самого МК.

Re: stm32h7**

Сб янв 22, 2022 20:11:36

Кстати, в CubeIDE для прерываний создается отдельный файл типа stm32хxx_it.c и там можно обрабатывать прерывания. Зачем еще тащить обработчик в main.c?

Re: stm32h7**

Сб янв 22, 2022 20:14:43

для прерываний создается отдельный файл

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

Re: stm32h7**

Сб янв 22, 2022 20:16:00

КРАМ, делать ШИМ и читать ШИМ это может быть не одно и тоже.

Re: stm32h7**

Сб янв 22, 2022 20:16:33

linkov1959, я не пользуюсь ХАЛом, а если пользуюсь, то как затычкой-времянкой, когда нет времени долго вникать, а нужен результат здесь и сейчас. Потом переписываю под свою задачу без всяких ХАЛов. А уж если задача изначально требует выжимать из "железа" все соки, то тут хошь-не-хошь, но вникай в работу "железа". Кстати, на ХАЛ мурзилка нифига не маленькая, например, UM1095- это описание HAL на F7 размером чуть меньше 2000 страниц.

Re: stm32h7**

Сб янв 22, 2022 20:22:47

делать ШИМ и читать ШИМ это может быть

Я не знаю что вы имеете ввиду, но захват (Input Capture) в этих шимах тоже имеется. Хотя понятно, что методы высокого разрешения для пикосекундного Output Compare не применимы для реального счета в Input Capture. Однако и 2 нс это огромный пласт МК с гораздо меньшими тактовыми частотами, нежели Н7. Обычно все эти ШИМы работают на своем осцилляторном домене.

Re: stm32h7**

Сб янв 22, 2022 20:25:20

tonyk, я сначала отрабатываю проекты на f103 по готовым примерам, а потом переношу на h743 и HAL это делает.

Re: stm32h7**

Вс янв 23, 2022 18:05:34

tonyk, я сначала отрабатываю проекты на f103 по готовым примерам, а потом переношу на h743 и HAL это делает.

КРАМ тебе верно сказал, что ХАЛ не способен переносить проекты один-в-один. Сам посуди, в F1 и F7, например, разные UART, поэтому то, что делается в F7 аппаратно невозможно сделать в F1. То есть код, работающий на F1, не сможет использовать возможности UART, установленный в F7. Обрати внимание на название файлов в ХАЛ. Файлы с суффиксом "_ex" как раз и содержат эти специфические функции.
ИМХО, СТМ неправильно сделала ХАЛ. Например, одинаковые UART в F0 и F7, F1 и F4. Вот и надо быдло группировать периферию по версиям. В F1 и H7 разные АЦП, поэтому невозможно сделать перенос кода. Сделать тупую оцифровку одного инжектированного канал- да, можно. А вот, например, оцифровать 2 диффканала с автоматическим смещением и усреднением по 4 точкам и записью в мамять через DMA, например, на Н7 можно, а вот на F1- нельзя, нет у него таких функциональных блоков.

Re: stm32h7**

Вс янв 23, 2022 18:39:58

tonyk, один в один не переносится, но я стараюсь по мере сил. Хотел запустить HTIM по быстрому, но придется учить матчасть, но даташит читать не буду - языкам не обучен.:)

Re: stm32h7**

Сб янв 29, 2022 22:06:45

Этот HTIM больше для ШИМ придуман, частотомер на TIM1 и TIM2 сделал, работает отлично до 250Мгц. Очень легко в кубе настраивать синхронно два таймера.
1 таймер запускает 2 таймер, который по счетному входу считает, пока не переполнится 1 таймер, настроенный на 1 импульс 1сек. В колбеке 1 таймера выводится счетчик 2 таймера, как частота и запускается снова.
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim1)
{
count = __HAL_TIM_GET_COUNTER(&htim2)*8; // значение в счётчике таймера №2, вывод инфы.

HAL_TIM_Base_Stop_IT(&htim1);

// обнуляем счётчик и рестартуем таймер №1 //
__HAL_TIM_SET_COUNTER(&htim2, 0x0000);

HAL_TIM_Base_Start_IT(&htim1);
}
}
https://drive.google.com/file/d/1DBh4Dt ... sp=sharing

Re: stm32h7**

Вс янв 30, 2022 14:16:50

Измеряем период, тут нужно захватывать фронта. Настраиваем в кубе таймер на два канала директ-индирект. В колбеке 1 канала делаем всё.

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM5)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
//TIM2->CNT = 0;
period = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1)+2;
pulse = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_2)+2;

}
}
}
Таймер обнуляем не в колбеке, а по железу настройками в кубе.
https://drive.google.com/file/d/1O8KG6a ... sp=sharing
Итого - с помощью куба и нескольких строчек кода получаем полнофункциональный частотомер. Частоту считает Tim2, период и импульс Tim5, они 32бит. На LCD выводится частота ВЧ, период(частота НЧ), ширина импульса. Точность превосходная.

Re: stm32h7**

Вс янв 30, 2022 17:21:14

Что то в кубе не видно TIM5. Может TIM17?

Re: stm32h7**

Вс янв 30, 2022 17:43:51

240265, отрабатывал код на Tim2, но тот занят будет на ВЧ частоту. Тим17 дает меандр на пинА1, Тим1 дает ШИМ - это всё для отладки. Для частоты и периода достаточно по одному таймеру, можно и один на всё, но идея иметь два входа по ВЧ и НЧ, там разная схемотехника входного усилителя-формирователя. Думаю создать отдельную тему по существу дела.

Re: stm32h7**

Пт май 05, 2023 15:07:25

Дергаю ножку вверх-вниз 50 раз подряд.
На F407 @168МГц и GCC один импульс получается 36 нсек (14 МГц на 50 импульсов) ( На Кейле - быстрее).
То же самoе на Н7 @400Мгц импульс 65 нсек(~8 МГц). Почему?


А если эту ножку на Н7 передерну один раз, как строб, в прерывании таймера -
то длительность уже 380 нсек ??

Re: stm32h7**

Пт май 05, 2023 16:40:15

Посмотрите на какой шине висит GPIO и какая у неё частота. Сколько шинных интерконнектов нужно пройти процессору чтобы до этой шины добраться. И оптимизацию на скорость включить.
С оптимизацией что-то такое должно быть
Код:
//using LED = TLed<GPIO::PE_8>;
//Repeat<5>([](){ LED::On(); LED::Off(); } );
        LDR.N    R2,??DataTable1 ; 0x48001014
        MOVS     R0,#+1
        STRB     R0,[R2, #+5]
        STRB     R0,[R2, #+7]
        STRB     R0,[R2, #+5]
        STRB     R0,[R2, #+7]
        STRB     R0,[R2, #+5]
        STRB     R0,[R2, #+7]
        STRB     R0,[R2, #+5]
        STRB     R0,[R2, #+7]
        STRB     R0,[R2, #+5]
        STRB     R0,[R2, #+7]
Ответить