22071.10.24

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值