#include "uart4.h"
//初始化相关操作
void hal_uart4_init()
{
//**********RCC章节的初始化***********//
//1.使能GPIOB MP_AHB4ENSETR[1] =1
RCC->MP_AHB4ENSETR |= (0x1 << 1);
//2.使能GPIOG MP_AHB4ENSETR[6]=1
RCC->MP_AHB4ENSETR |= (0x1 << 6);
//3.使能UART4 MP_APB1ENSETR[16] =1
RCC->MP_APB1ENSETR |= (0x1 << 16);
//***********GPIO章节的初始化************//
//1.GPIOB_MODER设置为复用功能模式
//GPIOB->MODER[5:4]=10
GPIOB->MODER &= (~(0x3) << 4);
GPIOB->MODER |= (0x1 << 5);
//2.设置PB2引脚功能为UART4_RX
//GPIOB->AFRH[11:8]=1000
GPIOB->AFRH &= (~(0xf << 8));
GPIOB->AFRH |= (~(0x1 << 11));
//1.GPIOG_MODER设置为复用功能模式
//GPIOG->MODER[23:22]=10
GPIOG->MODER &= (~(0x3) << 4);
GPIOG->MODER |= (0x1 << 5);
//2.设置PF11引脚功能为UART4_TX
//GPIOG->AFRL[15:12]=0110
GPIOB->AFRH &= (~(0xf << 12));
GPIOB->AFRH |= (~(0x3 << 13));
//***********UART章节的初始化*************//
//1.设置串口 UE=0 USART4->CR1[0] = 0
USART4->CR1 &= (~(0x1));
//2.设置1位起始位,8位数据位: USART4->CR1[12]=0,[28]=0
USART4->CR1 &= (~(0x1 << 12));
USART4->CR1 &= (~(0x1 << 28));
//3.没有奇偶校验位: USART4->CR1[10]=0
USART4->CR1 &= (~(0x1 << 10));
//4.设置1位停止位: USART4->CR2[13:12]=00
USART4->CR2 &= (~(0x3 << 12));
//5.设置16倍采样率: USART4->CR1[15]=0
USART4->CR1 &= (~(0x1 <<15));
//6.设置串口不分频: USART4->PRESC[3:0]=0
USART4->CR1 &= (~(0xf));
//7.设置串口波特率为115200: USART4->BRR=0x22b
USART4->BRR = 0x22b;
//8.设置串口发送器使能: USART4->CR1[3]=1;
USART4->CR1 |= (0x1 << 3);
//9.设置串口接收器使能: USART4->CR1[2]=1;
USART4->CR1 |= (0x1 << 2);
//10.设置串口使能: UE=1 USART4->CR1[0]=1;
USART4->CR1 |= (0x1);
}
//发送一个字符
void hal_put_char(const char str)
{
while(!(USART4->ISR & (0x01 << 7)));
USART4->TDR =str;
while(!(USART4->ISR & (0x01 << 6)));
}
//发送一个字符串
void hal_put_string(const char* string)
{
}
//接收一个字符
char hal_get_char()
{
char str1;
while(!(USART4->ISR & (0x01 <<5)));
str1 = USART4->RDR;
return str1;
}
#ifndef __UART4_H__
#define __UART4_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"
//初始化相关操作
void hal_uart4_init();
//发送一个字符
void hal_put_char(const char str);
//发送一个字符串
void hal_put_string(const char* string);
//接收一个字符
char hal_get_char();
#endif
#include "uart4.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()
{
hal_uart4_init();
hal_put_char('\n');
hal_put_char('\r');
while(1)
{
hal_put_char(hal_get_char()+1);
}
return 0;
}