功能文件
#include"gpio.h"
//初始化
void uart()
{
//rcc章节
RCC->MP_AHB4ENSETR|=((0x1<<1));
RCC->MP_AHB4ENSETR|=((0x1<<6));
RCC->MP_APB1ENSETR|=((0x1<<16));
//gpio章节
//MODER寄存器
GPIOG->MODER&=(~(0x3<<22));
GPIOG->MODER|=(0x1<<23);
GPIOB->MODER&=(~(0x3<<4));
GPIOB->MODER|=(0x1<<5);
//AFRL和AFRH寄存器
GPIOG->AFRH&=(~(0xf<<12));
GPIOG->AFRH|=(0x3<<13);
GPIOB->AFRL&=(~(0xf<<8));
GPIOB->AFRL|=(0x1<<11);
//uart章节
//CR1寄存器
USART4->CR1&=(~(0x1<<12));
USART4->CR1&=(~(0x1<<28));
USART4->CR1&=(~(0x1<<15));
USART4->CR1&=(~(0x1<<10));
USART4->CR1|=(0x1<<3);
USART4->CR1|=(0x1<<2);
USART4->CR1|=(0x1);
//CR2寄存器
USART4->CR2&=(~(0x1<<12));
//BRR寄存器
USART4->BRR=0x22B;
//PRESC寄存器
USART4->PRESC&=(~(0x1));
}
//发送一个字符
void write_char(char str)
{
while(!(USART4->ISR&0x1<<7));
USART4->TDR=str;
while(!(USART4->ISR&0x1<<6));
}
//发送一个字符串
void write_str(const char *str)
{
while(*str!='\0')
{
write_char(*str);
str++;
}
}
//接受一个字符
char read_char()
{
while(!(USART4->ISR&0x1<<5));
char cha=0;
cha=USART4->RDR;
return cha;
}
//接受一个字符串
char buf[512]={0};
char *read_str1()
{
// int i=0;
// while((buf[i]=read_char())!='\r')
// i++;
// buf[i]='\0';
// buf[i+1]='\n';
//buf[0]=read_char();
int i=0;
while(1)
{
buf[i]=read_char();
if(buf[i] == '\r') break;
i++;
}
buf[i+1]='\n';
buf[i+2]='\0';
return buf;
}
头文件
#ifndef __GPIO_H__
#define __GPIO_H__
#include"stm32mp1xx_gpio.h"
#include"stm32mp1xx_rcc.h"
#include"stm32mp1xx_uart.h"
//初始化
void uart();
//发送一个字符
void write_char(char str);
//发送一个字符串
void write_str(const char *str);
//接受一个字符
char read_char();
//接受一个字符串
char *read_str1();
#endif
测试文件
#include "gpio.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
int i,j;
for(i = 0; i < ms;i++)
for (j = 0; j < 1800; j++);
}
int main()
{
//初始化
uart();
while(1)
{
write_str(read_str1());
}
return 0;
}