Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM8L UART
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
-AZ-
Уважаемые специалисты, кому то удалось от HSI завести UART выше 2400, все перепробовал, на 9600 уже ошибки проскакивают, может что то упускаю?

CLK_CKDIVR=0x00; //делитель частоты 1
CLK_ICKCR_bit. HSION = 1;
CLK_PCKENR1_bit.PCKEN15 = 1; //Включаем тактирование модуля USART1

PC_DDR &= ~(1 << 2);//PC2 RX USART1 receive (вход)
PC_DDR &= ~(1 << 3); //PC3 TX USART1 transmit (выход)

USART1_BRR2 = 0x03; //скорость 9600bps
USART1_BRR1 = 0x68;

USART1_CR2_bit.REN=1; //прием
USART1_CR2_bit.TEN=1; //передача

USART1_CR2_RIEN=1; //Прерывание по приему
__enable_interrupt (); // Разрешаем прерывания.

while(!(USART1_SR_bit.TXE)); //Ожидаем освобождения буферного регистра TDR
USART1_DR='F'; // Отправляем символ "F".

while (1){} //беск. цикл

}

#pragma vector=USART_R_OR_vector
__interrupt void USART1_RXE(void)
{
USART1_DR=USART1_DR; //Отправляем тоже, что и приняли (эхо)
}
AHTOXA
У вас в комментарии написано, что TX выход, а в коде вы его настраиваете на вход.
-AZ-
Цитата(AHTOXA @ Oct 24 2015, 22:02) *
У вас в комментарии написано, что TX выход, а в коде вы его настраиваете на вход.

Да эти строчки
PC_DDR &= ~(1 << 2);//PC2 RX USART1 receive (вход)
PC_DDR &= ~(1 << 3); //PC3 TX USART1 transmit (выход)
можно вообще прибить, они не нужны, это я просто забыл, проблема не в этом...
AHTOXA
Надо настроить ногу TX на выход, вот так:
Код
PC_DDR |= (1 << 3);
PC_CR1 |= (1 << 3);  // push-pull
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.