【ARM7.5作业】

news2024/12/25 1:01:34

作业1

 作业2

 代码实现:

head.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);

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

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

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

#endif

fun

#include "uart4.h"
//初始化相关操作
void hal_uart4_init()
{
	/*******RCC章节初始化********/
	RCC->MP_AHB4LPENSETR |= 0x1 << 1; //1.使能GPIOB组控制器 MP_AHB4LPENSETR[1] = 1
	RCC->MP_AHB4LPENSETR |= 0x1 << 6; //2.使能GPIOG组控制器 MP_AHB4LPENSETR[6] = 1
	RCC->MP_APB1ENSETR |= 0x1 <<  16; //3.使能UART4组控制器 MP_APB1ENSETR[16] = 1
	/*******GPIO章节初始化********/
	//1.设置PB2引脚为复用功能模式 MODER[5:4] = 10
	GPIOB->MODER &= ~(0x3 << 4); 
	GPIOB->MODER |= 0x1 << 5;
	
	//2.设置PB2引脚复用功能为UART4_RX       AFRL[11:8] = 1000
	GPIOB->AFRL &= ~(0xf << 8);
	GPIOB->AFRL |= 0x1 << 11;

	//1.设置PG11引脚为复用功能模式 MODER[23:22] = 10
	GPIOG->MODER &= ~(0x3 << 22);
	GPIOG->MODER |= 0x1 << 23;

	
	//2.设置PG11引脚复用功能为UART4_TX     AFRH[15:12] = 0110
	GPIOG->AFRH &= ~(0xf << 12);
	GPIOG->AFRH |= 0x6 << 12;



	/*******UART4章节初始化********/
	//0.设置串口使能UE=0
	USART4->CR1 &= ~0x1;
	//1.设置一次收发数据宽度:1位起始位,8位数据位,1
	USART4->CR1 &= ~(0x1 << 12);
	USART4->CR1 &= ~(0x1 << 28);
	//2.设置无奇偶校验位
	USART4->CR1 &= ~(0x1 << 10);
	//3.设置1位停止位
	USART4->CR2 &= ~(0x3 << 12);
	//4.设置16倍采样率
	USART4->CR1 &= ~(0x1 << 15);
	//5.设置串口不分频
	USART4->PRESC &= ~0xf;
	//6.设置串口波特率为115200
	USART4->BRR = ~0xffff;
	USART4->BRR = 0x22b;
	//7.设置串口发送器使能
	USART4->CR1 |= 0x1 << 3;
	//8.设置串口接收器使能
	USART4->CR1 |= 0x1 << 2;
	//9.设置串口使能
	USART4->CR1 |= 0x1;
	


}



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

	//1.判断发送数据寄存器是否为空ISR[7]
	//特点:为空才可以发送下一位的数据,为满需要等待
	//读0:满,需要等待 	读1:发送数据
	while(!(USART4->ISR & (0x1 << 7)));
	//2.将发送的内容,赋值给发送数据寄存器
	USART4->TDR = str;
	//3.判断一帧数据是否发送完成 ISR[6]
	//读0:没有发送完成,需要等待 	读1:发送完成
	while(!(USART4->ISR & (0x1 << 6)));
}

//发送一个字符串
void hal_put_string(const char *string)
{
	//判断是否为'\0'
	int i=0;
	while(string[i]!='\0')
	{
		hal_put_char(string[i]);
		i++;
	}
	hal_put_char('\n');
	hal_put_char('\r');
	//一个字符一个字符进行发送

}

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

	//1.判断接收数据寄存器中是否接收到数据 ISR[5]
	while(!(USART4->ISR & 0x1 << 5));
	//2.将接收数据寄存器中的内容读出来
	char c = USART4->RDR;
	
	return c;
	

}

char str[100];

//接收一个字符串
char* hal_get_string()
{
	int i=0;
	while(1)
	{
		//1.循环进行接收
		str[i] = hal_get_char();
		//2.当键盘的回车键按下之后,代表字符串输入完成  '\r'
		hal_put_char(str[i]);
		if(str[i] == '\r') break;
		i++;
	}
	str[i] = '\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()
{
	while(1)
	{
		
		char c = hal_get_char()+1;
		hal_put_char(c);
		

		/*
		char *string = hal_get_string();
		
		hal_put_string(string);
		*/
	}

	
	return 0;
}

运行结果:

作业1:

 作业2:

 

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

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

相关文章

Mockito的使用案例

流水线的单元测试 代码没有覆盖到&#xff0c;使用的是Mockito测试框架&#xff0c;原来是Mockito没有正确使用 package com.hmdp;import com.hmdp.controller.BlogController; import com.hmdp.entity.Blog; import com.hmdp.service.IBlogService; import com.hmdp.service.…

文心一言 VS 讯飞星火 VS chatgpt (55)-- 算法导论6.3 1题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;55&#xff09;-- 算法导论6.3 1题 一、参照图6-3 的方法&#xff0c;说明 BUILD-MAX-HEAP在数组 A(5&#xff0c;3&#xff0c;17&#xff0c;10&#xff0c;84&#xff0c;19&#xff0c;6&#xff0c;22&#xff0c;9)上的操作…

C#(五十二)之线程

线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作&#xff0c;那么设置不同的线程执行路径往往是有益的&#xff0c;每个线程执行特定的工作。 C#线程操作&#xff0c;需要使用到Thread类。 使用命名空间 using Sy…

grafana+prometheus+pushgateway+flink可视化实时监控

文章目录 一、各部分介绍二、安装配置1、安装pushgateway2、安装Prometheus3、Grafana 安装 三、测试使用 一、各部分介绍 采集层 flink APP和linux system两部分&#xff0c;是我们要收集指标数据的组件传输层 Pushgateway&#xff1a;是一个推送收集和推送数据的组件 Node_ex…

【网络安全带你练爬虫-100练】第5练:爬虫的翻页操作+错误情况过滤

目录 一、翻页分析&#xff1a; 二、代码逻辑 1、入口程序修改 2、page参数传入 三、完整代码 1、运行结果 2、错误分析&#xff1a; 3、缺陷代码&#xff1a; 4、完善逻辑&#xff1a; 5、完善代码&#xff1a; &#xff08;说在前面&#xff0c;任何逻辑都有很多方…

Python软件安装后,Scripts文件夹下为空解决办法

安装Python后&#xff0c;需要使用pip&#xff0c;发现Scripts下为空&#xff0c;无法install pip: 解决办法&#xff1a; cmd进入Windows命令提示符界面&#xff0c;进入Python的安装目录&#xff0c;并使用python -m ensurepip命令执行即可&#xff1a;

R语言——字符串处理

paste(abc, def, gh, sep ) #粘贴字符串 substr(abcdefg, 2, 3) # 取特定字符串 gsub(abc, , c(abc, abcc, abcbc)) # 将字符串中abc替换为空 strsplit(a;b;c, ;, fixed T) # 按照;切分字符串 strsplit(a222b2.2c, 2.2, fixed F) # 按照正则表达式分隔&#xff0c;这里的.是…

15.1 BP神经网络实现图像压缩——了解神经网络在图像处理方面的应用(matlab程序)

1.简述 BP神经网络现在来说是一种比较成熟的网络模型了,因为神经网络对于数字图像处理的先天优势,特别是在图像压缩方面更具有先天的优势,因此,我这一段时间在研究神经网络的时候同时研究了一下关于BP网络实现图像压缩的原理和过程,并且是在MATLAB上进行了仿真的实验,结果发现设…

Java:ThreadLocal解析

Java&#xff1a;ThreadLocal解析 前言一、 什么是ThreadLocal&#xff1f;二、ThreadLocal的内存泄漏问题1.什么是内存泄漏&#xff1f;2.为什么会出现内存泄漏问题&#xff1f;3.如何解决内存泄漏问题&#xff1f;&#xff08;1&#xff09;ThreadLocal会自动清除key为null的…

层级在BW4HANA中的处理

目录 1.从flatfile加载层级的处理 2. 从ERP数据源抽取区间层级到BW 2.1 在ERP中的层级数据源 2.1.1 PSA格式和IDoc格式的区别 2.1.2 怎么查看Interval的字段 2.1.3 如何在S4里查看层级数据源结构 2.1.4 关于时间相关层级date to和date from 1.从flatfile加载层级的处理 层…

【快速开始】一个简单的Flask-SocketIO应用,完成后端推送消息接收与关闭

效果图 先看运行效果图 OK&#xff0c;下面开始。 安装环境 本人使用环境及版本&#xff1a; Anaconda&#xff1a; 虚拟环境&#xff1a; Python版本&#xff1a;3.8.13 安装包及版本&#xff1a; Flask-SocketIO&#xff1a;5.3.4 eventlet&#xff1a;0.33.3 快速开…

BUU [ZJCTF 2019]NiZhuanSiWei

BUU [ZJCTF 2019]NiZhuanSiWei 先看题目&#xff0c;提示了useless.php。 猜到了flag在哪。 没啥可以学的&#xff0c;直接上exp。 ?textdata://text/plain,welcome to the zjctf &filephp://filter/readconvert.base64-encode/resourceuseless.php &passwordO:4:&q…

工作学习总结:安卓地图SDK测试--前置准备阶段8天

工作学习总结&#xff1a;安卓地图SDK测试--前置准备阶段8天 安卓地图SDK测试--前置准备阶段8天前置知识&#xff1a;1、安卓环境开发部署2、高德 SDK demo 如何进行调试&#xff08;1&#xff09;SHA1 密钥无法获取&#xff08;2&#xff09;下载了高德 3D 地图 demo&#xff…

Leetcode---352周赛

周赛题目 2760. 最长奇偶子数组 2761. 和等于目标值的质数对 2762. 不间断子数组 2763. 所有子数组中不平衡数字之和 一、最长奇偶子数组 这题的数据范围允许用暴力来做&#xff0c;只要我们分别枚举左端点left和右端点right&#xff0c;然后看区间[left,right]是否符合题目条…

stable diffusion 百宝书

文章目录 0. 环境搭建0.1 Windows0.1.1 git环境安装0.1.2 python 环境搭建0.1.2.1 配置pip国内镜像源 0.1.3 stable diffusion环境搭建0.1.3.1 远程访问Stable diffusion0.1.3.2 模型 Lora下载 1. 基础知识1.1 Stable Diffusion Webui及基础参数1.2 参数说明1.2.1 采样方法1.2.…

【AI实战】从零开始搭建中文 LLaMA-33B 语言模型 Chinese-LLaMA-Alpaca-33B

【AI实战】从零开始搭建中文 LLaMA-33B 语言模型 Chinese-LLaMA-Alpaca-33B 简介环境配置环境搭建依赖安装 代码及模型权重拉取拉取 Chinese-LLaMA-Alpaca拉取 llama-30b-hf 模型权重及代码拉取 chinese-llama-lora-33b 模型权重及代码 合并模型权重先转换 pth 类型的模型权重&…

docker版jenkins安装node打包vue2

下载node 通过jenkins配置下载因为某些原因会失败&#xff0c;故自己下载安装https://nodejs.org/zh-cn/download解压然后复制到docker的jenkins容器 tar -xvf node-v16.18.1-linux-x64.tar.xzdocker cp ./node-v16.18.1-linux-x64 jenkins:/node配置 jenkins-全局工具配置- …

【Vim编辑器】编码技巧:模板(自动添加信息)+配置参考(~/.vimrc)

前言&#xff1a; 在编写代码时&#xff0c;为了提高代码的可读性和维护性&#xff0c;我们经常在文件的头部添加一些信息提示&#xff0c;如作者、日期、版本号等。本文介绍了如何在 Vim 编辑器中实现自动添加信息提示的功能。 结尾提供~/.vimr参考配置&#xff0c;可提高代码…

短视频seo矩阵+抖音小程序源码开源部署(二)

一、 开发思路&#xff1a; 通过短视频seo矩阵抖音小程序的形式&#xff0c;实现视频的批量制作&#xff0c;小程序内容批量挂载&#xff0c;客户线索批量收集&#xff0c;实现企业运营价值最大化。开发逻辑&#xff1a;通过短视频矩阵布局seo搜索关键词&#xff0c;接入小程序…

Elasticsearch:文档版本控制和乐观并发控制

在今天的文章中&#xff0c;我来详细描述一下 Elasticsearch 文档的版本控制以及如何更新文档。你也可以阅读我之前的文章 “Elasticsearch&#xff1a;深刻理解文档中的 verision 及乐观并发控制”。 版本控制 我们知道 Elasticsearch 的每个文档都有一个相对应的版本。这个版…