?uart4.c
#include "uart4.h"//UART4_RX ====> PB2
//UART4_TX ====> PG11char rebuf[51] = {0};
//rcc/gpio/uart4初始化
void hal_uart4_init()
{/********RCC章節初始化*******///1.使能GPIOB組控制器 MP_AHB4ENSETR[1] = 1RCC->MP_AHB4ENSETR |= (0x1 << 1);//2.使能GPIOG組控制器 MP_AHB4ENSETR[6] = 1RCC->MP_AHB4ENSETR |= (0x6 << 1);//3.使能UART4組控制器 MP_AHB4ENSETR[16] = 1 RCC->MP_AHB4ENSETR |= (0x1 << 16);/********GPIO章節初始化*******///1.將PB2和PG11設為復用功能模式GPIOB->MODER &= (~(0x3 << 4));//PB2GPIOB->MODER |= (0x2 << 4);GPIOG->MODER &= (~(0x3 << 22));//PG11GPIOG->MODER |= (0x2 << 22);//2.設置PB2和PG11引腳復用的功能GPIOB->AFRL &= (~(0xF << 8));//PB2GPIOB->AFRL |= (0x8 << 8);GPIOB->AFRH &= (~(0xF << 12));//PG11GPIOB->AFRH |= (0x6 << 12);/********UART章節初始化*******///1.設置初始化相關操作USART4->CR1 &= (~(0x1 << 12));USART4->CR1 &= (~(0x1 << 28));//設置8位數據位USART4->CR1 &= (~(0x1 << 15));//設置16倍采樣率USART4->CR1 &= (~(0x1 << 10));//設置無校驗位USART4->CR1 |= (0x1 << 3);//設置無發送位使能USART4->CR1 |= (0x1 << 2);//設置接收位使能USART4->CR1 |= 0x1;//設置串口使能//2.設置停止位USART4->CR2 &= (~(0x3 << 12));//設置串口位停止位//3.設置串口分頻USART4->PRESC &= (~(0xF));//4.設置串口波特率USART4->BRR |= 0x22B;}//發送一個字符
void hal_put_char(const char str)
{//判斷發送寄存器是否為空while(!(USART4->ISR) & (0x1 << 7)){USART4->TDR = str;}//判斷是否發送完畢while(!(USART4->ISR) & (0x1 << 6)){return; }}//發送一個字符串
void hal_put_string(const char* string)
{while(*string){hal_put_char(*string++);}hal_put_char('\n');hal_put_char('\r');
}//接收一個字符
char hal_get_char()
{char str = 0;//判斷是否接收到數據while(!(USART4->ISR) &(0x1 << 5)){str = USART4->RDR;}return str;
}//接收一個字符串
char* hal_get_string()
{int i;for(i = 0;i < 50;i++){rebuf[i] = hal_get_char();hal_put_char(rebuf[i]);//判斷是否接收完畢if(rebuf[i] == '\r'){break;}}rebuf[i] = '\0';hal_put_char('\n');hal_put_char('\r');return rebuf;}
uart4.h
#ifndef __UART4_H__
#define __UART4_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"//rcc/gpio/uart4初始化
void hal_uart4_init();//發送一個字符
void hal_put_char(const char str);//發送一個字符串
void hal_put_string(const char* string);//接收一個字符
char hal_get_char();//接收一個字符串
char* hal_get_string();#endif
main.c
#include "uart4.h"int main(){//串口初始化hal_uart4_init();//char str;char *string;while(1){//串口讀取字符//str = hal_get_char();//將字符+1并發回去//hal_put_char(str+1);//串口讀取字符串string = hal_get_string();//將字符串發回去hal_put_string(string);}return 0;}