Jump to content
Sign in to follow this  
Gelay

Usb Host Hid Для Stm32F4

Recommended Posts

Задача: поднять USB Host на STM32F4Discovery и подключить к нему мышь, затем клавиатуру

Большая просьба, если у кого-нибудь есть рабочие примеры по USB Host HID, поделитесь пожалуйста sm.gif

Опыта у меня в микроконтроллерах совсем не много, в STM еще меньше.

Что было мною сделано:

Запускал из Keil 4.73

Ковырялся в примере USB_Host_Examples/HID из библиотеки STM32_USB-Host-Device_Lib_V2.1.0 - ничего не вышло, моя плата виснет, а деббагер на следующей же команде после функции USBH_Init(.....); вылетает с ошибкой "Cannot access target". Возможно это из-за LCD которого в моей плате нет, но чтобы вычленить его из примера моего уровня не хватает. [было весело, когда я случайно прикоснулся к полоске выводов платки и включил питание USB хоста, туда оказывается кнопка была выведена]

Затем я взял STM32CubeMX и сгенерил код для своего STM32F4Discovery. Проект оказался более понятым, логичным, а код читабельным, но при этом менее качественным, как мне показалось, но все равно ничего не заработало. Понять почему пока не смог, были проблемы с отладкой. Почему то device.is_connected всегда FALSE, а phost->gState всегда HOST_IDLE

Кто знает, подскажите пожалуйста, как поднять этот хост на STM32F4Discovery?

Share this post


Link to post
Share on other sites

Чисто любопытно, допустим подключили девайсы, а что с ними дальше делать будешь, если даже с дебагом не хватает опыта/уровня понять, почему не инициализируется, или убрать кусок кода для отсутствующих модулей? :)

Share this post


Link to post
Share on other sites

С деббагом у меня тоже были проблемы пока добрые люди не подсказали оптимизацию отключить :) Что делать? - сидеть в соответствующих функциях и обрабатывать приходящие данные. А если ты генерил проект в STM32CubeMX то должен знать, что там эти места(где надо сидеть) найти очень просто, они подписаны:

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

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

И да, переработать код(вычленить из него кусочки) намного сложнее, чем просто посмотреть как он работает. Если не согласен - глянь код примера USB_Host_Examples/HID из библиотеки STM32_USB-Host-Device_Lib_V2.1.0. Если все еще не согласен - вычлени из него все, что касается LCD, чтобы пример остался работоспособным - буду очень признателен :)

Тролить новичков - занятие, конечно, веселое, но как-то не очень.... Тем более модератору...

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

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

Подробнее

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

Если не хотите или можете очищать её от всякого хлама типа дисплея какой-то там ST-шной платы, можете взять библиотеку немца -

http://mikrocontroller.bplaced.net/wordpress/?page_id=1333

Полный его набор - http://mikrocontroller.bplaced.net/wordpress/?page_id=744 Там вроде и мышь с клавиатурой есть, но я их не проверял, не знаю.

USB мышь я сам делал. Но исходники где-то затерялись, а переделывать ещё раз неохота, да и не нужно.

Лазить там отладчиком можно только если хорошо понимаете функционирование хоста вообще, вне зависимости от конкретного проца. Да и STM-овская реализация USB не из простых. У атмела, например, гораздо проще. Так говорят. Я лично подтвердить/опровергнуть не могу.

Я Вам сделать это не смогу, извините. В Донецке идёт война, я и сам сижу на чемоданах ...

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

Полный его набор - http://mikrocontroll...ss/?page_id=744 Там вроде и мышь с клавиатурой есть, но я их не проверял, не знаю.

Спасибо. Как Вы говорили, я нашел там USB HOST HID, скачал-собрал-залил и сразу работает! :) Пример у него намного проще и читабельнее официальных. Оказалось, что большая часть моих мышек не поддерживаются. Клава - через раз. Как ни странно нормально определяются только геймерские мыши A4Tech (на одной из них написано Full Speed). Пока данные нормально не приходят, но буду разбираться.

А так, безумно рад, что оно все таки заработало, хоть и криво :)

аааааа спасибо, спасибо, спасибо, аааааааа :thank_you2::dance2: :dance2: :dance2:

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By German Churilin
      Добрый день всем! Столкнулся с проблемой, над решением которой бьюсь уже месяц - суть в том, что при пересылке аудио данных с контроллера в внешний цап на выходе цапа звучит белый шум(именно когда летят данные). Уже перепробовал разные конфигурации и параметры, да даже другой цап ставил - всё равно та же самая проблема. Может кто сталкивался, или у кого есть идеи почему так происходит?
      Контроллер stm32f407ve китайский, но вроде как рабочий, цап - pcm1606, вытащенный из двд-плеера.

      код инициализации i2s
      RCC_PLLI2SCmd(DISABLE); RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S); RCC_PLLI2SConfig(200,5); RCC_PLLI2SCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY) == RESET){}; //WS - word clock output GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_SPI2); GPIO_StructInit(&gpioInit); gpioInit.GPIO_Pin = GPIO_Pin_9; gpioInit.GPIO_Mode = GPIO_Mode_AF; gpioInit.GPIO_OType = GPIO_OType_PP; gpioInit.GPIO_PuPd = GPIO_PuPd_NOPULL; gpioInit.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOB, &gpioInit); //BCLK - shift clock output GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOB, &gpioInit); //SD - serial audio data GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOC, &gpioInit); //MCO - master clock output GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_SPI2); gpioInit.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOC, &gpioInit); I2S_StructInit(&i2sInit); i2sInit.I2S_CPOL = I2S_CPOL_Low; i2sInit.I2S_Mode = I2S_Mode_MasterTx; i2sInit.I2S_MCLKOutput = I2S_MCLKOutput_Enable; i2sInit.I2S_Standard = I2S_Standard_Phillips; i2sInit.I2S_AudioFreq = I2S_AudioFreq_48k; i2sInit.I2S_DataFormat = I2S_DataFormat_24b; I2S_Init(SPI2, &i2sInit); SPI2->I2SPR = (uint16_t)((uint16_t)512 | (uint16_t)12 | (uint16_t)1); //for 48k Fs SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE); I2S_Cmd(SPI2, ENABLE);  
      код инициализации dma
      DMA_InitTypeDef dmaInit; NVIC_InitTypeDef nvicInit; DMA_DeInit(DMA1_Stream4); DMA_Cmd(DMA1_Stream4, DISABLE); while(DMA_GetCmdStatus(DMA1_Stream4) == ENABLE){}; __ISB(); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); //To dmaInit.DMA_PeripheralBaseAddr = (uint32_t) &(SPI2->DR); //From dmaInit.DMA_Memory0BaseAddr = (uint32_t)&AUDIO_SAMPLE; dmaInit.DMA_BufferSize = 20480; dmaInit.DMA_Channel = DMA_Channel_0; dmaInit.DMA_DIR = DMA_DIR_MemoryToPeripheral; dmaInit.DMA_PeripheralInc = DMA_PeripheralInc_Disable; dmaInit.DMA_MemoryInc = DMA_MemoryInc_Enable; dmaInit.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; dmaInit.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; dmaInit.DMA_Mode = DMA_Mode_Circular; dmaInit.DMA_Priority = DMA_Priority_High; dmaInit.DMA_FIFOMode = DMA_FIFOMode_Enable; dmaInit.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; dmaInit.DMA_MemoryBurst = DMA_MemoryBurst_Single; dmaInit.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; while(DMA_GetCmdStatus(DMA1_Stream4) == ENABLE); DMA_Init(DMA1_Stream4, &dmaInit); DMA_ITConfig(DMA1_Stream4, DMA_IT_TC | DMA_IT_HT, ENABLE); //configure interrupt nvicInit.NVIC_IRQChannel = DMA1_Stream4_IRQn; nvicInit.NVIC_IRQChannelPreemptionPriority = 0; nvicInit.NVIC_IRQChannelSubPriority = 0; nvicInit.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvicInit); DMA_Cmd(DMA1_Stream4, ENABLE); while(DMA_GetCmdStatus(DMA1_Stream4) != ENABLE){}; AUDIO_SAMPLE просто wav скопированный через hex редактор и живущий в памяти контроллера, крутиться по кругу. Вроде как, в теории всё должно работать(снизу скрин из pulseview - снято логическим анализатором), к сожалению осциллограф пока что не приобрёл, так что проверить правильность частот не представляется возможнымб но всё же всё вроде как красиво.
      Формат i2s на контроллере совпадает с форматом на цапе - первый бит передаётся через 1 тик sck после смены ws
       
      П.С. подозреваю сразу вопросы про MSB/LSB - wav файл сам по себе little-endian, собственно как и контроллер, то есть тут не должно быть проблем, а i2s стандарт передаёт MSB первым, соответственно если у меня в памяти записано 0x64, 0x61, 0x61, 0x66, 0x02, 0x00, 0x85... то, судя по скрину всё передаётся правильно? или я что то не понимаю в этом всём? Но не в этом суть - в один момент тоже подумал что порядок не тот, но, к сожалению, попытки свапать байты местами(и побайтово, и по словам) не дали ни какого результата

    • By rmatveev
      Вливаюсь в среду программирования MBED OS с платой STM32F429I-DISC1 и вот что заметил:
      1) Почему-то PWM у меня нормально заработал только на ножке PF_6. Я перебрал, конечно, не все порты, которые поддерживают работу с PWM, но другие, которые я попробовал, не заработали.
      2) Пытался сконфигурировать некоторые порты в качестве цифрового выходи и тоже фигушки. Нормально заработали только те, что подключены к зеленому и красному светодиодам (PG_13 и PG_14). На некоторых ножках был какой-то неведомый мне меандр, какие-то не захотели переходить в низкоомное состояние.

      В качестве базы я использовал код DISCO-F429ZI_LCDTS_demo (это из примеров по этой плате с работой ЖК индикатора и тачскрина).

      Что может быть не так? Может быть какие-нибудь библиотеки, подключаемые при работе тачскрина и/или дисплея занимают большую часть портов и не позволяют их использовать по усмотрению программиста? Или я еще что-то не понимаю в архитектуре ARM? (Сам я прихожу из AVR-ов)
    • Guest Александр
      By Guest Александр
      Добрый день
      Проблема с оценочной платой STM32F4-DISCOVERY в части работы USART
      суть вопроса
      по USART шлется и принимается блоки данных по 3 байта (в принципе сколько угодно) при этом если подключен USB разъем ST-LINKа то все работает должным образом (данные снуют туда сюда без проблем), но при отключении USB ST-LINKа данные из платы STM32F4-DISCOVERY идут а вот принимать данные плата отказывается (естественно подаю внешнее питание +5 вольт на одноименный контакт). Если кто сталкивался с подобной проблемой прошу хотя бы направить в сторону железа или софта.
      На плате STM32F4-DISCOVERY убраны перемычки SB11(T_NRST) и SB12(T_SWO) а так же отпаян резистор R68 (MCO). Плата при этом прошивается без проблем, и стартует при внешнем питании(не от USB ST-LINKа) тоже без каких то заморочек.
      код прикладывать на данный момент не вижу смысла там все просто, при чем при подключении USB ST-LINKа программа работает.
      Проект пишется на IARe, конфигурация формируется в STM32Cube.
      Заранее спасибо за ответ
    • By Wishmaster
      Здравствуйте, подскажите, как можно получить 3.3В для питания МК STM32F4 от Li-Ion аккумулятора? Использовать какой-нибудь понижающий преобразователь? Если да, то какой? 
    • By dron-r
      Добрый вечер.
      Друзья, кто из вас использует МК STM32F407xxx, поделитесь информацией по поводу внешнего кварца на вашей плате. Что за кварц, фирма, а также используемые конденсаторы и Rext?
      Дело в том, что облажался я с выбором кварца. Не заводится он. Drive level превосходит указанный в инструкции к кристаллу... (расчеты проводились согласно заметки AN2867 от ST).
      В общем чтобы не мучится с поиском нужного кристалла, хочу поинтересоваться что у вас?
      Заранее спасибо.
      Моя конфигурация:
      Кристалл Geyer KX-K (part no. 12.87823) 8МГц.
      Конденсаторы 22пФ
      Резистор Rext = 0 Ом
      Расположение кристалла идентично расположению на плате Discovery. Расстояние от края до ножек - примерно 6 мм.
      Также интересует напряжение RMS между выводами кварца.
      У меня - 1.94В
      У Discovery - 1.65В
      А у вас?
  • Сообщения

    • Мне очень запала эта схемка,кто бы ее правильно на кварц.стабилизацию качнул!?Хотя жалоб о стабильности от меня.Просто хотелось бы увести его из этого диапазона.  представляю мощного жука #1²  и #1³ Т1 КТ3130Б; Т2 Bfr93; Т3 Bfr93. Т1 КТ3107Л; Т2 КТ368; КТ913Б.     Для антенн буду использовать посеребренный провод. .ля,как же я доволен вашей схемкой!
    • Вопрос следовало задать в теме защиты акустики, так так собственно к усилителю она имеет опосредованное отношение. По вопросу, я делаю так       
    • Здарова друзья!Ну что пробовал я собирать как и обещал,эту схему!Так как на схемке. Работает жучек,но мощность сильно падает,до 150метров,катушку на выходе делал так :L3 3+3витка(2катушки)спаивал в одну катушку,получался центральный выход на коллектор s9018,и катушечка L4 на 2виточка, от которой идет уже конкретно антенна,своими двумя витками помещалась посредине L3,3миллиметровый латунный сердечник плотно проходил внутри,и это не добавляло особо мощности,только взлетала частота до 145мГц что немножко упрощало его поиск и все. Потому я от этого каскада отказался.Просто перед антенной поставил конденсатор от 10--22pf!
    • То есть цифровой вольтметр определяет направление тока и по этому принципу ставит знак? И высчитывает разность потенциалов этого минуса?
    • Еще раз напишу, что стрелочки указывают направление тока. Если батарейку (любую) перевернуть, тока не будет, светодиод светится не будет. Ионы не перейдут через запрещённую зону PN-перехода диода  при "не той" полярности. Считай, что в мультиметре знак "минус" подсвечивает тот светодиод, который правый. Переворачиваешь правую батарейку, и мультиметр твой покажет напряжение без знака "минус".
    • @Slavka Всё именно так, как вы сказали. Но и с vg155 согласен, что вызванивать каждый контакт без конкретной схемы, а только аналогов. Нет гарантий что найду все контакты или не допущу ошибки. По этому и посмотрел барахолку и нашёл экземпляр с более простой проблемой. А так вот мой парк (маленьких DT182 даже 2шт)  
    • Прошу объясните. Вот если чёрный щуп мультиметра ставлю между двумя батарейками, а красный ставлю на плюс или минус, то почему мультиметр показывает знак минус в случае если ставлю на минус красный щуп? Как мультиметр определяет где минус, где плюс?
  • Покупай!

×
×
  • Create New...