Цитата(Peps @ Jun 1 2012, 15:26)

Ага! А вот теперь если на эту ножку выходит TxD UARTа попробуйте включить передатчик UART (обязательно включите ему и тактовую частоту) и вуаля! Порт опять в 1 (напряжение питания контроллера). Весь цимус в том, что если ножка работает как порт IO - то не вопрос - все конфигурируется как надо, а если на него выходит TxD - то уже обычный пуш-пул (или подтянут резистором).
А у себя на плате я на всякий случай предусмотрел преобразователь уровня на одном биполярнике. Эх, видимо сработали прадедушкины гены из Израиля

Я же написал проверял после инициализации порта.
Код
bool UartT::Open()
{
if(!OpenFlag)
{
TxCounter = TxRdIndex = 0;
TxStopped = 0;
TxComplete = 1;
RxRdIndex = 0;
USART_DeInit(UART);
{
USART_InitTypeDef UART_InitStructure;
UART_InitStructure.USART_BaudRate = UartLineCoding.dwDTERate;
UART_InitStructure.USART_WordLength = USART_WordLength_8b;
UART_InitStructure.USART_StopBits = USART_StopBits_1;
UART_InitStructure.USART_Parity = USART_Parity_No;
UART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
UART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(UART,&UART_InitStructure);
USART_ClearFlag(UART, USART_FLAG_CTS | USART_FLAG_LBD |
USART_FLAG_TC | USART_FLAG_RXNE );
}
{
DMA_InitTypeDef DMA_InitStruct;
DMA_DeInit(RxDMA_Channel);
DMA_InitStruct.DMA_PeripheralBaseAddr = (U32)&UART->DR;
DMA_InitStruct.DMA_MemoryBaseAddr = (U32)&RxBuffer[0];
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStruct.DMA_BufferSize = RX_BUFFER_SIZE;
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
DMA_InitStruct.DMA_Priority = DMA_Priority_Low;
DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
DMA_Init(RxDMA_Channel, &DMA_InitStruct);
DMA_Cmd(RxDMA_Channel, ENABLE);
DMA_DeInit(TxDMA_Channel);
DMA_InitStruct.DMA_PeripheralBaseAddr = (U32)&UART->DR;
DMA_InitStruct.DMA_MemoryBaseAddr = (U32)&TxTmpBuffer[0];
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStruct.DMA_BufferSize = 16;
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;
DMA_InitStruct.DMA_Priority = DMA_Priority_Low;
DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
DMA_Init(TxDMA_Channel, &DMA_InitStruct);
DMA_ITConfig(TxDMA_Channel, DMA_IT_TC, ENABLE);
OpenFlag = true;
}
// Enable UART
USART_DMACmd(UART, USART_DMAReq_Rx|USART_DMAReq_Tx, ENABLE);
USART_Cmd(UART, ENABLE);
}
return true;
}
bool GSM_UartT::Open()
{
UART = USART3;
TxDMA_Channel = DMA1_Channel2;
RxDMA_Channel = DMA1_Channel3;
if(OpenFlag)return true;
portENTER_CRITICAL();
Config(&GsmLineCoding);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
{
GPIO_InitTypeDef GPIO_InitStructure;
// Assign PC10 to UART4 (Tx)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// Assign PC11 to UART4 (Rx)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
// Init UART4
UartT::Open();
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
portEXIT_CRITICAL(); //ПРОВЕРЯЛ В ЭТОЙ ТОЧКЕ.
return true;
}