-
- Странно, что прерывание USB_LP_CAN1_RX0_IRQHandler() выполняется только один раз. Процесс энумерации, как я понимаю, минимум 20 пакетов всяких переговоров с хостом. А их нет совсем, согласно BusHound - usb здесь(20.03.2015 08:56)
- Спасибо. Поставил точку останова. Прерывание происходит один раз. USB_LP_CAN1_RX0_IRQHandler() есть, определена в stm32_it.c и вызывает только USB_Istr(), определённую в usb_istr.c USB здесь(362 знак., 19.03.2015 21:29, ссылка)
- Конфигурировать там особо нечего, вот вся инициализация из работающего проекта: йцукен(363 знак., 20.03.2015 16:28, )
- Подскажите единицы измерения __delay(1000); Микросекунды? Как раз 1 миллисекунда - период обмена USB 2.0 - usb здесь(30.03.2015 17:23)
- delay там в абстрактных попугаях, фактически мельче микросекунды. Это время не играет особой роли, всё происходит до того, как включен pullup, так что никаким "обменом" ещё не пахнет. Инициализация позволяет получать SOF и Bus Reset, после Bus йцукен(45 знак., 30.03.2015 19:28, )
- Вроде так и сделал. Не работает( Стал подозревать неверные клоки. Решил проверить таймером и светодиодом. Теперь в полных непонятках. 72MHz/72/1000/10000 должно давать 10 секундные интервалы между переключениями. По факту примерно в 100 раз чаще. usb здесь(69 знак., 31.03.2015 11:49)
- Из функции delay нужно выкинуть йцукен(324 знак., 01.04.2015 19:44, )
- Решил попробовать SysTick для проверки SYSCLK=72MHz, раз не понял фокус с TIM3, теперь периодически валится в HardFault_Handler() usb здесь(69 знак., 03.04.2015 13:03)
- Поменял направление up->down: TIM3->CNT=timeout-1; TIM3->CR1=(TIM_CR1_OPM|TIM_CR1_CEN|TIM_CR1_DIR); Не помогло, всё равно непонятный период моргания контрольного светодиода USB здесь(02.04.2015 06:45)
- За минуту прерывание тикает примерно 24 раза, вместо ожидаемых 60. Что-то не так. Вроде кварц 12 МГц. PLL*=6; SYSCLK=72 МГц; USB здесь(359 знак., 02.04.2015 01:16)
- Спасибо, период таймера стал ближе к ожидаемому. Смысл был в том, чтобы немедленно применились новые значения PSC, ARR и начать новый период с нулевых теневых счётчиков (с которыми сравниваются теневые аналоги PSC и ARR). Для гарантии, что USB здесь(363 знак., 02.04.2015 00:36)
- И еще - ты в курсе что шина APB1 может работать только на <=36MHz? А ты ее на 72MHz гоняешь, судя по этому коду. - il-2(01.04.2015 11:42)
- Спасибо, пофиксил, теперь с RCC_CFGR_PPRE1_DIV2 USB здесь(02.04.2015 00:39)
- Вот я лошара. В RM же на 90 странице по-русски написано "The maximum allowed frequency of the APB1 domain is 36 MHz." А TIM3 как раз висит на APB1. Дикий оверклок получаецца. Чо удивляться таймер не так тикает. - usb здесь(01.04.2015 13:12)
- Зачем закомментировал? Как он у тебя выйдет из Suspend??? Так и будет висеть на __WFI(). В обработчике прерывания не забудь сделать сброс запроса на прерывание (больше там ничего не нужно). il-2(99 знак., 01.04.2015 11:01)
- Спасибо, вернул EXTI->IMR=EXTI_IMR_MR18; USB здесь(420 знак., 02.04.2015 00:49)
- Из функции delay нужно выкинуть йцукен(324 знак., 01.04.2015 19:44, )
- Вроде так и сделал. Не работает( Стал подозревать неверные клоки. Решил проверить таймером и светодиодом. Теперь в полных непонятках. 72MHz/72/1000/10000 должно давать 10 секундные интервалы между переключениями. По факту примерно в 100 раз чаще. usb здесь(69 знак., 31.03.2015 11:49)
- Может, ты имел в виду период тика SOF USB full speed. А что такое "период обмена"? - ASDFS(30.03.2015 17:50)
- Да, период тика. Чаще чем хост выдаст Start-Of-Frame обмен ведь не происходит? Для VirtualCOM размер пакета не более 64 байт. Выходит пиковая скорость 64000 байт/сек. Немного, но в любом случае в разы быстрее 115200 бит/с. - usb здесь(31.03.2015 11:11)
- Не надо путать Interrupt режим и Bulk, в котором и работает VCP. И скорость там ограничена практически только Phy уровнем = реально можно на USB1.1 больше 1Мб/с получить. - Hives(01.04.2015 11:09, )
- Зависит от драйвера. Если драйвер позволяет - можно и чаще. Ограничение один пакет на тик явным образом прописано в стандарте только для HID драйверов. У остальных это определяется авторами конкретных дровишек. И потом есть USB High Speed, там тик ASDFS(9 знак., 31.03.2015 12:12)
- В stm32f103 нет HighSpeed :( - usb здесь(31.03.2015 14:21)
- Да, период тика. Чаще чем хост выдаст Start-Of-Frame обмен ведь не происходит? Для VirtualCOM размер пакета не более 64 байт. Выходит пиковая скорость 64000 байт/сек. Немного, но в любом случае в разы быстрее 115200 бит/с. - usb здесь(31.03.2015 11:11)
- delay там в абстрактных попугаях, фактически мельче микросекунды. Это время не играет особой роли, всё происходит до того, как включен pullup, так что никаким "обменом" ещё не пахнет. Инициализация позволяет получать SOF и Bus Reset, после Bus йцукен(45 знак., 30.03.2015 19:28, )
- Подскажите единицы измерения __delay(1000); Микросекунды? Как раз 1 миллисекунда - период обмена USB 2.0 - usb здесь(30.03.2015 17:23)
- Конфигурировать там особо нечего, вот вся инициализация из работающего проекта: йцукен(363 знак., 20.03.2015 16:28, )