【11/29】

#include "usart4.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"

//UART4串口初始化
void hal_uart_init(void)
{
	//RCC相关寄存器初始化
	RCC->MP_AHB4ENSETR |= (0x1 << 1);
	RCC->MP_AHB4ENSETR |= (0x1 << 6);

	RCC->MP_APB1ENSETR |= (0X1 << 16);
	//GPIO相关寄存器初始化
	GPIOB->MODER &= ~(0x3 << 4);
	GPIOB->MODER |= (0x2 << 4);

	GPIOG->MODER &= ~(0x3 << 22);
	GPIOG->MODER |= (0x2 << 22);

	GPIOB->AFRL &= ~(0xf << 8);
	GPIOB->AFRL |= (0x8 << 8);

	GPIOG->AFRH &= ~(0xf << 12);
	GPIOG->AFRH |= (0x6 << 12);


	//USART4相关寄存器初始化
	USART4->CR1 &= ~(0x1 << 12);
	USART4->CR1 &= ~(0x1 << 28);

	USART4->CR1 &= ~(0X1 << 10);

	USART4->CR1 &= ~(0x1 << 15);

	USART4->CR1 |= (0x3 << 2);

	USART4->CR2 &= ~(0x3 << 12);

	USART4->CR1 |= 0x1;

	USART4->BRR = 0x22b;

	USART4->PRESC &= ~0xf;

}

//发送一个字符
void hal_put_char(const char str)
{
	//判断发送数据寄存器是否有数据
	while(!(USART4->ISR & (0x1 << 7)));

	USART4->TDR = str;

	//判断发送数据寄存器是否发送完成
	while(!(USART4->ISR & (0X1 << 6)));

}

//发送一个字符串
void hal_put_string(const char* string)
{
	//判断字符串结束标志
	while(*string)
    {
        hal_put_char(*string++);
    }
	
    hal_put_char('\n');
    hal_put_char('\r');
}

//接收一个字符
char get_char(void)
{
	char ch;
	//判断接收数据寄存器是否接收到数据
	while(!(USART4->ISR & (0x1 << 5)));

	ch = USART4->RDR;

    return ch;

}

char buf[32] = "";

//接收一个字符串
char* get_string(void)
{
	//键盘的回车键按下,对应的字符'\r'
	int i = 0;

	for(i=0;i<32;i++)
	{
		buf[i] = get_char();

		hal_put_char(buf[i]);

		if(buf[i] == '\r')
			break;
	}

	buf[i] = '\0';
	hal_put_char('\n');

	return buf;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值