Untitled
unknown
plain_text
a year ago
3.1 kB
7
Indexable
#include "stm32f4xx.h"
#include "main.h"
void USART_init()
{
//PA2-USART2->Tx
//PA3-USART->Rx
//ENABLE CLOCK TO GPIOA i.e, AHB1
RCC->AHB1ENR |= (1<<0);
//ENABLE CLOCK TO USART2
RCC->APB1ENR |= (1<<17);
//Select the Alternate function Mode for PA2 (USART2_TxD) pin using the GPIO_MODER
//MODER2[5:4]=[1 0]
GPIOA->MODER |= (1<<5);
GPIOA->MODER &= ~(1<<4);
//Select Alternate function mode for PA3 i.e, using MODER
//Set [1 0] for consecutive bits MODER3[7:6]=[1 0]
GPIOA->MODER |= (1<<7);
GPIOA->MODER &= ~(1<<6);
//SELECT The peripheral function AF7 for PA2 (USART2_TxD) pin using GPIO AFRL registers.
//AF7-0111
//AFRL2[11:8]=[0 1 1 1]
GPIOA->AFR[0] |= (1<<8);
GPIOA->AFR[0] |=(1<<9);
GPIOA->AFR[0] |=(1<<10);
GPIOA->AFR[0] &= ~(1<<11);
//Select the peripheral function AF7 for PA3 using GPIO_AFRL
//AFRL3[15:12]=[0 1 1 1]
GPIOA->AFR[0] |= (1<<12);
GPIOA->AFR[0] |= (1<<13);
GPIOA->AFR[0] |= (1<<14);
GPIOA->AFR[0] &= ~(1<<15);
//Set the baud rate for USART2 using USART2_BRR register.
USART2->BRR=0x0680;
//Configure the CR1 (Control 1) register for oversampling rate, character size (8-bit or 9bit)
USART2->CR1 |= (1<<15);
//enabling receive (RE).
USART2->CR1 |= (1<<3);
USART2->CR1 |= (1<<2);
USART2->CR1 &= ~(1<<12);
//Configure the CR2 (Control 2) register for number of stop bit(s)
//USART->CR2 STOP[13:12]=[0 0] FOR 1 STOP BIT
USART2->CR2 &= ~(1<<13);
USART2->CR2 &= ~(1<<12);
//Configure the CR3 (Control 3) register for no hardware flow control
USART2->CR3 &= ~(1<<8);
//Enable USART2 after configuration complete.
USART2->CR1 |=(1<<13);
}
void USART_write(int x)
{
//Wait until the TXE (Transmit Empty) bit of the USART_SR register is set.
//while((USART2->SR) && (1<<5)==0);//Not the standard way
while(!(USART2->SR) && (1<<5));
//Read a byte from USART2_DR register that was transmitted.
USART2->DR=(x & 0xFF);
}
char USART_read()
{
//Wait until the RXNE (Receive Not Empty) bit of the USART_SR register is set.
while(!(USART2->SR&(1<<5)));
//Read a byte from USART2_DR register that was received.
return USART2->DR;
}
int main(void)
{
char c;
USART_init();
//Getting the Received Data
//char c=USART_read();
while (1)
{
//Reading the transmitted data
c=USART_read();
USART_write(c);
}
}
RCC->AHB4ENR |= (1<<0);
RCC->APB1LENR |= (1<<17);
//PA2-Tx
//PA3-Rx
GPIOA->MODER |=(1<<5);
GPIOA->MODER &=~(1<<4);
GPIOA->MODER |=(1<<7);
GPIOA->MODER &=~(1<<6);
//[11 10 9 8]=[0111]
GPIOA->AFR[0] |= (1<<8);
GPIOA->AFR[0] |= (1<<9);
GPIOA->AFR[0] |= (1<<10);
GPIOA->AFR[0] &= ~(1<<11);
//[15 14 13 12]=[0111]
GPIOA->AFR[0] |= (1<<12);
GPIOA->AFR[0] |= (1<<13);
GPIOA->AFR[0] |= (1<<14);
GPIOA->AFR[0] &= ~(1<<15);
//USART->BRR
//OVER8-0
//TE-1,RE-1
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */Editor is loading...
Leave a Comment