2023.07.05 ARM day6

实验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/GRCC->MP_AHB4ENSETR |= (0X1 << 1);RCC->MP_AHB4ENSETR |= (0X1 << 6);//使能UART4RCC->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.hqwc.cn/news/9030.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于matlab使用自动要素匹配查找图像旋转和缩放(附源码)

一、前言 此示例演示如何自动确定一对图像之间的几何变换。当一个图像因旋转和缩放而相对于另一个图像失真时&#xff0c;请使用 和 查找旋转角度和比例因子。然后&#xff0c;您可以转换扭曲的图像以恢复原始图像。 二、步骤 1&#xff1a;读取图像 将映像引入工作区。 三、…

Electron详解(二):基本使用与项目打包

文章目录 一、electron的基本使用创建一个 electron 项目创建应用窗口和页面 二、打包应用程序&#xff08;window平台&#xff09;使用 Electron Forge 打包打包报错解决方法 三、打包应用程序&#xff08;Linux平台&#xff09;electron builder打包 一、electron的基本使用 …

Baltamatica 北太天元 —— 基于模拟退火算法的旅行商问题

文章目录 北太天元&#xff08;Baltamatica&#xff09;简介Baltamatica 复现基于Matlab的旅行商问题问题描述模拟退火算法Metropolis准则算法流程图&#xff1a; Demo1&#xff1a;只考虑累计距离&#xff0c;通过模拟退火算法求解最短路径matlab代码&#xff1a;Baltam代码&a…

win如何使用OpenSSL生成自签名证书,使 http 升级为 https

win如何使用OpenSSL生成自签名证书&#xff0c;使 http 升级为 https 前言 HTTPS其实就是HTTP over SSL&#xff0c;也就是让HTTP连接建立在SSL安全连接之上。 创建自签名证书需要安装openssl。参考本文安装OpenSSL部分。 使用OpenSSL生成自签名证书的步骤&#xff1a;参考…

给LLM装上知识:从LangChain+LLM的本地知识库问答到LLM与知识图谱的结合

第一部分 基于LangChain ChatGLM-6B的本地知识库问答的应用实现 1.1 什么是LangChain&#xff1a;连接本地知识库与LLM的桥梁 作为一个 LLM 应用框架&#xff0c;LangChain 支持调用多种不同模型&#xff0c;提供相对统一、便捷的操作接口&#xff0c;让模型即插即用&#x…

从零实现深度学习框架——Seq2Seq机器翻译实战

引言 本着“凡我不能创造的&#xff0c;我就不能理解”的思想&#xff0c;本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架&#xff0c;该框架类似PyTorch能实现自动求导。 &#x1f4a1;系列文章完整目录&#xff1a; &#x1f449;点此&#x1f448; 要深入理解…

Android Studio实现内容丰富的安卓自行车租赁平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号105 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查…

使用itextpdf填充表单域并生成pdf

文章目录 前言一、准备工作1.1 安装软件1.2 准备pdf1.3 设置表单域 二、创建项目三、编写代码3.1 编写工具类3.2 测试 四、测试结果 前言 最近手上有个任务&#xff0c;就是需要做一个pdf导出的功能。 可选择的技术点比较多&#xff0c;我这边综合考虑之后&#xff0c;使用的…

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

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

基于卷积变分自动编码器的3D数据处理与重建【CVAE】

在这个项目中&#xff0c;我们将学习如何使用卷积变分自动编码器 (CVAE) 来处理和重建 3D 湍流数据。 我们使用计算流体动力学 (CFD) 方法生成 3D 湍流立方体&#xff0c;每个 3D 立方体沿着三个速度分量携带物理信息&#xff08;与图像数据类似&#xff0c;被视为单独的通道&…

Http host 标头攻击

一、什么是http host 标头攻击 HTTP Host 标头攻击是一种网络安全攻击技术&#xff0c;利用了 HTTP 协议中的 Host 标头字段的漏洞。Host 标头字段用于指定客户端请求的目标主机名或域名。 攻击者可以通过构造恶意的 HTTP 请求&#xff0c;伪造或篡改 Host 标头字段的值&#x…

Linux系统安全:安全技术和防火墙

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、Linux系统安全&#xff1a;安全技术和防火墙1.安全技术&#xff1a;2.入侵防御系统 (Intrusion Prevention System) :3.防火墙 ( Erewall ) :4.防水墙&#xff…