【ARM】Day6 cotex-A7核UART总线实验
cotex-A7核UART总线实验
1. 键盘输入一个字符‘a’,串口工具显示‘b’
2. 键盘输入一个字符串"nihao",串口工具显示“nihao”
uart.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
uart.c
#include "uart4.h"
extern void delay_ms(int ms);
//RCC/GPIO/UART4章节初始化void hal_uart4_init()
{
//RCC章节初始化://1. 使能GPIOB组控制器,MP_AHB4ENSETR[1] = 1//2. 使能GPIOG组控制器,MP_AHB4ENSETR[6] = 1//3. 使能UART4组控制器,MP_APB1ENSETR[16] = 1RCC->MP_AHB4ENSETR |= (0x1<<1); //GPIOB使能RCC->MP_AHB4ENSETR |= (0x1<<6); //GPIOG使能RCC->MP_APB1ENSETR |= (0x1<<16); //UART4使能//GPIO章节初始化: //1.设置PB2引脚为复用功能 MODER[5:4] = 10//2.设置PB2复用功能为UART4_RX, AFRL[11:8]=1000 GPIOB->MODER &= (~(0x3<<4)) ; //复用GPIOB->MODER |= (0x1<<5);GPIOB->AFRL &= (~(0xf<<8));GPIOB->AFRL |= (0x1<<11);//1.设置PG11引脚为复用功能 MODER[23:22] = 10 //2.设置PG11复用功能为UART4_TX.AFRH[15:12]=0110GPIOG->MODER &= (~(0x3<<22));GPIOG->MODER |= (0X1<<23);GPIOG->AFRH &= (~(0xf<<12));GPIOG->AFRH |= (0x3<<13);//UART4章节初始化:8N1 115200 使能//0.设置UE=0, CR1[1] = 0if(USART4->CR1 & (0x1)){delay_ms(1000);USART4->CR1 &= (~0x1);}//1.设置UART4串口1位起始位,8位数据位 CR1[28][12] = 00USART4->CR1 &= (~(0x1<<28));USART4->CR1 &= (~(0x1<<12));//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 = 0x22BUSART4->BRR |= 0x22B;//7.设置UART4串口发送器使能 CR1[3] = 1USART4->CR1 |= (0x1<<3);//8.设置UART4串口接收器使能 CR1[2] =1USART4->CR1 |= (0x1<<2);//9.设置UART4串口使能 CR1[0] = 1USART4->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] = 1while(!(USART4->ISR & (0x1<<6)));
}void hal_put_string(const char* string) //发送一个字符串
{//判断是否为'\0',字符串结束标志//一个一个字符进行发送while(*string){hal_put_char(*string++);}hal_put_char('\n'); //换行hal_put_char('\r'); //回到行首
}char hal_get_char() //接收一个字符
{//判断接收数据寄存器中,是否接收到数据 ISR[5]=1,接收到数据,可以读while(!(USART4->ISR & (0x1<<5)));//将接收数据寄存器中内容,读出来return USART4->RDR;
}char buf[50]={0};
char* hal_get_string() //接收一个字符串
{int i;for(i=0;i<49;i++){buf[i]=hal_get_char(); //接收一个字符hal_put_char(buf[i]); //发送一个字符,回显到串口工具if(buf[i] == '\r') //当enter按键按下时{break;}}buf[i] = '\0';hal_put_char('\n');return buf;
}
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(); //初始化while(1){//hal_put_char(hal_get_char()+1);hal_put_string(hal_get_string());}return 0;
}
运行结果1:

运行结果2:

相关文章:
【ARM】Day6 cotex-A7核UART总线实验
cotex-A7核UART总线实验 1. 键盘输入一个字符‘a’,串口工具显示‘b’ 2. 键盘输入一个字符串"nihao",串口工具显示“nihao” uart.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_rcc.h" #include "stm3…...
HTTPS代理搭建技巧分享
今天我们来分享一下如何搭建一个能够实现中间人 检测和防护的HTTPS代理。保护我们的网络通信安全是至关重要的,让我们一起学习如何构建一个安全可靠的HTTPS代理吧! 什么是中间人 ? 首先,让我们来了解一下什么是中间人 。中间人 是…...
第四章:树形结构的关联式容器(map+set)
系列文章目录 文章目录 系列文章目录前言1、关联式容器与序列式容器1.1 键值对 2、set的介绍3、multiset的介绍3.1 接口count与容器multiset 4、map的介绍4.1 接口insert4.2 operator[]和at 5、multimap的介绍 前言 根据应用场景的不桶,STL总共实现了两种不同结构的…...
SpringBoot +Vue3 简单的前后端交互
前端:Vue3 创建项目: npm create vuelatest > cd <your-project-name> > npm install > npm run dev 项目结构图如下: 1、查看入口文件内容:main.js 代码如下: import ./assets/main.css impor…...
【Android】Mobile-Security-Framework-MobSF Manifest 静态扫描规则
前言 移动安全框架(MobSF)是一个自动化的一体化移动应用程序(Android/iOS/Windows)测试、恶意软件分析和安全评估框架,能够执行静态和动态分析。MobSF支持移动应用程序二进制文件(APK、XAPK、IPA和APPX&am…...
【C++】初谈迭代器
文章目录 前言一、什么是迭代器二、迭代器的分类三、迭代器的用法总结 前言 迭代器是一种可以访问和遍历容器中元素的对象,它类似于指针,但是具有更多的功能和灵活性。本文将介绍C迭代器的基本概念、分类、用法和注意事项。 一、什么是迭代器 迭代器&a…...
PL端案例开发手册
目 录 前 言 1 工程编译、程序加载方法 1.1 工程编译 1.2 程序加载 2 led-flash 2.1 案例说明 2.2 操作说明 2.3 关键代码 更多帮助 前 言 本文主要介绍PL端案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Unified 20…...
华为OD-整数对最小和
题目描述 给定两个整数数组array1、array2,数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值 代码实现 # coding:utf-8 class Solution:…...
Ubuntu 22LTS 配置静态IP
可行方法,需界面配置 转载自:哔哩哔哩链接地址 命令行配置:待补充...
【Python】Python爬虫:网络数据的提取利器
随着互联网的快速发展,网络数据已经成为了一项重要的资源。如何从海量的网络数据中提取出我们需要的信息,就成为了各个行业都需要解决的问题。而Python爬虫,就是解决这个问题的利器。 首先,让我们了解一下什么是Python爬虫。Pyth…...
20.图的遍历
目录 一. 深度优先遍历 二. 广度优先遍历 图的遍历算法和二叉树不同的是,图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。为了避免重复访问,我们的解决思…...
ARM DIY(一)电源、SD卡座、SOC 调试
文章目录 前言加热台焊接热风枪吹焊电烙铁补焊电源调试SD 卡座调试DRAM 电路调试串口电路调试SOC 调试成品 前言 之前打样的几块 ARM 板,一直放着没去焊接。今天再次看到,决定把它焊起来。 加热台焊接 为了提高焊接效率,先使用加热台焊接…...
数学建模知识之小白入门篇
数学建模知识--小白入门篇 一、数学模型的定义二、建立数学模型的方法和步骤1. 模型准备2. 模型假设3. 模型构成4. 模型求解5. 模型分析 三、数模竞赛出题的指导思想四、竞赛中的常见题型1. 实际问题背景2.若干假设条件3.要求回答的问题 五、提交一篇论文…...
【日常积累】Linux下ftp服务安装
概述 FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中,具有容易搭建、方…...
确定了,TikTok将于9月12日正式关闭美国半闭环
外媒报道称,TikTok已对其官网的常见问题页面进行了更新。消息显示,其在美国和英国市场运营的半封闭模式将于9月12日正式结束,并将全力推进TikTok闭环小店业务。尽管我们早在本月初就获悉了这一消息,但实际得知后仍不免有些感慨。曾…...
ATFX汇评:英国7月零售销售年率大降,GBPUSD仍未升破1.3000
ATFX汇评:7月季调后零售销售年率,最新值-3.2%,前值-1.6%,降幅扩大;7月季调后核心零售销售年率,最新值-3.4%,前值-1.6%,降幅扩大。零售销售综合衡量除服务业外包括所有主要从事零售业…...
CTFhub-sqli注入-Referer注入
在最后添加 Referer: (注意 R 大写, Referer后面是 :,Content-Length: 与 Referer: 之间没有空行) 1 2 3 1 union select 1,database() -1 union select 1,database() -1 union select 1,group_concat(table_name)from information_sche…...
【案例】登录注册
<template><div class"loginhome"><Header :butShow"butShow"></Header><div class"formdiv"><div style"text-align:center;padding:10px;"><h3>你好登录账号{{ stauts 3? 注册:登录 }}…...
Unity 物体的运动之跟随鼠标
你想让鼠标点击哪里,你的运动的对象就运动到哪里吗? Please follow me ! 首先,你要先添加一个Plane ,以及你的围墙,你的移动的物体 想要实现跟随鼠标移动,我们先创建一个脚本 using System.Collections; using Syst…...
C++基础Ⅱ变量
目录儿 4 变量4.1 原始数据类型字符 char整型 short整型 int整型 long整型 long long单精度浮点型 float双精度浮点型 double布尔型 bool 4.2 sizeof 关键字 5 指针和引用 4 变量 4.1 原始数据类型 原始数据类型是构建C程序的最基础数据类型 所有数据都是基于这些原始数据类型…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
