Вот и у меня лыжи не едут в простейшей ситуации... Весь день бодаюсь с USART-ом. Начал с использования стандартной библиотеки, закончил ручной настройкой регистров. Результат один: на выводе USART_TX (PC5, STM8L DISCOVERY) всегда ноль и ничего не дрыгается

Причем в RM0031 указано:
USART_TX is the serial data output. When the transmitter is disabled, the output pin returns
to its I/O port configuration. When the transmitter is enabled and nothing is to be
transmitted, the pin is at high level...
Т.е. дополнительно настривать gpio соответствующих лап не нужно... Или нужно?
Отладчиком (после передачи) вижу, что статусный регистр:
USART1_SR=0xC0
Что означает
Data is transferred to the shift register
и
Transmission is complete
USART_BRR1=0x03
USART_BRR2=0x04
Верно
USART_CR2=0x08
Значит
Transmitter is enabled
CLK_PCKENR1=0x20 - USART1 тактируется...
Но на выходе всегда ноль.. Уже руками подтяжку прописывал - тогда всегда единица...
Код:
Код: Выделить всё
#include "stm8l15x.h"
void main(void)
{
uint32_t i=0x0fff;
//Тактирование ядра 2Мгц:
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_8);
//Разрешаем тактирование USART:
CLK->PCKENR1 |= CLK_PCKENR1_USART1;
//Задаем скорость передачи 38400 (при 2Мгц):
USART1->BRR2 = 0x04;
USART1->BRR1 = 0x03;
//Включаем передатчик:
USART1->CR1 = 0;
USART1->CR3 = 0;
USART1->CR4 = 0;
USART1->CR5 = 0;
USART1->CR2 = USART_CR2_TEN;
while (1)
{
USART1->DR = 0x38;
while(!(USART1->SR & USART_SR_TC));
//delay
while(i)i--;
i=0x0fff;
}
}
Где грабли?..
Любой, заслуживающий внимания, опыт приобретается себе в убыток...