Angel71 писал(а):просто резистором обороты убавить. не исключено, что даже небольшого потока воздуха будет достаточно для охлаждения.
Сделано еще проще - перекинул питание вентилятора на линию +5В. Он еле шевелится, конечно, но БП реально холодный.
Теперь другая проблема - UART на STM32F0-Discovery упорно теряет данные.
Если отправляю через Putty, то все ОК, если в винде
- Код: Выделить всё • Развернуть
copy /b a.txt \\.\com22
или в линуксе
- Код: Выделить всё • Развернуть
cat a.txt > /dev/ttyUSB0
То теряется примерно треть байтов. Причем и на 9600, и на 230400.
Прерываний по overrun не получаю, флагов ошибок нет.
Код такой:
- Код: Выделить всё • Развернуть
void UART_Config(void)
{
USART_InitTypeDef usartInit;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
usartInit.USART_BaudRate = 9600;
usartInit.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
usartInit.USART_Mode = USART_Mode_Rx;
usartInit.USART_Parity = USART_Parity_No;
usartInit.USART_StopBits = USART_StopBits_1;
usartInit.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1, &usartInit);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_ORE, ENABLE);
USART_ITConfig(USART1, USART_IT_NE, ENABLE);
USART_ITConfig(USART1, USART_IT_FE, ENABLE);
USART_ITConfig(USART1, USART_IT_ERR, ENABLE);
USART_AutoBaudRateCmd(USART1, DISABLE);
USART_OverrunDetectionConfig(USART1,ENABLE);
USART_Cmd(USART1, ENABLE);
}
void USART1_IRQHandler()
{
if(USART1->ISR & (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE)) {
USART_ClearFlag(USART1, USART_FLAG_RXNE | USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE);
resetPointers();
return;
}
uint32_t c;
while(USART1->ISR & USART_FLAG_RXNE)
{
c = USART1->RDR;
framePointer++;
}
return;
}
Есть идеи, как это вылечить?