嵌入式:ARM Day6

作业:完成cortex-A7核UART总线实验

目的:1.输入'a',显示'b',将输入的字符的ASCII码下一位字符输出
           2.原样输出输入的字符串

源码:

uart4.h 

#ifndef __UART4_H__
#define __UART4_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"//RCC/GPIO/UART4章节初始化
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

uart4.c

#include "uart4.h"//RCC/GPIO/UART4章节初始化
void hal_uart4_init(){//RCC章节初始化//1.使能GPIOB组控制器RCC->MP_AHB4ENSETR |= (0X1 << 1);//2.使能GPIOG组控制器RCC->MP_AHB4ENSETR |= (0x1 << 6);//3.使能UART4组控制器RCC->MP_APB1ENSETR |= (0x1 << 16);//GPIO章节初始化//1.设置PB2引脚为复用功能GPIOB->MODER &= (~(0X3 << 4));GPIOB->MODER |= (0x1 << 5);//2.设置PB2引脚复用功能为UART4_RX AFRL[11:8] = 1000GPIOB->AFRL &= (~(0xf << 8));GPIOB->AFRL |= (0x1 << 11);//1.设置PG11引脚为复用功能 MODER[23:22] = 10GPIOG->MODER &= (~(0X3 << 22));GPIOG->MODER |= (0x1 << 23);//2.设置PG11引脚复用功能为UART4_TX AFRH[15:12] = 0110GPIOG->AFRH &= (~(0xf <<12));GPIOG->AFRH |= (0X3 << 13);//UART4章节初始化//8N1 115200 使能//0.设置UE=0USART4->CR1 &= (~0X1);//1.设置UART4串口1位起始位,8位数据位 CR1[28][12] = 00USART4->CR1 &= (~(0X1 << 12));USART4->CR1 &= (~(0X1 << 28));//2.设置UART4串口没有校验位 CR1[10] = 0USART4->CR1 &= (~(0X1 << 10));//3.设置UART4串口1位停止位 CR2[13:12] = 00USART4->CR2 &= (~(0X3 << 12));//4.设置UART4串口16倍采样率 CR1[15] = 0USART4->CR1 &= (~(0x1 << 15));//5.设置UART4串口不分频 PRESC[3:0] = 0000USART4->PRESC &= (~0xf);//6.设置UART4串口波特率为 115200 BRR = 0x22B//BRR = 64000000 / 115200USART4->BRR = 0x22B;//7.设置UART4串口发送器使能 CR1[3] = 1USART4->CR1 |= (0x1 << 3);//8.设置UART4串口接收器使能 CR1[2] = 1USART4->CR1 |= (0X1 << 2);//9.设置UART4串口使能 CR1[0] = 1 UE=1USART4->CR1 |= 0X1;
}//接收一个字符函数
char hal_get_char(){//判断接收数据寄存器中,是否接收到数据while(!(USART4->ISR & (0X1 << 5)));//将接收数据寄存器中的内容读出来char ch = USART4->RDR;return ch;
}char buf[128] = "";
//接收一个字符串函数
char *hal_get_string(){//循环//enter = 'r'int i = 0;for(i = 0; i < 128; i++){buf[i] = hal_get_char();hal_put_char(buf[i]);if(buf[i] == '\r'){break;}}buf[i] = '\0';hal_put_char('\n');return buf;
}//发送一个字符函数
void hal_put_char(const char str){//1.判断发送数据寄存器是否为空 ISR[7]//读0:发送数据寄存器满,需要等待//读1:发送数据寄存器为空,可以发送数据while(!(USART4->ISR & (0x1 << 7)));//2.将要发送的数据,赋值给发送数据寄存器中USART4->TDR = str;//判断一帧数据是否发送完成while(!(USART4->ISR & (0x1 << 6)));
}//发送一个字符串函数
void hal_put_string(const char *string){//判断是否为'\0'//一个一个字符进行发送就可以while(*string){hal_put_char(*string++);}
}

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){//hal_put_char(hal_get_char() + 1);  //输出字符的ASCII码后一个字符hal_put_string(hal_get_string());     //输出原样字符串}return 0;
}

结果1:

结果2: 

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

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

相关文章

excel条件格式:不同组对应位置对比标记

问题描述 下图中有两组数据&#xff0c;想要对比两个对应位置的数据并标记 条件格式 选中其中一个单元格&#xff0c;条件格式->新建规则 使用公式确定要设置格式的单元格&#xff0c;自定义需求 格式化剩余同样标准的单元格

QT中资源文件resourcefile的使用

QT中资源文件resourcefile的使用 之前添加图标的方法使用资源文件的方法创建资源文件资源文件添加前缀资源文件添加资源使用资源文件中的资源 在Qt中引入资源文件好处在于他能提高应用程序的部署效率并且减少一些错误的发生。 在程序编译过程中&#xff0c; 添加到资源文件中的…

安全学习DAY17_信息打点-语言框架组件识别

信息打点-WEB打点-语言框架&开发组件 文章目录 信息打点-WEB打点-语言框架&开发组件本节涉及链接&工具本节知识&思维导图基础概念介绍框架&#xff1a;组件&#xff1a;Web架构 对应Web测试手法后端&#xff1a;前端组件&#xff1a;java居多&#xff0c;框架&…

广州华锐互动:3D数字孪生开发编辑器助力企业高效开发数字孪生应用

3D数字孪生开发编辑器是一种新兴的技术&#xff0c;它可以帮助企业更好地管理和维护其物联网设备。这些工具可以帮助企业实现对设备的实时监控、故障排除和优化&#xff0c;从而提高生产效率和降低成本。 数字孪生系统是一种将物理世界与数字世界相结合的技术&#xff0c;它可以…

点亮一颗LED灯

TOC LED0 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能APB2的外设时钟GPIO_InitTypeDef GPIO_Initstructure;GPIO_Initstructure.GPIO_Mode GPIO_Mode_Out_PP;//通用推挽输出GPIO_Initstructure.GPIO_Pin GPIO_Pin_5;GPIO_Initstructure.GPIO_Speed GPIO_S…

Midjourney API 申请及使用

在人工智能绘图领域&#xff0c;想必大家听说过 Midjourney 的大名吧&#xff01; Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作&#xff0c;只要简单输入绘图指令&#xff0c;这个神奇的工具就能在瞬间为我们呈现出对应的图像。无论是任何物体还是任何风…

Java请求Http接口-OkHttp(超详细-附带工具类)

简介&#xff1a;OkHttp是一个默认有效的HTTP客户端&#xff0c;有效地执行HTTP可以加快您的负载并节省带宽&#xff0c;如果您的服务有多个IP地址&#xff0c;如果第一次连接失败&#xff0c;OkHttp将尝试备用地址。这对于IPv4 IPv6和冗余数据中心中托管的服务是必需的。OkHt…

LVS 负载均衡集群

集群 集群&#xff08;Cluster&#xff09;是一组相互连接的计算机或服务器&#xff0c;它们通过网络一起工作以完成共同的任务或提供服务。集群的目标是通过将多台计算机协同工作&#xff0c;提高计算能力、可用性、性能和可伸缩性&#xff0c;适用于大量高并发的场景。 集群…

【HBZ分享】java中的BitSet 与 Redis中的BitMap 与 布隆过滤器

BitMap的存储原理 bitMap他会标识出某个整数是否存在&#xff0c;存在即为1&#xff0c;不存在对应位即为0bitMap是存储int类型的&#xff0c;int 4byte&#xff0c; 1byte 8bit&#xff0c;因此bitMap数组中的每个下标可以标识出32个数字是否存在bitMap相当于一个个小格子&…

马哈鱼数据血缘工具背后的项目: gsp_demo_java 项目简单介绍与使用

0.背景 马哈鱼数据血缘工具(https://www.sqlflow.cn/)是SQLflow工具的中文译名,实际就是sqlflow. 对于SQL flow来说,底层调用的是General SQL Parser(GSP https://sqlparser.com) 的库. 这个gsp有开源的java demo项目:https://github.com/sqlparser/gsp_demo_java 1.快速使用…

第6章:支持向量机

间隔与支持向量 w为法向量&#xff0c;决定的是超平面的方向。b是偏移项&#xff0c;决定了超平面与原点之间的距离。 为什么最大化间隔&#xff0c;得到的就是最优平面呢&#xff1f; 当超平面没有正确划分正负样本时&#xff0c;几何间隔为负数。几何间隔&#xff0c;各个…

网络编程基础(1)

目录 网络编程解决是跨主机的进程间通讯 1、网络 2、互联网 3、ip地址 &#xff08;1&#xff09;ipv4: &#xff08;2&#xff09;ipV6:1 &#xff08;3&#xff09;IP地址的组成&#xff1a; (4)Linux查看IP地址&#xff1a;ifconfig 4、mac地址 5、ping Ip地址 6…

VisualVM(All-in-One Java Troubleshooting Tool)多合-故障处理工具

VisualVM&#xff1a;多合-故障处理工具 VisualVM&#xff08;All-in-One Java Troubleshooting Tool&#xff09;是功能最强大的 运行监视 和 故障处理 程序之一&#xff0c;曾经在很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具。Oracle曾在VisualVM的软件说明中写…

数据结构--最短路径 Floyd算法

数据结构–最短路径 Floyd算法 F l o y d 算法&#xff1a;求出每⼀对顶点之间的最短路径 \color{red}Floyd算法&#xff1a;求出每⼀对顶点之间的最短路径 Floyd算法&#xff1a;求出每⼀对顶点之间的最短路径 使⽤动态规划思想&#xff0c;将问题的求解分为多个阶段 对于n个顶…

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库 0、背景1、基本环境2、搭建交叉编译环境3、在交叉编译服务器上交叉编译安装unixODBC3.1 下载unixODBC3.2 交叉编译unixODBC3.2.1 基本编译说明3.2.2 交叉编译说明3.2.3 ./configure -build,-host,-target…

不知道开黑语音哪个软件好?

黑盒语音官方网站&#xff1a;https://chat.top 免费支持AI降噪免费支持高品质立体声免费支持码率128Kbps,192Kbps免费支持上传100M文件免费支持动态房间头像和横幅支持更多自定义动态表情即将支持更多免费功能

IP 地址监控工具

地址监控实用程序是一套 IP 工具&#xff0c;包括 IP 地址监控工具、流氓检测工具和 MAC 地址解析器&#xff0c;用于日常监控和管理 DNS 名称、IP和 MAC 地址。地址监控工具用于 IP监控&#xff0c;用于管理 DNS 名称、网络的 IP 和 MAC 地址&#xff0c;并跟踪 IP 地址。 IP…

JavaScript中的this关键字的作用,以及它如何确定其值

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ this关键字的作用⭐ this的值取决于执行上下文⭐ 示例⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这…

MySQL数据库第十四课--------sql优化---------层层递进

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

极光笔记 | 如何为您的业务开发和训练一个AI-BOT

生成式AI&#xff08;Generative AI&#xff09;是当今科技领域的前沿技术之一。随着数据量的不断增加和计算能力的不断提升&#xff0c;AI技术在企业和个人生活中的应用越来越广泛。AI-BOT&#xff08;以下简称BOT&#xff09;是生成式AI技术的其中一种重要的应用形式&#xf…