1.实验目的:完成字符收发
led.h
#ifndef __GPIO_H__
#define __GPIO_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"
//RCC,GPIO,UART初始化
void init();
//字符数据发送
void set_tt(const char str);
//字符数据接收
char ret_tt();
//字符串数据发送
void seting_tt(const char* string);
//字符串数据接收
char reting_tt();
#endif
led.c
#include "led.h"
//PB2,PG11,UART初始化
void init()
{
//PB2,PG11,UART使能
RCC-> MP_AHB4ENSETR |= (0X1<<1);
RCC-> MP_AHB4ENSETR |= (0X1<<6);
RCC-> MP_APB1ENSETR |= (0X1<<16);
//PB2
GPIOB->MODER |=(0X3<<4);
GPIOB->MODER &=(~(0X1<<4));
GPIOB->AFRL |=(0X15<<8);
GPIOB->AFRL &=(~(0X7<<8));
//PG11
GPIOG->MODER |=(0X3<<22);
GPIOG->MODER &=(~(0X1<<22));
GPIOG->AFRH |=(0X15<<12);
GPIOG->AFRH &=(~(0X9<<12));
}
//发送一个字符
void set_tt(const char data)
{
//数据位
USART4->CR1 &=(~(0X1<<12));
USART4->CR1 &=(~(0X1<<28));
USART4->CR1 &=(~(0X1<<10));
USART4->CR1 &=(~(0X1<<15));
//设置串口波特率
USART4->BRR =0X22b;
//设置停止位
USART4->CR2 &=(~(0X3<<12));
//使能USART
USART4->CR1 |=(0X1<<0);
//设置发送位使能
USART4->CR1 |=(0X1<<3);
//发送数据
if(USART4->ISR &(0X1<<7))
{
USART4->TDR=data;
if(USART4->ISR &(0X1<<6))
{
return;
}
}
}
//接受一个字符
char ret_tt()
{
//数据位
USART4->CR1 &=(~(0X1<<12));
USART4->CR1 &=(~(0X1<<28));
USART4->CR1 &=(~(0X1<<10));
USART4->CR1 &=(~(0X1<<15));
//设置串口波特率
USART4->BRR =0X22b;
//设置停止位
USART4->CR2 &=(~(0X3<<12));
//使能USART
USART4->CR1 |=(0X1<<0);
//设置接受位使能
USART4->CR1 |=(0X1<<2);
//接受数据
char data;
while(1)
{
if(USART4->ISR &(0X1<<5))
{
data=USART4->RDR;
return data;
}
}
return 0;
}
main.c
#include "led.h"
int main()
{
char data;
init();
while(1)
{
data=ret_tt();
set_tt(data);
}
return 0;
}
2.实验目的:完成字符串收发