作业11.29 字符和字符串

1.在键盘输入一个字符,字符+1,并且打印在串口工具上

头文件:uart.h

#ifndef __UART4_H__
#define __UART4_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"



//UART4串口初始化
void hal_uart_init(void);
//发送一个字符
void hal_put(const char str);
//发送一个字符串
void hal_put_string(const char* string);
//接收一个字符
char get_char(void);
//接受一个字符串
char* get_string(void);




#endif

 功能代码:uart.c

#include  "uart4.h"


//UART4串口初始化
void hal_uart_init(void)
{
	/*********RCC相关寄存器***********/
	//使能GPIOB这一组控制器
	RCC->MP_AHB4ENSETR |= (0x1 << 1);
	//使能GPIOG这一组控制器
	RCC->MP_AHB4ENSETR |= (0x1 << 6);
	//使能UART4控制器
	RCC->MP_AHB4ENSETR |= (0x1 << 16);
	
	/*********GPIO相关寄存器***********/
	//设置PB2引脚为复用功能模式
	GPIOB->MODER &=(~(0x3 << 4));
	GPIOB->MODER |=(0x1 << 5);
	//设置PG11引脚为复用功能模式
	GPIOG->MODER &=(~(0x3 << 22));
	GPIOG->MODER |=(0x1 << 23);
	//设置PB2引脚为复用功能模式为UART4_RX
	GPIOB->AFRL &=(~(0xf << 8));
	GPIOB->AFRL |=(0x1 << 11);
	//设置PG11引脚为复用功能模式为UART4_TX
	GPIOG->AFRH &=(~(0xf << 12));
	GPIOG->AFRH |=(0x6 << 12);

	/*********UART4相关寄存器***********/
	//初始化UART4相关内容
/*	if(USART4->CR1 & (0x1 << 0))
	{
		USART4->CR1 &=(~(0x1 << 0));
	}*/
	//设置串口配置信息:115200 8N1
	USART4->CR1 &=(~(0x1 << 28));
	USART4->CR1 &=(~(0x1 << 12));
	USART4->CR1 &=(~(0x1 << 10));

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

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

	USART4->PRESC &=(~(0xf << 0));

	USART4->BRR =(0x022b);
	//串口发送数据寄存器是如何进行数据发送
	USART4->CR1 |=(0x1 << 3);
	//串口接收数据寄存器是如何接收数据
	USART4->CR1 |=(0x1 << 2);
	USART4->CR1 |=(0x1);
}

//发送一个字符
void hal_put(const char str)
{
	//判断发送数据寄存器是否有数据
	while(!(USART4->ISR & (0x1 << 7)));
	//判断发送寄存器是否发送完成
	USART4->TDR =str;
	while(!(USART4->ISR & (0x1 << 6)));
	if(str=='\n')
	{
		hal_put('\r');
	}
}

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

//接收一个字符
char get_char(void)
{
	char str;
	while(!(USART4->ISR & (0x1 << 5)));

	str=(char)USART4->RDR;
	return str;
}

char str[128];
//接受一个字符串
char *get_string(void)
{
	//键盘的回车键按下,对应的字符'\r'
	int i=0;
	do
	{
		str[i]=get_char();
		hal_put(str[i]);
		i++;
	}while(str[i-1]!='\r' && i<127);
	str[i]='\0';
	return str;
}

 主函数:main.c

#include "uart4.h"

int main()
{
	hal_uart_init();
	char a;
	while(1)
	{
		a = get_char();
		hal_put(a+1);
	}

	return 0;
}

 现象:

2.串口工具输入一个字符串,按下回车键,会显示输入的字符串

主函数:main.c

#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_uart_init();
	hal_put_string("usart4 test!!!!\n");
	while(1)
	{
	//	hal_put_char(get_char()+1);
		hal_put_string(get_string());
	}
	return 0;
}

现象:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值