Easyelectronics.ru

Электроника для всех
Текущее время: 22 сен 2018, 14:33

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

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


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

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 475
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
Сообщения: 382
Не знаю к кому вы обращаетесь, ибо автор с темы свалил. Надеюсь, пошёл спецификации грызть. А какая проблема с хостом? Reset, SetAdress, ReadDescriptors, SetConfig и забирай свой HID тёпленьким.

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


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

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


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

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


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

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

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


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

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 333
Друзья, подскажите.
Микроконтроллер 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
Сообщения: 641
ElecDron писал(а):
Вопрос: где они тут нашли бит txfifoundrn???

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


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

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

Я вижу RW
Show


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

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 333
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
Сообщения: 55
Откуда: Украина
Вот еще нашел:
Цитата:
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
Сообщения: 641
ElecDron писал(а):
Прошелся поиском по документу - нашел этот бит в регистре OTG_HS_DIEPMSK (страница 1447). Однако, как можно видеть, этот регистр используется в режиме High Speed. А в примере из предыдущего сообщения идет настройка режима Full Speed. Как такое может быть? Тут явно куда-то забралась ошибка... Прошу помочь разобраться.

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


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

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 333
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
Сообщения: 641
ElecDron писал(а):
Ваш диагоз? То что этот бит в конце концов физически есть у OTG_FS_DIEPMSK, и его можно безболезненно писать?

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


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

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


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

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

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


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

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

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


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

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


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

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 641
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
Сообщения: 382
Что-то вы много ненужных телодвижений совершаете. Надо отключиться от линии и по минимуму сконфигурить интерфейс и FIFO. Потом очистить статусы прерываний, подключиться к линии и разрешить прерывания. Лишних прерываний до RESET не включайте, не нужны они раньше времени.
Show Инициализация до RESET

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


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

Зарегистрирован: 11 фев 2016, 18:17
Сообщения: 333
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
Сообщения: 382
Сколько же времени надо чтобы всё это описать и нигде не ошибиться?


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

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


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

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


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

Сейчас этот форум просматривают: redixin2


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

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

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