Работаю в W7 и IDE ST Visual Develop (COSMIC).
Если зашиваю прошивку в Debug режиме, и нажимаю кнопку Start, то все нормально пускается и при выходе из этого режима, тоже замечательно работает. При прошивке из под ST Visual Develop или ST Visual Programmer, прошивка не стартует, если выдернуть отладчик из платы и передернуть питание платы. Стартует только в том случае, если не отключая отладчик от платы, вынуть USB шнур отладчика из порта компьютера, при подключенном отладчике к плате.
Пробовал Rlink и Stlink. Может, кто уже решал подобную проблему, у меня поиском найти не получилось.
Ну и сразу спрошу заодно, может, ткнет кто меня носом в обсуждение этого вопроса. Меня интересует правильная работа с сигналом отключения передатчика после окончания передачи, при использование half duplex работы RS485 (двухпроводная линия). Как я понял у этого микроконтроллера на любое прерывание (по передатчику) по UART осуществляется переход по одному и тому же вектору. Вот сделал такое решение, в принципе заработало, но как то коряво со стороны смотрится.
CODE
#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;
}
}
}