Кто любит RISC в жизни, заходим, не стесняемся.
Чт янв 13, 2022 20:56:53
tonyk, Измерительный осцилл непростой проект, двигаемся малыми шажками. Именно для измерения низких частот и нужен период. Н743 имеет хорошие оперы на борту с калибровкой.
• 2× operational amplifiers (7.3 MHz bandwidth)
Сб янв 22, 2022 18:06:48
Измерительный осцилл кроме разных напряжений должен измерять частоты и периоды. В Н743 есть таймер высокого разрешения 2nS и возможность CubeIDE в один клик настроить измерение параметров ШИМ сигнала, длит. импульса и период. Параллельно на другом таймере считаем импульсы за секунду для более точного измерения на высоких частотах.
Сб янв 22, 2022 19:24:19
HAL и скорость- вещи несовместимые. Как не столкнусь с ХАЛом, так постоянно вижу туеву хучу кода на все случаи жизни, особенно в обработчиках прерываний. Так что осваивай работу с периферией напрямую.
Сб янв 22, 2022 19:42:44
возможность CubeIDE в один клик
Только проблема в том, что возможность сделать в один клик тотально уничтожает три четверти возможностей периферии, сводя все к тупейшим вариантам использования. Это терпимо лишь для тех, кто ставит типовые и простые задачи.
Сб янв 22, 2022 19:58:18
tonyk, HAL_TIM_ReadCapturedValue(&htim1, TIM_CHANNEL_1);
Так нельзя? Там же данные защелкнулись. CubeIDE(MX) настраивает работу таймеров на внутренних связях по железу.
Добавлено after 5 minutes 34 seconds:
КРАМ, Как сделать в один клик тоже полезно знать, если читать и переводить 4000стр. даташита нет времени.
Сб янв 22, 2022 20:08:05
переводить 4000стр. даташита нет времени.
А их сразу все и не требуется читать. Задачи решают по частям, выстраивая их под требуемую периферию и ее особенности.
Для того, чтобы работать с АЦП-ДМА, не требуется сильно вникать в интерфейсы экранной графики.
Кстати, нажимая на кнопки конфигуратора, тоже нужно понимать к чему это приведет... Такшта даташит придется таки читать.
Не вникал в фичи конкретно Н7, но нынче полно МК с разрешением быстрого ШИМ от 250 пс (0,25 нс) и даже менее. При относительно низкой частоте накачки самого МК.
Сб янв 22, 2022 20:11:36
Кстати, в CubeIDE для прерываний создается отдельный файл типа stm32хxx_it.c и там можно обрабатывать прерывания. Зачем еще тащить обработчик в main.c?
Сб янв 22, 2022 20:14:43
для прерываний создается отдельный файл
И что? Создать отдельный файл можно вообще для одной функции, если в этом будет хоть какой то смысл.
Разговор шел о том, что работа через колбэки и кучу универсальных проверок в прерываниях тупо тормозят исполнение кода настолько, что прерывания теряют свой изначальный смысл инструмента реального времени.
Сб янв 22, 2022 20:16:00
КРАМ, делать ШИМ и читать ШИМ это может быть не одно и тоже.
Сб янв 22, 2022 20:16:33
linkov1959, я не пользуюсь ХАЛом, а если пользуюсь, то как затычкой-времянкой, когда нет времени долго вникать, а нужен результат здесь и сейчас. Потом переписываю под свою задачу без всяких ХАЛов. А уж если задача изначально требует выжимать из "железа" все соки, то тут хошь-не-хошь, но вникай в работу "железа". Кстати, на ХАЛ мурзилка нифига не маленькая, например, UM1095- это описание HAL на F7 размером чуть меньше 2000 страниц.
Сб янв 22, 2022 20:22:47
делать ШИМ и читать ШИМ это может быть
Я не знаю что вы имеете ввиду, но захват (Input Capture) в этих шимах тоже имеется. Хотя понятно, что методы высокого разрешения для пикосекундного Output Compare не применимы для реального счета в Input Capture. Однако и 2 нс это огромный пласт МК с гораздо меньшими тактовыми частотами, нежели Н7. Обычно все эти ШИМы работают на своем осцилляторном домене.
Сб янв 22, 2022 20:25:20
tonyk, я сначала отрабатываю проекты на f103 по готовым примерам, а потом переношу на h743 и HAL это делает.
Вс янв 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- нельзя, нет у него таких функциональных блоков.
Вс янв 23, 2022 18:39:58
tonyk, один в один не переносится, но я стараюсь по мере сил. Хотел запустить HTIM по быстрому, но придется учить матчасть, но даташит читать не буду - языкам не обучен.
Сб янв 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
Вс янв 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 выводится частота ВЧ, период(частота НЧ), ширина импульса. Точность превосходная.
Вс янв 30, 2022 17:21:14
Что то в кубе не видно TIM5. Может TIM17?
Вс янв 30, 2022 17:43:51
240265, отрабатывал код на Tim2, но тот занят будет на ВЧ частоту. Тим17 дает меандр на пинА1, Тим1 дает ШИМ - это всё для отладки. Для частоты и периода достаточно по одному таймеру, можно и один на всё, но идея иметь два входа по ВЧ и НЧ, там разная схемотехника входного усилителя-формирователя. Думаю создать отдельную тему по существу дела.
Пт май 05, 2023 15:07:25
Дергаю ножку вверх-вниз 50 раз подряд.
На F407 @168МГц и GCC один импульс получается 36 нсек (14 МГц на 50 импульсов) ( На Кейле - быстрее).
То же самoе на Н7 @400Мгц импульс 65 нсек(~8 МГц). Почему?
Спойлер
#define SET_LEDG WRITE_REG(LEDG_GPIO_Port->BSRR, LEDG_Pin)
#define RESET_LEDG WRITE_REG(LEDG_GPIO_Port->BSRR, (LEDG_Pin << 16))
0800da34 <testGpio>:
__attribute__((section("ITCMRAM"))) void testGpio(void) {
800da34: b480 push {r7}
800da36: af00 add r7, sp, #0
SET_LEDG;
800da38: f44f 6380 mov.w r3, #1024 ; 0x400
800da3c: f6c5 0302 movt r3, #22530 ; 0x5802
800da40: f44f 7200 mov.w r2, #512 ; 0x200
800da44: 619a str r2, [r3, #24]
RESET_LEDG;
800da46: f44f 6380 mov.w r3, #1024 ; 0x400
800da4a: f6c5 0302 movt r3, #22530 ; 0x5802
800da4e: f04f 7200 mov.w r2, #33554432 ; 0x2000000
800da52: 619a str r2, [r3, #24]
А если эту ножку на Н7 передерну один раз, как строб, в прерывании таймера -
то длительность уже 380 нсек ??
Пт май 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]
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.