Код
void UsartInit(void)
{
// enable USART2
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
// enable GPIOA
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
// configure GPIOA
// for TX
GPIOA->MODER |= GPIO_MODER_MODER2_1;
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2_1;
GPIOA->AFR[0] |= 0x00000700;
// for RX
GPIOA->MODER |= GPIO_MODER_MODER3_1;
GPIOA->AFR[0] |= 0x00007000;
// enable USART2 interrupts
NVIC->ISER[1] |= 0x00000040;
// configure usart
USART2->BRR = 0x000002f0; // 56000 baud
USART2->CR2 = USART_CR2_CLKEN;
USART2->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE
| USART_CR1_RXNEIE;
}
{
// enable USART2
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
// enable GPIOA
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
// configure GPIOA
// for TX
GPIOA->MODER |= GPIO_MODER_MODER2_1;
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2_1;
GPIOA->AFR[0] |= 0x00000700;
// for RX
GPIOA->MODER |= GPIO_MODER_MODER3_1;
GPIOA->AFR[0] |= 0x00007000;
// enable USART2 interrupts
NVIC->ISER[1] |= 0x00000040;
// configure usart
USART2->BRR = 0x000002f0; // 56000 baud
USART2->CR2 = USART_CR2_CLKEN;
USART2->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE
| USART_CR1_RXNEIE;
}
Результат следующий: проверял - при окончание передачи (TC) прерывание работает норм и байтики швырябтся в терминалку, эдакий спам... а вот когда с терменалки швыряю в проц, то ему пофиг, при этом я конечно отрубал прерывания по TC. Я грешу на то что както неправельно настраеваю сам порт RX... Подскажите плиз...
PS Всякие StdPeriph Driver не хочу использовать, так как на мой взгляд изучать контроллер нужно работая с регистрами напрямую, так больше граблей, а значит и пониманий...
