work.c

Добавим фунцию получения символа, в которой мы будем осуществлять прием символа и запускать его обработку:

void get_char(void) {
    inter_menu(usart_receiveb(USART1));
    /* put intro char */
    usart_sendb(USART1, '#');
}

Также необходимо в коде функции work() активировать прерывания по приему байта для УСАПП №1:

    /* usart1 enable interupt if receive register not empty */
    USART1->CR1 |= USART_CR1_RXNEIE;

Не забудем включить прерывание для этого блока:

    /* enable interrupt */
    NVIC_EnableIRQ(USART1_IRQn);

И выведем приглашение, т.к. прерывание сработает после приема символа:

    /* put intro char */
    usart_sendb(USART1, '#');