键盘输入一个字符 a’,串口工具显示“b 实现现象:键盘输入一个字符串,串口工具回显输入的字符串

news2024/11/26 4:52:18


1.键盘输入一个字符 a’,串口工具显示"b


2.实现现象:键盘输入一个字符串,串口工具回显输入的字符串

uart4.h

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

void hal_uart4_init();

char hal_get_char();

void hal_put_char(const char str);

char* hal_get_string();

void hal_put_string(const char* string);








#endif

uart4.c

#include "uart4.h"



void hal_uart4_init()
{
	/*************RCC章节*************/
	RCC->MP_AHB4ENSETR|=(0x1<<1);
	RCC->MP_AHB4ENSETR|=(0x1<<6);
	RCC->MP_APB1ENSETR|=(0x1<<16);
	/*************GPIO章节****************/
	//PB2
	//设置引脚为复用模式 MODER[5:4]=10
	GPIOB->MODER&=(~(0x3<<4));
	GPIOB->MODER|=(0x1<<5);
	//设置引脚为复用功能UART4_RX AFRL[11:8]=1000
	GPIOB->AFRL&=(~(0xf<<8));
	GPIOB->AFRL|=(0x1<<11);
	
	//PG11
	//设置引脚为复用模式 MODER[23:22]=10
	GPIOG->MODER&=(~(0x3<<22));
	GPIOG->MODER|=(0x1<<23);

	//设置引脚为复用功能UART4_RX AFRH[12:15]=0110
	GPIOG->AFRH&=(~(0xf<<12));
	GPIOG->AFRH|=(0x3<<13);

	/************UART4章节*************/
		
	//串口使能 CR1[0]=1
	USART4->CR1|=(0x1<<0);

	//发送器使能 CR1[3]=1 
	USART4->CR1|=(0x1<<3);

	//接收器使能 CR1[2]=1 
	USART4->CR1|=(0x1<<2);

	//设置数据位为8位 CR1[12]=0 CR1[28]=0 
	USART4->CR1&=(~(0x1<<12));
	USART4->CR1&=(~(0x1<<28));

	//设置采样率为16倍 CR1[15]=0 
	USART4->CR1&=(~(0x1<<15));

	//设置无奇偶校验位 CR1[10]=0 
	USART4->CR1&=(~(0x1<<10));

	//设置1位停止位 CR2[13:12]=00 
	USART4->CR2&=(~(0x3<<12));

	//设置串口的波特率
	USART4->BRR|=0x22b;

	//设置串口不分频 PRESC[3:0]=0000
	USART4->PRESC&=(~(0xf<<0));
}

char hal_get_char()
{
	char str;
	//循环判断ISR[5]是否为1,为1后接收到数据,才能读取
	while(!(USART4->ISR & (0x1 << 5)));
	//ISR[5]==1
	str=USART4->RDR;
	return str;
}

void hal_put_char(const char str)
{
	//循环判断ISR[7]是否为1,为1后TDR寄存器为空,可以赋值
	while(!(USART4->ISR & (0x1 << 7)));
	USART4->TDR=str;
	//循环判断ISR[6]是否为1,为1后,寄存器发送完毕
	while(!(USART4->ISR & (0x1 << 6)));

}
char str[50]={0};
char* hal_get_string()
{
	int i;
	for(i=0;i<49;i++)
	{
		str[i]=hal_get_char();
		hal_put_char(str[i]);
		if(str[i]=='\r')
		{
			break;
		}
	}
	hal_put_char('\0');
	hal_put_char('\n');
	return str;
}


void hal_put_string(const char* string)
{
	while(*string)
	{
		hal_put_char(*string++);
	}
	int i;
	for(i=0;i<49;i++)
	{
		str[i]=0;
	}
	hal_put_char('\0');
	hal_put_char('\n');
}

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_uart4_init();	
	while(1)
	{
		//hal_put_char(hal_get_char());	
		hal_put_string(hal_get_string());
	}
	return 0;
}

结果: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQLite Expert Professional将ACCESS数据库文件导入到SQLITE

一、下载与安装 下载对应的位数的SQLite Expert&#xff1a;http://www.sqliteexpert.com/download.html &#xff0c;建议下载professional版本的&#xff0c;功能更加强大。 如果官网进不去可以到百度云下载&#xff1a;https://pan.baidu.com/s/17igndAqQ7SQ57LcjwS4WIQ …

RK3588 PWM调试记录---linux pwm子系统驱动框架

一、RK3588 PWM简介 RK3588一共有4组PWM,每组有4个通道&#xff0c;共可以产生4*416路PWM波形&#xff1b; PWM0 开始地址&#xff1a;0xfd8b0000 PWM1 开始地址&#xff1a;0xfebd0000 PWM2 开始地址&#xff1a;0xfebe0000 PWM3 开始地址&#xff1a;0xfebf0000 即每组PWM的…

追着 chatGPT 打的 Claude 跑不动了?!

claude 据说是 openai 公司的副总裁因理念不合&#xff0c;出走创建的 anthropic 公司发明的聊天机器人&#xff0c;和 chatGPT一样&#xff0c;智能聊天功能都很不错。 大致水平在 强chatGPT3.5 左右。 前期因为免费试用&#xff0c;反应速度非常快&#xff0c;对国内也没有…

2. 日志模块(上)

日志需求分析 无论对于业务系统还是中间件来说&#xff0c;日志都是必不可少的基础功能。完善、清晰地日志可以帮助我们观测系统运行的状态&#xff0c;并且快速定位问题。现在让我们站在 MyBatis 框架开发者的角度&#xff0c;来简单做一下日志功能的需求分析&#xff1a; 作…

1760_C语言中选择排序的实现

全部学习汇总&#xff1a; GreyZhang/c_basic: little bits of c. (github.com) 选择排序的实现思想跟冒泡排序的思想非常相近&#xff0c;二者的差一点在于&#xff1a;冒泡排序在比较交换的过程中交换的是两个位置的数据&#xff0c;而选择排序则是在遍历比较的过程中寻找最小…

web安全php基础_echo,print,print_r,var_dump 的用处及区别

echo & print 在 PHP 中有两个基本的输出方式&#xff1a; echo 和 print。 PHP echo 语句 echo 是一个语言结构&#xff0c;使用的时候可以不用加括号&#xff0c;也可以加上括号&#xff1a; echo 或 echo()。 显示字符串 下面的实例演示了如何使用 echo 命令输出字…

QtWebApp介绍、下载和搭建http轻量级服务器Demo

一、QtWebApp介绍 QtWepApp是一个C中的HTTP服务器库&#xff0c;其灵感来自Java Servlet。适用于Linux、Windows、Mac OS和Qt Framework支持的许多其他操作系统。   QtWebApp包含以下组件&#xff1a; • HTTP(S)1.0和1.1服务器 • 模板引擎 • 缓冲记录器   这些组件可以…

暑假第二天打卡

离散&#xff1a; &#xff08;1&#xff09;联结词集及其优先级 &#xff08;2&#xff09;真值表 真值表&#xff0c;最让人迷糊的就是p的真值是0&#xff0c;q的真值是0,p→q的真值是1&#xff0c;理解话虚假的前提可以推出任意结论 构造真值表关键在于从00……0开始&…

【单例模式】—— 每天一点小知识

&#x1f4a7; 单例模式 \color{#FF1493}{单例模式} 单例模式&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&#x1f995;生动形…

点大商城V2_2.4.6 全开源版 百度+支付宝+QQ+头条+小程序端+unipp开源前端系统安装教程

播播资源了解到点大商城V2是一款采用全新界面设计支持多端覆盖的小程序应用&#xff0c;支持H5、微信公众号、微信小程序、头条小程序、支付宝小程序、百度小程序&#xff0c;本次测试全套安装的是序是点大商城V2独立版&#xff0c;包含全部插件&#xff0c;代码全开源&#xf…

java项目之高校二手交易平台(ssm+jsp+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的高校二手交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&…

Android中级——IPC

IPC IPC是什么&#xff1f;多进程带来的问题IPC前提SerializableParcelableBinder Android中的IPCBundle文件共享MessengerAIDLContentProviderSocket不同IPC优缺点 Binder连接池 IPC是什么&#xff1f; Inter-Process Communcation&#xff0c;含义为进程间通信或者跨进程通信…

NB-IoT学习笔记 —— NB-IoT介绍

一、简介 NB-IoT 是指窄带物联网&#xff08;Narrow Band Internet of Things&#xff09;技术&#xff0c;是一种低功耗广域&#xff08;LPWA&#xff09;网络技术标准&#xff0c;基于蜂窝技术&#xff0c;用于连接使用无线蜂窝网络的各种智能传感器和设备&#xff0c;聚焦于…

Vite+Vue3+Cesium工程搭建及初始化

现如今的前端更新太快了,我记得我一年前还在写 vue2+cesium 的工程构建方式。现在转眼都 vue3 了。而且 vite 也越来越火逐渐成为趋势。那么这篇文章我们就来介绍一下如何使用 vite 构建一个 vue3+cesium 的工程。 首先我们可以打开 vite 的官网学习如何构建 vite 项目。第一…

Nginx缓存代理服务器

Nginx缓存代理服务器 一、实验部署 二、搭建Nginx缓存代理服务器 1.nginx反向缓存代理服务配置 ###关闭和禁止防火墙开机自启功能 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/enforcing/disabled/ /etc/selinux/config2.安装nginx服务 v…

基于SSM的人力资源管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

剑指offer12.矩阵中的路径

太难了&#xff0c;想了一会儿没有头绪就直接看了题解。 class Solution {public boolean exist(char[][] board, String word) {int clowns board.length;int rows board[0].length;boolean[][] visited new boolean[clowns][rows];for(int i 0;i<clowns;i){for(int j0…

【QT】——QWidget窗口类

1.QWidget基本概念 QWidget 类是所有窗口类的父类 (控件类是也属于窗口类),QWidget 类的父类的 QObject, 也就意味着所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收.可以内嵌到其他窗口的内部&#xff0c;没有边框,需要指定父类窗口可以作为独立的窗口显示&…

DBeaver(一款非常好用的数据库管理工具)大批量数据导入导出非常友好

DBeaver(一款非常好用的数据库管理工具)大批量数据导入导出非常友好 背景说明&#xff1a; 最近因工作需要进行大批量的数据导入导出&#xff0c;很多工具都很难完成千万级以上的单表数据导入导出工作。后来找到了DBeaver这款工具&#xff0c;可以将千万级数据进行分批写入或导…

安装部署mysql

1.二进制方式安装 (1)下载压缩包 (2)创建用户和组 (3)解压 &#xff08;4&#xff09;创建软链接 (5)初始化 &#xff08;6&#xff09; 2.使用yum方式安装 (1)用yum install wget unzip bash-completion tree vim lrzsz net-tools -y命令安装常用软件 (2)用yum install mysql…