Всем привет. Я пилю небольшую программку под STM32 на плате STM32VLDiscovery и мне понадобилось выводить отладочные данные на PC через USART1. Проблема в том, что USART1 не работает. Совсем(.
Я использую стандартную библиотеку периферии от ST для STM32. USART1 инициализирую следующим кодом:
Код
void debug_init() {
GPIO_InitTypeDef GPIO_RxTx_InitStruct;
USART_InitTypeDef USART_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
GPIO_RxTx_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_RxTx_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_RxTx_InitStruct.GPIO_Pin = GPIO_Pin_9; /* PA9 = TX */
GPIO_Init(GPIOA, &GPIO_RxTx_InitStruct);
GPIO_RxTx_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_RxTx_InitStruct.GPIO_Pin = GPIO_Pin_10; /* PA10 = RX */
GPIO_Init(GPIOA, &GPIO_RxTx_InitStruct);
USART_DeInit(USART1);
USART_StructInit(&USART_InitStruct);
USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_Mode = USART_HardwareFlowControl_None;
USART_InitStruct.USART_HardwareFlowControl = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStruct);
USART_Cmd(USART1, ENABLE);
}
Передача данных (в моем случае я передаю один и тот же символ) производится следующим кодом:
Код
void debug_putchar(char ch) {
while (!USART_GetFlagStatus(USART1, USART_FLAG_TC)) {}
USART_SendData(USART1, (uint16_t) ch);
}
В функции main эти две функции используются так:
Код
debug_init();
while (1) {
debug_putchar('h');
}
Вот и весь код...
C платы не выводится ни один символ. Смотрел напряжение на выводе TX — стрелка всегда на нуле. Контакт между выводами PA9, PA10 и выводами преобразователя UART<->COM есть — проверял.
Перелопатил выдачу гугла — у всех такой же код и у всех он работает. У меня же — почему-то тишина в последовательном канале.
Возможно, у меня к вечеру уже замылился глаз. Почему эта штука не работает и что делать?