Код
/////////////////настройка порта ///////////////////
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
//No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4)
AFIO->MAPR &=~ AFIO_MAPR_USART2_REMAP;
//UART TX //выход
GPIOA->CRL &=~ GPIO_CRL_CNF3;
GPIOA->CRL |= GPIO_CRL_CNF3_1;
GPIOA->CRL |= GPIO_CRL_MODE3;
//UART RX //вход
GPIOA->CRL &=~ GPIO_CRL_CNF2;
GPIOA->CRL |= GPIO_CRL_CNF2_0;
GPIOA->CRL &=~ GPIO_CRL_MODE2;
/////////////////настройка USART //////////////////
RCC->APB1ENR|=RCC_APB1ENR_USART2EN;
RCC->APB1RSTR|=RCC_APB1RSTR_USART2RST;
RCC->APB1RSTR &=~ RCC_APB1RSTR_USART2RST;
//для получения бодрейта 9600 при частоте 36МГц делитель = 234.375 => 0.375 * 16 = 6
USART2->BRR=(134<<4)|(6<<0);
USART2->CR1 |=USART_CR1_TE; //передача включена
USART2->CR1 |=USART_CR1_RE; //приём включен
USART2->CR1|=USART_CR1_UE; //включили USART
////////////////передаём байт ////////////////////
while(1)
{
while(!(USART2->SR & USART_SR_TXE)){}
USART2->DR=123;
while(!(USART2->SR & USART_SR_TC)){}
}
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
//No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4)
AFIO->MAPR &=~ AFIO_MAPR_USART2_REMAP;
//UART TX //выход
GPIOA->CRL &=~ GPIO_CRL_CNF3;
GPIOA->CRL |= GPIO_CRL_CNF3_1;
GPIOA->CRL |= GPIO_CRL_MODE3;
//UART RX //вход
GPIOA->CRL &=~ GPIO_CRL_CNF2;
GPIOA->CRL |= GPIO_CRL_CNF2_0;
GPIOA->CRL &=~ GPIO_CRL_MODE2;
/////////////////настройка USART //////////////////
RCC->APB1ENR|=RCC_APB1ENR_USART2EN;
RCC->APB1RSTR|=RCC_APB1RSTR_USART2RST;
RCC->APB1RSTR &=~ RCC_APB1RSTR_USART2RST;
//для получения бодрейта 9600 при частоте 36МГц делитель = 234.375 => 0.375 * 16 = 6
USART2->BRR=(134<<4)|(6<<0);
USART2->CR1 |=USART_CR1_TE; //передача включена
USART2->CR1 |=USART_CR1_RE; //приём включен
USART2->CR1|=USART_CR1_UE; //включили USART
////////////////передаём байт ////////////////////
while(1)
{
while(!(USART2->SR & USART_SR_TXE)){}
USART2->DR=123;
while(!(USART2->SR & USART_SR_TC)){}
}