Easyelectronics.ru

Электроника для всех
Текущее время: 23 фев 2019, 08:13

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 80 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 24 май 2018, 19:06 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 729
Конечно, всё что в сети лежит - от F103-го. У него совсем другой USB.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 24 май 2018, 19:34 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 572
Reflector писал(а):
Все либы от alexsam, sobs, void1509 и другие, которые мне попадались, писались именно под этот значительно отличающийся USB и никак побыстрому под F4 переделаны быть не могут.


Ну нету у меня чипа с ОТГ, а так можно было бы поиграться. Глянул ДШ, там переделать вроде не сложно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 май 2018, 01:23 
Заглядывает иногда

Зарегистрирован: 17 янв 2014, 22:06
Сообщения: 72
Откуда: Москва
Автор, а для хоста сможете написать программу? До hid надо еще достучаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 25 май 2018, 09:35 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 729
Не знаю к кому вы обращаетесь, ибо автор с темы свалил. Надеюсь, пошёл спецификации грызть. А какая проблема с хостом? Reset, SetAdress, ReadDescriptors, SetConfig и забирай свой HID тёпленьким.

Кстати, когда делал свою реализацию на F107 наткнулся на конкретный косяк в даташите - неправильно описаны статусные биты в одном месте. Если бы не пример с куба, сам бы не разобрался. И в F411, ибо модуль USB, похоже, там скопипащен, то же самое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 25 май 2018, 09:59 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 613
Откуда: Германия
А я вот теперь знаю, как работать с полноценным (не HID) USB-устройством под Виндой (8+) без заморочек со своим драйвером.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 25 май 2018, 10:11 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 729
Возьми с полки пирожок :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 26 май 2018, 10:15 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
Автор темы не свалил. Автор темы в свободное от работы время делает библиотеку для работы с регистрами.
Для ПК есть libusb.
За ссылки на код спасибо, как дело до них дойдет, буду смотреть.

Хм, а ведь еще constexpr генератор дескрипторов надо сделать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 21 июн 2018, 23:50 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
Друзья, подскажите.
Микроконтроллер STM32F407VGT6, плата Discovery. Режим Full Speed.
Потрошу сейчас функцию
Код:
void USBD_Init(USB_OTG_CORE_HANDLE *pdev, USB_OTG_CORE_ID_TypeDef coreID, USBD_DEVICE *pDevice, USBD_Class_cb_TypeDef *class_cb, USBD_Usr_cb_TypeDef *usr_cb)
и то что в ней вызывается. Есть такой файл usb_core.c, в нем функция
Код:
USB_OTG_STS USB_OTG_CoreInitDev (USB_OTG_CORE_HANDLE *pdev)
, а ней этот код:
Код:
#ifdef USB_OTG_FS_CORE
  if(pdev->cfg.coreID == USB_OTG_FS_CORE_ID  )
  { 
   
    /* Set Full speed phy */
    USB_OTG_InitDevSpeed (pdev , USB_OTG_SPEED_PARAM_FULL);
   
    /* set Rx FIFO size */
    USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_FS_SIZE);
   
    /* EP0 TX*/
    nptxfifosize.b.depth     = TX0_FIFO_FS_SIZE;
    nptxfifosize.b.startaddr = RX_FIFO_FS_SIZE;
    USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32 );
   
   
    /* EP1 TX*/
    txfifosize.b.startaddr = nptxfifosize.b.startaddr + nptxfifosize.b.depth;
    txfifosize.b.depth = TX1_FIFO_FS_SIZE;
    USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[0], txfifosize.d32 );
   
   
    /* EP2 TX*/
    txfifosize.b.startaddr += txfifosize.b.depth;
    txfifosize.b.depth = TX2_FIFO_FS_SIZE;
    USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[1], txfifosize.d32 );
   
   
    /* EP3 TX*/ 
    txfifosize.b.startaddr += txfifosize.b.depth;
    txfifosize.b.depth = TX3_FIFO_FS_SIZE;
    USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[2], txfifosize.d32 );
  }
#endif
Происходит запись битов в регистры DIEPTXF1, DIEPTXF2 и DIEPTXF3, которые являются только для чтения! Так сказано в RM Revision 16. Вопрос: как такое может быть?

Далее есть union типа USB_OTG_DIEPMSK_TypeDef для записи битов в регистр DIEPMSK. Который является синонимом для типа _USB_OTG_DIEPINTn_TypeDef (файл usb_reg.h). В этом union сказано:
Код:
typedef union _USB_OTG_DIEPINTn_TypeDef
{
  uint32_t d32;
  struct
  {
uint32_t xfercompl :
    1;
uint32_t epdisabled :
    1;
uint32_t Reserved2 :
    1;
uint32_t timeout :
    1;
uint32_t intktxfemp :
    1;
uint32_t Reserved5 :
    1;
uint32_t inepnakeff :
    1;
uint32_t emptyintr :
    1;
uint32_t txfifoundrn :
    1;
uint32_t Reserved14_31 :
    23;
  }
  b;
} USB_OTG_DIEPINTn_TypeDef ;


RM Revision 16 видим, что в этом регисте есть только эти биты:
Код:
NAKM
Reserved
INEPNEM
INEPNMM
ITTXFEMSK
TOM
Reserved
EPDM
XFRCM

Вопрос: где они тут нашли бит txfifoundrn??? Который выставляется всё в той же функции так:
Код:
msk.d32 = 0;
msk.b.txfifoundrn = 1;
USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPMSK, msk.d32, msk.d32);


Десяток сайтов просмотрел - везде одно и то же.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 22 июн 2018, 02:12 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 814
ElecDron писал(а):
Вопрос: где они тут нашли бит txfifoundrn???

В RM они его нашли, бит называется TXFURM.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 22 июн 2018, 13:26 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 133
Откуда: Украина
Цитата:
Происходит запись битов в регистры DIEPTXF1, DIEPTXF2 и DIEPTXF3, которые являются только для чтения!

Я вижу RW
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 22 июн 2018, 13:49 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
AlexTA писал(а):
Я вижу RW
В предыдущем сообщении я явно говорил только про регистры DIEPTXF1, DIEPTXF2 и DIEPTXF3. Про регистр для конечной точки 0 - НЕ говорил, т.к. он действительно rw. А остальные - нет! Вот, смотрите: www.st.com/resource/en/reference_manual/dm00031020.pdf, страница 1292. В каждой клеточке - буква r. Или я чего-то не понимаю?

Reflector писал(а):
В RM они его нашли, бит называется TXFURM.
Прошелся поиском по документу - нашел этот бит в регистре OTG_HS_DIEPMSK (страница 1447). Однако, как можно видеть, этот регистр используется в режиме High Speed. А в примере из предыдущего сообщения идет настройка режима Full Speed. Как такое может быть? Тут явно куда-то забралась ошибка... Прошу помочь разобраться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 22 июн 2018, 14:34 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 133
Откуда: Украина
Вот еще нашел:
Цитата:
The core has a dedicated FIFO for each IN endpoint. The application configures FIFO sizes
by writing the non periodic transmit FIFO size register (OTG_FS_TX0FSIZ) for IN endpoint0
and the device IN endpoint transmit FIFOx registers (DIEPTXFx) for IN endpoint-x.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 22 июн 2018, 14:44 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 814
ElecDron писал(а):
Прошелся поиском по документу - нашел этот бит в регистре OTG_HS_DIEPMSK (страница 1447). Однако, как можно видеть, этот регистр используется в режиме High Speed. А в примере из предыдущего сообщения идет настройка режима Full Speed. Как такое может быть? Тут явно куда-то забралась ошибка... Прошу помочь разобраться.

Посмотри на TIM_TypeDef, в ней два десятка регистров которые будут доступны для всех таймеров, хотя у некоторых из них этих регистров всего 6. То же самое с определением битов...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 22 июн 2018, 15:08 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
AlexTA писал(а):
Вот еще нашел:
Цитата:
The core has a dedicated FIFO for each IN endpoint. The application configures FIFO sizes
by writing the non periodic transmit FIFO size register (OTG_FS_TX0FSIZ) for IN endpoint0
and the device IN endpoint transmit FIFOx registers (DIEPTXFx) for IN endpoint-x.
Хм... интересно. Получается в RM в описании регистров ошибка с обозначением доступа... Ладно, первая проблема решена, спасибо.

Reflector писал(а):
Посмотри на TIM_TypeDef, в ней два десятка регистров которые будут доступны для всех таймеров, хотя у некоторых из них этих регистров всего 6. То же самое с определением битов...
Не, одно дело универсальная структура "для всего" и выборочное использование ее членов, а другое - использование этих членов там, где они не должны испольоваться. В регистре OTG_FS_DIEPMSK бит - Reverved. Keep value at 0.
Ваш диагоз? То что этот бит в конце концов физически есть у OTG_FS_DIEPMSK, и его можно безболезненно писать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 22 июн 2018, 16:17 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 814
ElecDron писал(а):
Ваш диагоз? То что этот бит в конце концов физически есть у OTG_FS_DIEPMSK, и его можно безболезненно писать?

Если у HS он есть, а у FS не известно, при этом HS если и будет работать, то в режиме FS, значит имеет смысл просто оставить этот бит в покое и в нулевом состоянии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 23 июн 2018, 14:32 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
Еще вопрос: для работы USB инициализируют ноги ID и VBUS. Разъем порта ID на плате DISCOVERY притянут к земле. Зачем тогда его инициализируют в коде?
Нога VBUS (PA9) - тоже не понятно зачем нужна. Да и альтернативной функции такое нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 24 июн 2018, 01:24 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 729
ElecDron писал(а):
Нога VBUS (PA9) - тоже не понятно зачем нужна.

Для определения подключения к шине USB. Настраивается просто на вход и всё. В некоторых чипах без этого сигнала USB-интерфейс физически отключается и USB не запустить. В других можно программно обойти его.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 24 июн 2018, 17:35 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
Для чипа STM32F407VGT6 ножка VBUS обязательно нужна или нет?

И вообще, насколько она нужна на тех МК, где есть программный обход? Что-то полезное у неё есть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 24 июн 2018, 20:33 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
В общем вроде удалось распотрошить функции инициализации USB. Друзья, кто специалист по USB, прошу посмотреть на этот код инициализации, все ли необходимое в нем есть. А может быть часть попросту не нужна.
Коротко, что нужно:
1. МК STM32F407VGT6 (плата Discovery)
2. USB Full Speed
3. Режим Device
4. С ногами ID и VBUS не определился.
5. DMA отсутствует. Нужен?

Код:
// начало инициализации модуля USB.
constexpr uint16 RX_FIFO_SIZE = 128;
constexpr uint16 TX0_FIFO_SIZE = 64;
constexpr uint16 TX1_FIFO_SIZE = 128;
constexpr uint16 TX2_FIFO_SIZE = 0;
constexpr uint16 TX3_FIFO_SIZE = 0;

// Регистр GRSTCTL. Ждем, когда бит AHBIDL станет = 1
$USBFS.$GRSTCTL.waitForIdleStateReady();

// Регистр GRSTCTL. Запись бита CSRST, ожидание, когда станет = 0.
$USBFS.$GRSTCTL.setBits(USB::GRSTCTL::WBit::CSRST);
$USBFS.$GRSTCTL.waitFor(USB::GRSTCTL::WBit::CSRST);
// подождать минимум 3 такта

// Регистр GCCFG. Запись битов PWRDWN, VBUSASEN, VBUSBSEN, SOFOUTEN
$USBFS.$GCCFG.configure(USB::GCCFG::PWRDWN, USB::GCCFG::VBUSASEN, USB::GCCFG::VBUSBSEN, USB::GCCFG::SOFOUTEN); //USB::GCCFG::NOVBUSSENS , USB::GCCFG::SOFOUTEN
// после этого подождать 20 мс.

// Регистр GUSBCFG. Установить режим Device - бит FDMOD
$USBFS.$GUSBCFG.setBits<true>(USB::GUSBCFG::FDMOD);
// после этого подождать минимум 25 мс.

// Регистр PCGCCTL. Перезапуск Phy Clock - запись в регистр 0x00000000
$USBFS.$PCGCCTL.reset(); // можно не писать, все равно исходное значение = 0

// Регистр DCFG. Установка битов PFIVL = 80% of the frame interval
$USBFS.$DCFG.setFrameIntervalRatio(USBFS::DCFG::R80); // можно не писать, все равно исходное значение = 0

// Регистр DCFG. Установка битов DSPD = Full speed (USB 1.1 transceiver clock is 48 MHz)
$USBFS.$DCFG.setFullSpeed();

// Регистр GRXFSIZ. Установить размер буфера RX FIFO
$USBFS.$GRXFSIZ.setValue(RX_FIFO_SIZE);

// Конфигурация конечных точек, регистры DIEPTXFx: EP0, EP1, EP2, EP3 TX
$USBFS.$DIEPTXF0.configure(TX0_FIFO_SIZE, RX_FIFO_SIZE);
$USBFS.$DIEPTXF1.configure(TX1_FIFO_SIZE, TX0_FIFO_SIZE + RX_FIFO_SIZE);
$USBFS.$DIEPTXF2.configure(TX2_FIFO_SIZE, TX0_FIFO_SIZE + RX_FIFO_SIZE + TX1_FIFO_SIZE);
$USBFS.$DIEPTXF3.configure(TX3_FIFO_SIZE, TX0_FIFO_SIZE + RX_FIFO_SIZE + TX1_FIFO_SIZE + TX2_FIFO_SIZE);

// Регистр GRSTCTL. Установка битов TXFNUM = Flush all the transmit FIFOs in device or host mode.
$USBFS.$GRSTCTL.setNumber(USB::GRSTCTL::All);

// Регистр GRSTCTL. Запись битов CSRST, RXFFLSH. Ждем, когда они станут = 0
$USBFS.$GRSTCTL.setBits(USB::GRSTCTL::WBit::CSRST, USB::GRSTCTL::WBit::RXFFLSH);
$USBFS.$GRSTCTL.waitFor(USB::GRSTCTL::WBit::TXFFLSH, USB::GRSTCTL::WBit::RXFFLSH);
// подождать минимум 8 тактов

// Регистры DIEPMSK, DOEPMSK, DAINTMSK. Сброс флагов прерываний - запись значения 0x00000000
$USBFS.$DIEPMSK.reset(); // можно не писать, все равно исходное значение = 0
$USBFS.$DOEPMSK.reset(); // можно не писать, все равно исходное значение = 0
$USBFS.$DAINTMSK.reset(); // можно не писать, все равно исходное значение = 0

// Регистр GINTMSK. Отключить все прерывания - запись значения 0x00000000
$USBFS.$GINTMSK.reset(); // можно не писать

// Регистр GINTSTS. Очистить все ожидающие прерывания - запись значения 0xF030FC0A
$USBFS.$GINTSTS.clearAll();

// Регистр GINTMSK. Установка битов WUIM, USBSUSPM, IISOIXFRM, IPXFRM_IISOOXFRM, RXFLVLM, USBRST, ENUMDNEM, IEPINT, OEPINT, SOFM
$USBFS.$GINTMSK.setBits<true>(USBFS::GINTMSK::WUIM, USBFS::GINTMSK::USBSUSPM, USBFS::GINTMSK::IISOIXFRM, USBFS::GINTMSK::IPXFRM_IISOOXFRM,
                       USBFS::GINTMSK::RXFLVLM, USBFS::GINTMSK::USBRST, USBFS::GINTMSK::ENUMDNEM, USBFS::GINTMSK::IEPINT,
                       USBFS::GINTMSK::OEPINT, USBFS::GINTMSK::SOFM); // , USBFS::GINTMSK::OTGINT, USBFS::GINTMSK::SRQIM

// Регистр GAHBCFG. Установка бита GINTMSK
$USBFS.$GAHBCFG.configure(USB::GAHBCFG::GINTMSK);

// Далее конфигурация SCB, NVIC и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 25 июн 2018, 22:29 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
В общем попробовал свой код - плата вроде определяется в Windows как неизвестное устройство. Уже хорошо.
Однако возникло непонимание. В коде разрешено прерывание на RESET. Это прерывание, как я понимаю, должно возникнуть после подсоединения USB кабеля. Однако: бит USBRST в регистре GINTSTS уже установлен, даже до подключения кабеля! Это видно в отладчике Keil. Как так, что происходит?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 26 июн 2018, 01:30 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 814
ElecDron писал(а):
Код:
$USBFS.$GINTMSK.setBits<true>(USBFS::GINTMSK::WUIM, USBFS::GINTMSK::USBSUSPM, USBFS::GINTMSK::IISOIXFRM, USBFS::GINTMSK::IPXFRM_IISOOXFRM,
                       USBFS::GINTMSK::RXFLVLM, USBFS::GINTMSK::USBRST, USBFS::GINTMSK::ENUMDNEM, USBFS::GINTMSK::IEPINT,
                       USBFS::GINTMSK::OEPINT, USBFS::GINTMSK::SOFM);


А что это за $? Почему setBits принимает true, можно же сделать просто две функции без дополнительного параметра. А дальше идет куча перечислений? Разве не проще передать их как один параметр, перегрузив оператор '|', если они, конечно, строгие и вообще нужно что-то перегружать... Так, например:
Код:
template<typename E>
constexpr std::enable_if_t<std::is_enum_v<E>, E>
operator|(E lhs, E rhs)
{
   using T = std::underlying_type_t<E>;
   return static_cast<E>(static_cast<T>(lhs) | static_cast<T>(rhs));
}


Битовые поля - тоже плохая идея. Можно заинлайнить функцию принимающую десяток параметров и пакующих их в один регистр, при этом будет одно чтение из этого регистра и одна запись, но когда в volatile регистр пишут по несколько бит, то будет 10 чтений и 10 записей. Я в самом начале пытался для таймеров объявлять регистры как битовые поля, но очень быстро от этой идеи отказался...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 26 июн 2018, 01:49 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 729
Что-то вы много ненужных телодвижений совершаете. Надо отключиться от линии и по минимуму сконфигурить интерфейс и FIFO. Потом очистить статусы прерываний, подключиться к линии и разрешить прерывания. Лишних прерываний до RESET не включайте, не нужны они раньше времени.
Show Инициализация до RESET

После этого ждите себе спокойно RESET и в нём обнуляйте адрес, сбрасывайте FIFO, конфигурите конечные точки и уходите ждать Setup. Всё это надо делать в RESET, так как получить вы его можете в любой момент "под дых" и должны начать с чистого листа всё.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 26 июн 2018, 10:47 
Старожил

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 336
VladislavS, благодарю за код. Вечером посмотрю. Я же говорю - взял пример от ST для настройки USB. Начинается там всё с функции USBD_Init(). А дальше стал исследовать ее тело, что в нем вызывается. В итоге по крупицам собрал то, что записано выше - несомненно, там много лишнего.

Reflector, у меня нет битовых полей в контексте языка C++. Та функция, после включения оптимизации -O превратиться в это:
Код:
*reinterpret_cast<volatile uint32*>(USBFS_GINTMSK_ADDRESS) |=
                       USBFS::GINTMSK::WUIM | USBFS::GINTMSK::USBSUSPM | USBFS::GINTMSK::IISOIXFRM | USBFS::GINTMSK::IPXFRM_IISOOXFRM |
                       USBFS::GINTMSK::RXFLVLM | USBFS::GINTMSK::USBRST | USBFS::GINTMSK::ENUMDNEM | USBFS::GINTMSK::IEPINT |
                       USBFS::GINTMSK::OEPINT | USBFS::GINTMSK::SOFM;
Одна (или две) asm инструкции в итоге.
А знак доллара - это, ну как сказать. Имя класса и имя переменной не могут совпадать. В данном случае имя класса, который описывает регистр GINTMSK имеет название "GINTMSK". И переменная тоже имеет такое же имя. Вроде как наименование регистров в коде принято писать заглавными буквами (CR1, SR, MODER, SPEEDR, GINTMSK...). А доллар можно использовать как символ в имени переменной - тогда конфликт имен разрешится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 26 июн 2018, 11:16 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 729
Сколько же времени надо чтобы всё это описать и нигде не ошибиться?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407 и USB
СообщениеДобавлено: 26 июн 2018, 11:45 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2748
Когда разбирался с USB-HID на F103, постепенно влезая всё глубже в дебри как самого интерфейса так и его аппаратной реализации на STM, понял, что иногда не стоит так глубоко копать. Я привык всегда детально разбираться что и как крутится, но тут сдался. Спецификация USB громадна, и это был только один класс - HID. Наверняка есть спецы, которые детально понимают работу USB, но кажущаяся простота Plug&Play для конечного пользователя дается непростой ценой для разработчика. К слову, либа от ST вполне сносно работала, без багов, на F4 также запускал HID. Возможно там не супер быстродействие, но нам хватало. Был свой бутлоадер, который обновлял прошивку через HID-интерфейс, скорость невысока, зато работало без драйверов.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 80 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB