2023.07.05 ARM day6

news2024/12/24 0:57:24

实验1

1.在键盘输入一个字符,串口工具进行显示

2.例如:在在键盘输入一个字符'a',串口工具进行显示'b'

实验2

1.在键盘输入一个字符串,串口工具进行显示

2.例如:在在键盘输入一个字符串“huyue”,串口工具进行显示“huyue”

include/uart4.h

#ifndef __UART4_H__
#define __UART4_H__

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

//初始化相关操作
void hal_uart4_init();

//发送一个字符
void hal_put_char(const char str);

//接收一个字符
char hal_get_char();

//发送一个字符串
void hal_put_string(const char *string);

//接收一个字符串
char *hal_get_string();

#endif

src/uart4.c

#include "uart4.h"

//初始化相关操作
void hal_uart4_init()
{
	/*-----RCC初始化-----*/
	//使能GPIOB/G
	RCC->MP_AHB4ENSETR |= (0X1 << 1);
	RCC->MP_AHB4ENSETR |= (0X1 << 6);

	//使能UART4
	RCC->MP_APB1ENSETR |= (0x1 << 16);


	/*-----GPIO初始化-----*/
	//设置引脚为复用功能模式
	GPIOB->MODER &= (~(0x3 << 4));
	GPIOB->MODER |= (0x1 << 5);
	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 |= (0x3 << 13);


	/*-----UART初始化-----*/
	//8位数据位
	USART4->CR1 &= (~(0x1 << 28));
	USART4->CR1 &= (~(0x1 << 12));

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

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

	//1位停止位
	USART4->CR2 &= (~(0x3 << 12));

	//波特率
	USART4->BRR &= (~(0xffff));
	USART4->BRR |= (0x22b);

	//不分频
	USART4->PRESC &= (~(0xf));

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

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

	//串口使能
	USART4->CR1 |= (0x1);

}

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

	//将发送的内容赋值给寄存器
	USART4->TDR = str;

	//判断发送是否完成
	while(!(USART4->ISR & (0x1 << 6)));
}


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

	//将数据从寄存器中读出来
	char c = USART4->RDR;
	hal_put_char(c);
	hal_put_char('\n');
	hal_put_char('\r');
	return c;
}


//发送一个字符串
void hal_put_string(const char *string)
{
	int i = 0;
	while(*(string+i) != 0)
	{
		hal_put_char(*(string+i));
		i++;
	}
	hal_put_char('\n');
	hal_get_char('\r');
}


//接收一个字符串
char *hal_get_string()
{
	static char str[512];
	int i=0;
	while(1)
	{
		str[i] = hal_get_char();
		hal_put_char(str[i]);
		if(str[i] == '\r')
		{
			break;
		}
		i++;
	}
	str[i+1] = 0;
	hal_put_char('\n');
	hal_put_char('\r');
	return str;
}

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();
	char c;
	
	while(1)
	{
		c = hal_get_char();
		hal_put_char(++c);
		hal_put_char('\n');
		hal_put_char('\r');
	}
	/*
	char *p;
	while(1)
	{
		p = hal_get_string();
		hal_put_string(p);
	}
	*/
	return 0;
}

运行结果

 

 

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

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

相关文章

MySQL数据库管理与开发

什么是MySQL 数据库&#xff1f; M典MQLB公司开发的一个关系型数据库管理系统。通过它司以有效地组织和管理存储在数据库中的数据。MySQL 数据库可以称得上日前运行速度最快的SQL语言数据库。 MySQL 的优势 MySQL数据库是一款自由软件&#xff0c;任何人都可以从MySQL的官方…

保姆级 雅特力AT32 MCU 从SRAM启动KEIL工程配置步骤(STM/GD/APM通用)

好记性不如烂笔头&#xff0c;既然不够聪明&#xff0c;就乖乖的做笔记&#xff0c;温故而知新。 本文档用于本人对知识点的梳理和记录。 一、前言 开发工具&#xff1a;KEIL 开发板&#xff1a;AT32F415 AT-START-F415 软件工程&#xff1a;雅特力BSP flash_wirte_read 点击…

阿里开业项目chat2DB-人工智能SQL分析介绍

1. chat2DB简介 1-1. 简介 ​ chat2DB是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力&#xff0c;能够将自然语…

RabbitMQ系列(9)--RabbitMQ预取值及利用预取值实现不公平分发

概念&#xff1a;RabbitMQ的默认分发消息机制是轮询分发&#xff0c;但在消费者之间处理任务速度不同时&#xff0c;这种分发消息机制会导致任务的处理效率低下&#xff0c;处理任务速度快的消费者很大一部分的时间处于空闲状态&#xff0c;速度慢的消费者则一直在干活&#xf…

SpringBoot教学资料6-SpringBoot登录注册功能实现(带简单前端)

项目样式&#xff1a; SQL: CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(32) NOT NULL,password varchar(32) NOT NULL,PRIMARY KEY (id),UNIQUE KEY username (username) ) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8项目结构&#xf…

数据结构(排序)

文章目录 一、排序的概念二、插入排序1. 基本思想2. 直接插入排序3. 希尔排序(缩小增量排序) 三、选择排序1. 基本思想2. 直接选择排序3. 堆排序 四、交换排序1. 基本思想2. 冒泡排序3. 快速排序 五、归并排序六、其他排序6.1 计数排序6.2 基数排序6.3 桶排序 一、排序的概念 …

记一次 .NET 某医院预约平台 非托管泄露分析

一&#xff1a;背景 1. 讲故事 前几天有位朋友找到我&#xff0c;说他的程序有内存泄露&#xff0c;让我帮忙排查一下&#xff0c;截图如下&#xff1a; 说实话看到 32bit&#xff0c; 1.5G 这些关键词之后&#xff0c;职业敏感告诉我&#xff0c;他这个可能是虚拟地址紧张所…

Docker快速部署Hadoop环境

Docker安装部署Hadoop环境&#xff0c;通过三个容器来模拟三个节点&#xff0c;最后只保留Master节点实现搭建。 安装环境 Ubuntu 22.04.1 LTS 和Docker 23.0.1 安装过程 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base在Docker中创建网…

供应链管理系统有哪些模块?

先弄搞清楚&#xff1a;供应链管理的概念与定义 供应链管理(Supply Chain Management ,简称SCM)&#xff1a;就是指在满足一定的客户服务水平的条件下&#xff0c;为了使整个供应链系统成本达到最小而把供应商、制造商、仓库、配送中心和渠道商等有效地组织在一起来进行的产品…

Kubernetes(k8s)容器编排Pod调度策略

目录 1 节点调度1.1 创建资源清单1.2 应用部署1.3 删除pod 2 定向调度(标签调度)2.1 创建标签2.1.1 添加标签2.1.2 显示标签 2.3 创建资源清单2.4 应用部署2.5 删除pod 1 节点调度 ​ 一般而言pod的调度都是通过RC、Deployment等控制器自动完成&#xff0c;但是仍可以通过手动配…

自然语言处理的分词与词嵌入

1 分词 1.1 什么是分词 分词是把自然语言语句进行数字化的过程。 1.2 为什么要分词 自然语言是字符串序列&#xff0c;机器没办法直接处理&#xff0c; 需要处理成数字的形式。 1.3 如何进行分词 以英文为例&#xff1a; 1 按空格划分 这应该是最简单也最直观的做法了。这…

Vue3setup的参数说明

setup的两个参数 setup包含两个参数&#xff0c;一个为props、一个为context &#xff08;均为形参&#xff09; props&#xff1a;值为对象&#xff0c;包含&#xff1a;组件外部传递过来&#xff0c;且组件内部声明接收了的属性。context&#xff1a;上下文对象 <scrip…

26-DOM常见的操作(了解)

一、DOM &#x1f37f;&#x1f37f;&#x1f37f;文档对象模型 (DOM) 是 HTML 和 XML 文档的编程接口 它提供了对文档的结构化的表述&#xff0c;并定义了一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构&#xff0c;样式和内容 例如&#xff1a;随着…

2023再更新下百度蜘蛛最新UA(User Agent)

其实百度蜘蛛的UA一直没什么变化&#xff0c;有不少朋友以为百度蜘蛛修改特征了&#xff0c;我查了下日志&#xff0c;把最新的UA整理出来给大家。 百度UA信息&#xff1a; Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html) 神码ai在了…

LVS负载均衡群集——DR直接路由模式

一.LVS数据包流向分析 1.数据包流向 &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Director Ser…

Spring Bean 的生命周期快速记忆

引言 “请你描述下 Spring Bean 的生命周期&#xff1f;”&#xff0c;这是面试官考察 Spring 的常用问题&#xff0c;可见是 Spring 中很重要的知识点。 我之前在准备面试时&#xff0c;去网上搜过答案&#xff0c;大多以下图给出的流程作为答案。 如何记忆 Spring Bean 的…

电影《消失的她》观后感

上周看了电影《消失的她》&#xff0c;也许是和朋友一起看的原因吧&#xff0c;这次电影的体验感觉比以往更好&#xff0c;这或许就是共同经历的缘故&#xff0c;同时看完电影&#xff0c;还可以大家一起讨论下。本部电影讲述一个富商国外旅游&#xff0c;女友莫名消失&#xf…

LVS负载均衡群集博客

文章目录 LVS负载均衡群集一.什么是集群1.群集的含义 二.集群使用在那个场景三.集群的分类1.负载均衡器群集2.高可用群集3.高性能运算群集 四.负载集群的架构1.第一层&#xff0c;负载调度器2.第二层&#xff0c;服务器池3.第三层&#xff0c;共享存储 五.负载均衡集群的工作模…

人工智能在航天领域中有哪些应用?

随着科技的不断进步&#xff0c;人工智能已经成为各个领域中的重要驱动力。在航天领域中&#xff0c;人工智能的应用正日益展现出巨大的潜力。航天领域对精确性、自动化和高效性的需求&#xff0c;使得人工智能成为实现这些目标的关键技术之一。人工智能正在以其独特的优势和算…

使用MQL4编写自己的交易策略:技巧与经验分享

随着技术的发展&#xff0c;越来越多的投资者开始使用程序化交易系统进行交易&#xff0c;其中MQL4语言是广泛应用于MetaTrader 4平台上编写交易策略的一种语言。本文将分享一些技巧和经验&#xff0c;帮助读者利用MQL4编写自己的交易策略。 策略开发流程 首先&#xff0c;我…