Создадим переменную где мы будем хранить принятый байт:
char byte = '\0';
Проинициализируем порт к которому подключен УСАПП
/* enable usart port*/
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
А также сам УСАПП1:
/* enable usart1 */
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
Зададим режим для линий порта - альтернативные функции:
/* setup usart1 pins to af mode */
GPIOB->MODER |= GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1;
Выберем тип периферии для альтернативных функций линий порта в/в:
/* select af block usart1..3(af7 function) to usart pins */
GPIOB->AFR[0] |= (GPIO_AF7_USART1_3 << GPIO_AFP6) | (GPIO_AF7_USART1_3 << GPIO_AFP7);
Настроим частоту приема/передачи и активизируем линиии приема/передачи, сам УСАПП:
/* usart1 setup baudrate */ /** 115200 baud 16MHz/16/115200 = 8.68 */
USART1->BRR = (8 << 4) + 5;
/* usart1 enable block and enable tx,rx lines */
USART1->CR1 |= USART_CR1_TE;
USART1->CR1 |= USART_CR1_RE;
USART1->CR1 |= USART_CR1_UE;
В бесконечном цикле происходит весь процесс:
/* infinity loop */
while (1) {
/* put intro char */
usart_sendb(USART1, '#');
Прием байта:
byte = usart_receiveb(USART1);
usart_sendb(USART1, '>');
Его передача:
usart_sendb(USART1, byte);
usart_sendb(USART1, '\r');
usart_sendb(USART1, '\n');
}