ARM开发(cortex-A7核,UART总线实验)

1.目标:键盘输入一个字符'a',串口工具显示'b';

           键盘输入一个字符串"nihao",串口工具显示"nihao";

 

2.框图分析: 

 

 3.代码:

---.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
---.c功能实现文件---
#include "uart4.h"
extern void delay_ms(int ms);//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;GPIOB->AFRL &= (~(0x15 << 8));GPIOB->AFRL |= (0x1 << 11);//1设置PG11引脚为复用功能GPIOG->MODER &= (~(0x3 << 4));GPIOG->MODER |= (0x1 << 5);//2设置PG11引脚为复用功能为UART4_TXGPIOG->AFRH &= (~(0x15 << 12));GPIOG->AFRH |= (0x3 << 13);//UART4章节初始化//8N1 115200 使能//0 设置UE位为0x1if(USART4->CR1 & (0x1 << 0)){delay_ms(500);USART4->CR1 &= ~0x1;	}//1设置串口1位起始位 8位数据位USART4->CR1 &= ~(0x1 << 12);USART4->CR1 &= ~(0x1 << 28);//2设置串口16倍采样率USART4->CR1 &= ~(0x1 << 15);//3PRESC 串口分频初始化 //不分配,放在波特率前USART4->PRESC &= ~0x15;//4BRR 设置串口波特率USART4->BRR = 0x22B;//5设置串口无校验位USART4->CR1 &= ~(0x1 << 10);//6CR2 设置串口停止位USART4->CR2 &= ~(0x3 << 12);//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 判断一帧数据是否发送完成//读0:没完成,等待//读1:完成while(!(USART4->ISR & (0x1 << 6)));
}//发送一个字符串函数
void hal_put_string(const char* string)
{//判断是否为\0标志while(*string != '\0'){//一个一个字符发送hal_put_char(*string++);}hal_put_char('\n');hal_put_char('\r');
}//接收一个字符函数
char hal_get_char()
{//1判断接收数据寄存器 是否收到数据//读0:没有接收到数据//读1:接收到数据while(!(USART4->ISR & (0x1 << 5)));//将接收数据寄存器中的内容读出来char ch = USART4->RDR;return ch;
}char buf[128] = "";
//接收一个字符串函数
char* hal_get_string()
{int i = 0;char ch;//循环接收//enter = '\r' while((ch=hal_get_char()) != '\r'){buf[i] = ch;hal_put_char(buf[i]);i++;}buf[i] = '\0';hal_put_char('\n');hal_put_char('\r');return buf;
}
---.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() + 1);//字符串测试hal_put_string(hal_get_string());}return 0;
}
结果:
字符: 
字符串: 

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

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

相关文章

凉而不冷 柔而不弱 三菱重工海尔舒适风科技助您整夜安眠

古人云&#xff1a;安寝乃人生乐事。可随着夏天的到来&#xff0c;昼长夜短&#xff0c;家里的老人、儿童、父母都存在不同的入睡苦恼。对于儿童来说&#xff0c;空调温度调的太低容易踢被子着凉&#xff0c;温度调的高又怕孩子满头大汗&#xff1b;父母自身也会因为半夜帮孩子…

c++ day1

定义一个命名空间Myspace&#xff0c;包含以下函数&#xff1a;将一个字符串中的所有单词进行反转&#xff0c;并输出反转后的结果。例如&#xff0c;输入字符串为"Hello World"&#xff0c;输出结果为"olleH dlroW"&#xff0c;并在主函数内测试该函数。 …

电子器件系列46:气体放电管

C1566785_气体放电管(GDT)_B88069X5010S102_规格书_TDK气体放电管(GDT)规格书 气体放电管指作过电压保护用的避雷管或天线开关管一类&#xff0c;管内有二个或多个电极&#xff0c;充有一定量的惰性气体。气体放电管是一种间隙式的防雷保护元件&#xff0c;它用在通信系统的防雷…

2D应用开发是选择WebGL 还是选择Canvas?

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 在介绍WebGL和Canvas的区别和联系之前&#xff0c;需要先了解它们各自的定义和特点。 WebGL是一种基于标准HTML5的技术&#xff0c;用于在Web浏览器中实时渲染3D图形。它是由Khronos Group开发的一套…

Python Opencv实践 - 图像均值滤波

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape) pixel_count img.shape[0] * img.shape[1] print(pixel_count)#为图像添加椒盐噪声 #参考资料&#xf…

“卷王”新茶饮们:从风口,卷到了十字路口

【潮汐商业评论/原创】 “楼下奈雪开业了&#xff0c;扫码9块9就可以喝到杨枝甘露&#xff0c;这也太便宜了&#xff0c;”Chloe向同事说道。 “上次跟Fendi联名的喜茶&#xff0c;两杯也只要38元。” “喜茶奈雪开始向二线价格靠拢&#xff1f;怎么都那么便宜了&#xff1f…

人工智能的螺旋式发展历程

人工智能的螺旋式发展历程 人工智能的历史自1956年开始至今&#xff0c;已经有66年的历史。世界人工智能历史可分为三个阶段&#xff0c;从1956年至1976年是人工智能的第一个发展阶段&#xff0c;1976年至2006年是第二个发展阶段&#xff0c;而2006年至今则是人工智能的第三个发…

3 个 ChatGPT 插件您需要立即下载3 ChatGPT Extensions You need to Download Immediately

在16世纪&#xff0c;西班牙探险家皮萨罗带领约200名西班牙士兵和37匹马进入了印加帝国。尽管印加帝国的军队数量达到了数万&#xff0c;其中包括5,000名精锐步兵和3,000名弓箭手&#xff0c;他们装备有大刀、长矛和弓箭等传统武器。但皮萨罗的军队中有100名火枪手&#xff0c;…

SprintBoot Bean管理

SpringBoot中获取Bean对象 下面这段代码在测试类中进行&#xff0c;下面通过三种方式获取bean对象。 import org.springframework.context.ApplicationContext;// 注意一定要引入上面的依赖SpringBootTest class TliasWebManagementApplicationTests {Testvoid getBeanTest(){…

最新AI系统ChatGPT网站程序源码/搭建教程/支持GPT4.0/Dall-E2绘画/支持MJ以图生图/H5端/自定义训练知识库

一、正文 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…

python 基础篇 day 1 初识变量和数据类型

文章目录 变量变量作用——用于存储和表示数据。变量命名规则命名法大驼峰小驼峰下划体n j i a x 通常作为临时变量使用 建议 变量种类全局变量&#xff08;Global Variables&#xff09;局部变量&#xff08;Local Variables&#xff09;静态变量&#xff08;Static Variables…

数据可视化diff工具jsondiffpatch使用学习

1.jsondiffpatch 简介 jsondiffpatch 是一个用于比较和生成 JSON 数据差异的 JavaScript 库。它可以将两个 JSON 对象进行比较&#xff0c;并生成一个描述它们之间差异的 JSON 对象。这个差异对象可以用于多种用途&#xff0c;例如&#xff1a; 生成可视化的差异报告应用差异…

基于Three.js的WebXR渲染入门

1、Three.js 渲染管线快速概览 我不会花太多时间讨论 Three.JS 渲染管道的工作原理,因为它在互联网上有详细记录(例如,此链接)。 我将在下图中列出基础知识,以便更容易理解各个部分的去向。 2、WebXR 设备 API 入门 在我们深入了解 WebXR API 本身之前,您应该知道 WebX…

【前端vue升级】vue2+js+elementUI升级为vue3+ts+elementUI plus

一、工具的选择 近期想将vuejselementUI的项目升级为vue3tselementUI plus&#xff0c;以获得更好的开发体验&#xff0c;并且vue3也显著提高了性能&#xff0c;所以在此记录一下升级的过程对于一个正在使用的项目手工替换肯定不是个可实现的解决方案&#xff0c;更优方案是基于…

docker实践作业

1.安装docker服务&#xff0c;配置镜像加速器 2.下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 3.基于下载的镜像创建两个容器 &#xff08;容器名一个为自己名字全拼&#xff0c;一个为首名字字母&#xff09; 4.容器的启动、 停止及重启操作 5.怎么查看正在运行的容器…

【MySQL】好好学习一下InnoDB中的页

文章目录 一. 前言二. 从宏观层面看页三. 页的基本内容3.1 页的数据结构3.2 用户空间内的数据行结构3.3 页目录 四. 问题集4.1 索引 和 数据页 有什么区别4.2 页的大小是什么决定的4.3 页的大小对哪些情况有影响4.4 一般情况下说的链表有哪几个4.5 如果页的空间满了怎么办4.6 如…

SecureBridge安全文件下载的组件Crack

SecureBridge安全文件下载的组件Crack SecureBridge包括SSH、SSL和SFTP客户端和服务器组件。它使用SSH或SSL安全传输层协议和加密消息语法来保护任何TCP流量&#xff0c;这些协议为客户端和服务器提供身份验证、强数据加密和数据完整性验证。SecureBridge组件可以与数据访问组件…

一文学会lua脚本

文章目录 0.前言背景应用 1. 学习大纲1. 学习基本语法&#xff1a;2. 理解函数和模块&#xff1a;3. 深入数据结构&#xff1a;4. 高级特性和技巧&#xff1a;5. 实践项目&#xff1a; 2. Lua脚本2.1 学习基本语法2.2 理解函数和模块2.3 深入数据结构2.4 高级特性和技巧 3. 高级…

分类预测 | MATLAB实现NGO-DBN北方苍鹰优化深度置信网络多特征输入分类预测

分类预测 | MATLAB实现NGO-DBN北方苍鹰优化深度置信网络多特征输入分类预测 目录 分类预测 | MATLAB实现NGO-DBN北方苍鹰优化深度置信网络多特征输入分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现NGO-DBN北方苍鹰优化深度置信网络多特征输入…

Eclipse如何设置快捷键

在eclopse设置注释行和取消注释行 // 打开eclipse&#xff0c;依次打开&#xff1a;Window -> Preferences -> General -> Key&#xff0c;