#ifndef __UART_H__
#define __UART_H__
#include"stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"
//1.初始化串口
void hal_uart_init();
//2.发送一个字符
void put_char(const char ch);
//3.发送一个字符串
void put_string(const char* string);
//4.接收一个字符
char get_char();
//5.接收一个字符串
char* get_string();
#endif
#include "uart.h"
//1.初始化串口
void hal_uart_init()
{
/*********RCC初始化**********/
//1.使能GPIOB[6]=1
RCC->MP_AHB4ENSETR|=(0X1<<1);
//2.使能GPIOG[1]=1
RCC->MP_AHB4ENSETR|=(0X1<<6);
//3.使能UART[16]=1
RCC->MP_APB1ENSETR|=(0x1<<16);
/*********GPIO初始化*********/
//1.设置PB2[5:4]=10,PG11[23:22]=10,复用
GPIOB->MODER|=(0X1<<5);
GPIOB->MODER&=(~(0X1<<4));
GPIOG->MODER|=(0X1<<23);
GPIOG->MODER&=(~(0X1<<22));
//2.设置PB2[11:8]=1000,AFRL;
//PG11[15:12]=0110,AFRH
GPIOB->AFRL&=(~(0X1111<<8));
GPIOB->AFRL|=(0X1<<11);
GPIOG->AFRH&=(~(0X1111<<12));
GPIOG->AFRH|=(0X11<<13);
/*********UART4初始化********/
//1.初始化串口USART_CR1
//1.1设置串口8位数据宽度[28][12]=00
//1.2设置串口16倍采样率[15]=0
//1.3设置串口无奇偶校准[10]=0
//1.4设置串口发送数据寄存器使能[3]=1
//1.5设置串口接收数据寄存器使能[2]=1
//1.6设置串口使能[0]=1
USART4->CR1&=(~(0X1<<28));
USART4->CR1&=(~(0X1<<12));
USART4->CR1&=(~(0X1<<15));
USART4->CR1&=(~(0X1<<10));
USART4->CR1&=(~(0X1<<0));
USART4->CR1|=(0X11<<2);
//2.初始化串口USART_CR2停止为[13:12]=00
USART4->CR2&=(~(0X11<<12));
//3.设置USART_BRR串口波特率115200
USART4->BRR=555;
//4.设置串口USART_PRESC分频[3:0]=0000
USART4->PRESC&=(~(0x1111));
}
//2.发送一个字符
void put_char(const char ch)
{
while(!(USART4->ISR&(0X1<<5)));
//清空发送寄存器数据端
USART4->TDR&=(~0x11111111);
USART4->TDR=ch;
while(!(USART4->ISR&(0x1<<6)));
}
//3.发送一个字符串
void put_string(const char* string)
{
//清空发送寄存器数据端
USART4->TDR&=(~0x11111111);
while(*string)
{
put_char(*string);
string++;
}
put_char('\n');
put_char('\r');
}
//4.接收一个字符
char get_char()
{
//判断收是否有数据
char ch=0;
while(!(USART4->ISR&(0X1<<5)));
ch=USART4->ISR;
return ch;
}
//5.接收一个字符串
char* get_string()
{
char ch[80]="";
int i;
for(i=0;i<100;i++)
{
ch[i]=get_char();
put_char(ch[i]);
if(ch[i]=='\r')
break;
}
ch[i]='\0';
put_char('\n');
return ch;
}
#include "uart.h"
extern void printf(const char *fmt, ...);
int main()
{
hal_uart_init();
while(1)
{
put_char(get_char()+1);
}
return 0;
}