SergeyB 0 5 января, 2011 Опубликовано 5 января, 2011 · Жалоба Есть проблема. Работаю в W7 и IDE ST Visual Develop (COSMIC). Если зашиваю прошивку в Debug режиме, и нажимаю кнопку Start, то все нормально пускается и при выходе из этого режима, тоже замечательно работает. При прошивке из под ST Visual Develop или ST Visual Programmer, прошивка не стартует, если выдернуть отладчик из платы и передернуть питание платы. Стартует только в том случае, если не отключая отладчик от платы, вынуть USB шнур отладчика из порта компьютера, при подключенном отладчике к плате. Пробовал Rlink и Stlink. Может, кто уже решал подобную проблему, у меня поиском найти не получилось. Ну и сразу спрошу заодно, может, ткнет кто меня носом в обсуждение этого вопроса. Меня интересует правильная работа с сигналом отключения передатчика после окончания передачи, при использование half duplex работы RS485 (двухпроводная линия). Как я понял у этого микроконтроллера на любое прерывание (по передатчику) по UART осуществляется переход по одному и тому же вектору. Вот сделал такое решение, в принципе заработало, но как то коряво со стороны смотрится. #ifdef _COSMIC_ @far @interrupt void UART2_TX_IRQHandler(void) #else /* _RAISONANCE_ */ void UART2_TX_IRQHandler(void) interrupt 20 #endif /* _COSMIC_ */ { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ if(!IsPktSend) { if(OutBuff2Ptr.rd == OutBuff2Ptr.wr) { UART2_ITConfig(UART2_IT_TXE, DISABLE); //UART2_GetITStatus(UART2_IT_TXE); //UART2_GetITStatus(UART2_IT_TC); /* Очистка флага "передача завершена" */ /* не нашел в библиотеке команду как его очищать */ UART2->SR = (u8)~(UART2_IT_TC); UART2_ITConfig(UART2_IT_TC, ENABLE); IsPktSend = 1; } else { UART2_SendData8(Uart2OutBuff[OutBuff2Ptr.rd++]); if(OutBuff2Ptr.rd >= sizeof(Uart2OutBuff)) OutBuff2Ptr.rd = 0; } } else { if(UART2_GetITStatus(UART2_IT_TC)) { TX_EN_OFF(); UART2_ITConfig(UART2_IT_TC, DISABLE); UART2->SR = (u8)~(UART2_IT_RXNE_OR); UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE); IsPktSend = 0; } } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IGK 0 5 января, 2011 Опубликовано 5 января, 2011 · Жалоба Ну и сразу спрошу заодно, может, ткнет кто меня носом в обсуждение этого вопроса. Меня интересует правильная работа с сигналом отключения передатчика после окончания передачи, при использование half duplex работы RS485 (двухпроводная линия). Как я понял у этого микроконтроллера на любое прерывание (по передатчику) по UART осуществляется переход по одному и тому же вектору. Вот сделал такое решение, в принципе заработало, но как то коряво со стороны смотрится. Зайдите по ссылке http://kazus.ru/forums/showthread.php?t=20861, там есть про УАРТ и довольно подробно. У меня под ИАРом проблем с запуском не было, шил и ST Visual Programmero'ом. Где-то видел обсуждение такой же проблемы, но не запомнил, где... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyB 0 25 июня, 2011 Опубликовано 25 июня, 2011 · Жалоба прочитал весь казус не нашел как решить проблему с программированием. Помогает только закрытие stvp, тогда проц запускается. Есть предположение, что это связано с рестартом контроллера по SWIM, программа после прошивки просто не ресетит контроллер в режиме отладки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZiB 0 27 июня, 2011 Опубликовано 27 июня, 2011 · Жалоба Используйте, для сброса дебагер (я использую эклипс, но это не важно, пропишите внешнюю тулзу): C:/Tools/STMicroelectronics/Toolset/stvd/gdb7.exe --quiet --command=mcu/stm8l151k6.ini сам ини файл define emulator-reset-port-mcu target gdi -dll swim\stm_swim.dll -stlink3 -port $arg0 -mcuname $arg1 mcuname -set $arg1 end emulator-reset-port-mcu usb://usb stm8l151k6 quit Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться