ARM day4 1.键盘输入一个字符,字符+1,并且打印在串口工具上 2.串口工具输入一个字符串,按下回车键,会显示输入的字符串

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

要求键盘输入’a’----->串口工具打印’b’

代码

main.c
#include "uart4.h"

int main()
{
	uart4_init();
	
	while(1)
	{
		put_char(get_char()+1);
	}	
	
	return 0;

}

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

//1.初始化函数
void uart4_init();
//2.发送一个字符
void put_char(const char str);
//3.接收一个字符
char get_char();

#endif
uart4.c
#include "uart4.h"
#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_gpio.h"  
#include "stm32mp1xx_rcc.h"

//1.初始化函数
void uart4_init()
{
	/*********RCC初始化*************/
	RCC->MP_AHB4ENSETR |= (0x1<<1);
	RCC->MP_AHB4ENSETR |= (0x1<<6);
	RCC->MP_APB1ENSETR |= (0x1<<16);

	/*********GPIO初始化*************/
	GPIOB->MODER &=(~(0x3<<4));
	GPIOB->MODER |=(0x1<<5);
	GPIOB->AFRL  &=(~(0xf<<8));
	GPIOB->AFRL  |=(0x1<<11);

	GPIOG->MODER &=(~(0x3<<4));
	GPIOG->MODER |=(0x1<<5);
	GPIOG->AFRH  &=(~(0xf<<12));
	GPIOG->AFRH  |=(0x3<<13);


	/*********UART初始化*************/
	if(USART4->CR1 & (0x1<<0))
	{
		//将UE为禁止
		USART4->CR1 &= (~(0x1<<0));
	}

	//1.串口初始化 8位数据位 无奇偶校验位
		// 8位数据位
	USART4->CR1 &= (~(0x1<<28));
	USART4->CR1 &= (~(0x1<<12));
		//无奇偶校验位	
	USART4->CR1 &= (~(0x1<<10));
		


	//2.设置串口一位停止位
	USART4->CR2 &= (~(0x3<<12));

	//3.设置串口16倍采样率
	USART4->CR1 &= (~(0x1<<15));

	//4.设置串口不分频
	USART4->PRESC &=(~(0xf<<0));


	//5.设置串口波特率
	USART4->BRR &= (~(0xffff));
	USART4->BRR |= (0x022b);


	
	//6.设置串口发送器使能
	USART4->CR1 |= (0x1<<3);
	
	//7.设置串口接收器使能
	USART4->CR1 |= (0x1<<2);
	
	//8.设置串口使能
	USART4->CR1 |= (0x1);

}
//2.发送一个字符
void put_char(const char str)
{
	while(!(USART4->ISR & (0x1<<7)));


	USART4->TDR =str;
	
	while(!(USART4->ISR & (0x1<<6)));
}
//3.接收一个字符
char get_char()
{
	char ch;
	while(!(USART4->ISR & (0x1<<5)));
	
	ch=USART4->RDR;
	return ch;
}

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

代码

main.c
#include "uart4.h"

int main()
{
	uart4_init();
	
	char str[50];
	
	while(1)
	{
		get_string(str);

		put_string(str);
	}
	return 0;
}

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

//1.初始化函数
void uart4_init();
//2.发送一个字符
void put_char(const char str);
//3.接收一个字符
char get_char();
//4.发送一个字符串
void put_string(const char* str);
//5.接收一个字符串
void  get_string(char * str);
#endif

uart4.c
#include "uart4.h"
#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_gpio.h"  
#include "stm32mp1xx_rcc.h"

//1.初始化函数
void uart4_init()
{
	/*********RCC初始化*************/
	RCC->MP_AHB4ENSETR |= (0x1<<1);
	RCC->MP_AHB4ENSETR |= (0x1<<6);
	RCC->MP_APB1ENSETR |= (0x1<<16);

	/*********GPIO初始化*************/
	GPIOB->MODER &=(~(0x3<<4));
	GPIOB->MODER |=(0x1<<5);
	GPIOB->AFRL  &=(~(0xf<<8));
	GPIOB->AFRL  |=(0x1<<11);

	GPIOG->MODER &=(~(0x3<<4));
	GPIOG->MODER |=(0x1<<5);
	GPIOG->AFRH  &=(~(0xf<<12));
	GPIOG->AFRH  |=(0x3<<13);


	/*********UART初始化*************/
	if(USART4->CR1 & (0x1<<0))
	{
		//将UE为禁止
		USART4->CR1 &= (~(0x1<<0));
	}

	//1.串口初始化 8位数据位 无奇偶校验位
		// 8位数据位
	USART4->CR1 &= (~(0x1<<28));
	USART4->CR1 &= (~(0x1<<12));
		//无奇偶校验位	
	USART4->CR1 &= (~(0x1<<10));
		


	//2.设置串口一位停止位
	USART4->CR2 &= (~(0x3<<12));

	//3.设置串口16倍采样率
	USART4->CR1 &= (~(0x1<<15));

	//4.设置串口不分频
	USART4->PRESC &=(~(0xf<<0));


	//5.设置串口波特率
	USART4->BRR &= (~(0xffff));
	USART4->BRR |= (0x022b);


	
	//6.设置串口发送器使能
	USART4->CR1 |= (0x1<<3);
	
	//7.设置串口接收器使能
	USART4->CR1 |= (0x1<<2);
	
	//8.设置串口使能
	USART4->CR1 |= (0x1);

}
//2.发送一个字符
void put_char(const char str)
{
	while(!(USART4->ISR & (0x1<<7)));


	USART4->TDR =str;
	
	while(!(USART4->ISR & (0x1<<6)));
}
//3.接收一个字符
char get_char()
{
	char ch;
	while(!(USART4->ISR & (0x1<<5)));
	
	ch=USART4->RDR;
	return ch;
}


//4.发送一个字符串
void put_string(const char* str)
{
	int i=0;
	put_char('\n');
	while (str[i]!='\0')
	{
		put_char(str[i]);
		i++;
	}
	put_char('\n');
}
//5.接收一个字符串
void get_string(char * str)
{
	int i=0;
	do
	{
		str[i]=get_char();
		put_char(str[i]);
		i++;
	}while(str[i-1]!='\r' && i<49);

	str[i]='\0';

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值