1kvi1 0 23 сентября, 2011 Опубликовано 23 сентября, 2011 · Жалоба Всем доброго времени суток! Проковырялся уже два дня - не удается инициализировать последовательный порт USART1 в stm32l152cbt6. GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE); RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB,DISABLE); // Èíèöèàëèçèðóåì ïîñëåäîâàòåëüíûé ïîðò. /* Enable UART clock */ RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1,DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_USART1,ENABLE); USART_DeInit(USART1); // GPIO_PinAFConfig(GPIOA, GPIO_Pin_8, GPIO_AF_USART1); /* Connect PXx to USARTx_Tx */ GPIO_PinAFConfig(GPIOA, GPIO_Pin_9, GPIO_AF_USART1); /* Connect PXx to USARTx_Rx */ GPIO_PinAFConfig(GPIOA, GPIO_Pin_10, GPIO_AF_USART1); /* Connect PXx to USARTx_Rx */ // GPIO_PinAFConfig(GPIOA, GPIO_Pin_11, GPIO_AF_USART1); /* Connect PXx to USARTx_Rx */ // GPIO_PinAFConfig(GPIOA, GPIO_Pin_12, GPIO_AF_USART1); VD3G_ON; /* Configure USART Tx as alternate function push-pull */ /* Configure USART Rx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); // GPIO_SetBits(GPIOA,GPIO_Pin_9|GPIO_Pin_10); VD3G_OFF; // Èíèöèàëèçèðóåì ïåðåäåñêðèòèçàöèþ 8õ. USART_OverSampling8Cmd(USART1,ENABLE); // Èíèöèàëèçàöèÿ îäèíî÷íîãî òåñòèðîâàíèÿ ëèíèè ïðèåìíèêà. USART_OneBitMethodCmd(USART1,ENABLE); USART_ReceiverWakeUpCmd(USART1,DISABLE); USART_InitStructure.USART_BaudRate = baudrate; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* USART configuration */ USART_Init(USART1, &USART_InitStructure); /* Enable USART */ USART_Cmd(USART1, ENABLE); /* Enable the USART Receive interrupt */ USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); /* Enable USART Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); Здесь уже добавил все что только можно, но не работает. Симптомы следующие - после вызова PinAFConfig начинает нарастать напряжение на выводах rx tx в течение примерно 10-20мкс. Далее напряжение падает в ноль и все. Постоянно ноль на обоих выводах. Судя по ходу программы - порт работает и куда то передает байты, так как прерывания выполняются и видимость работы есть. Устройство периодически ложится спать в режимах sleep и stop, но во время выполнения процедуры инициализации такого нет. Также используется усб - соседние линии совмещенные с RTS/CTS порта. Но для эксперимента все отключил и выполнил инициализацию сначала прошивки - не помогло. Порт рабочий - прошивка через него шьется, если выводы инициализировать на цифровой вход подтянутый к единице - логическая единица на обоих. То есть выводы снаружи ничем не нагружены. Заранее спасибо за подсказку! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться