реклама на сайте
подробности

 
 
> STM32F476 USB CDC. Device. Как отследить отключение / подключение, Если Bit 29 DISCINT: Note: Only accessible in host mode.
Димон Безпарольн...
сообщение Sep 21 2016, 16:55
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Проблема возникает когда контроллер что - то выдает по CDC и тут вы отрубаете шнур. Все виснет колом и ресетится по IWDG(в моем случае).

Ковырял CDC HAL - функции HAL_PCD_ConnectCallback(hpcd); и HAL_PCD_DisconnectCallback(hpcd); не вызываются. Пробовал читать USBx->GINTSTS:

Код
    USB_OTG_GlobalTypeDef *USBx;
if (USBx->GINTSTS & 0x20000000U)
    {
            Dummy = 78;
    }
    
    if (USBx->GINTSTS & 0x40000000U)
    {
            Dummy = 87;
    }


Биты 30 ( SRQINT) и 29(DISCINT) стоят в нулях. Потом нарвался на это: Note: Only accessible in host mode. Т.е. нужный мне бит 29 работает только в host режиме. У меня - Device. Что делать? Может кто подскажет?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Димон Безпарольн...
сообщение Sep 27 2016, 19:27
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Отследил как мог, только это не помогло. Вываливается действительно в HardFault_IRQn. После трех циклов ожидания. Последняя выполняемая строчка while (hcdc->TxState != 0). После нее - HardFault. Что с этим делать - не знаю.

Код
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
  uint8_t result = USBD_OK;
  /* USER CODE BEGIN 7 */
  USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDevice_0->pClassData;

    uint32_t tickstart = TimerTick;
    while (hcdc->TxState != 0)
    {            
        if ((TimerTick - tickstart) > 1000)    //100мс
            {                //
                return 1;    //
            }                //
    }
  USBD_CDC_SetTxBuffer(hUsbDevice_0, Buf, Len);
  USBD_CDC_TransmitPacket(hUsbDevice_0);
  /* USER CODE END 7 */
  return result;
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Димон Безпарольный   STM32F476 USB CDC. Device. Как отследить отключение / подключение   Sep 21 2016, 16:55
- - Wasserati   Для начала можно попробовать понять что вообще про...   Sep 22 2016, 06:37
|- - Димон Безпарольный   Цитата(Wasserati @ Sep 22 2016, 09:37) Дл...   Sep 22 2016, 07:56
|- - klen   я проверяю вот такой флаг OTG_FS_GOTGCTL & OTG...   Sep 22 2016, 14:44
|- - Димон Безпарольный   Цитата(klen @ Sep 22 2016, 17:44) я прове...   Sep 22 2016, 15:59
- - pvo125   А почему такое значение в регистре OTG_GOTGCTL ?. ...   Sep 23 2016, 05:06
|- - Timmy   Цитата(pvo125 @ Sep 23 2016, 08:06) А поч...   Sep 23 2016, 06:01
|- - Димон Безпарольный   Цитата(Timmy @ Sep 23 2016, 09:01) Там ес...   Sep 25 2016, 16:53
- - pvo125   Как понять недокументированы? Как раз 31-21 биты д...   Sep 23 2016, 06:24
|- - Timmy   Цитата(pvo125 @ Sep 23 2016, 09:24) Как п...   Sep 23 2016, 09:53
- - esaulenka   Так а где виснет-то?! Отключить ватчдог, смоде...   Sep 23 2016, 06:30
- - Димон Безпарольный   Нашел выход. Не очень хороший, но работает. Кодui...   Sep 28 2016, 07:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016