Цитата(A. Fig Lee @ Dec 30 2014, 06:19)

A должна по идее реагировать и с отключенным диском, мне кажется.
Нет, не должна, девайс уходит в Suspend.
Куда уходит управление, описано тут:
http://forum.easyelectronics.ru/viewtopic....542&start=0Коротко: в usb_istr.c есть переход в Suspend, если нет пакетов от хоста.
Решение:
main.cКод
__IO bool DevWasConfigured = false;
Set_System();
Set_USBClock();
USB_Interrupts_Config();
USB_Init();
while ( bDeviceState != CONFIGURED );
DevWasConfigured = true;
while ( 1 );
usb_istr.cextern __IO bool DevWasConfigured;
Код
#if (IMR_MSK & ISTR_SUSP)
if (wIstr & ISTR_SUSP & wInterrupt_Mask)
{
if ( DevWasConfigured ) NVIC_SystemReset(); // <<<<<< вот это добавляем
/* check if SUSPEND is possible */
if (fSuspendEnabled)
{
Suspend();
}
else
{
/* if not possible then resume after xx ms */
Resume(RESUME_LATER);
}
Т.е., если девайс был сконфигурирован, а потом отключился, то МК перезагружается.
В случае сбоев он тоже перезагружается, что, наверное, неплохой вариант.
З.Ы. Альтернативное "решение" менять fSuspendEnabled на false приведет к тому, что USB-кабель надо будет подключать ДО переключения в режим USB (мой девайс переводится в режим флешки по кнопке). А так можно и до, и после, что удобнее и не приводит к появлению неопознанных USB-устройств.
З.Ы.2. Теперь девайс уже не перезагружается по кнопке, но у меня на случай сбоев есть еще кнопка Reset
Сообщение отредактировал IanPo - Jan 1 2015, 09:49