当前位置: 首页 > news >正文

C语言 cortex-A7核 UART总线 实验

一、C

1)uart4.h

#ifndef __UART4_H__                       
#define __UART4_H__                       #include "stm32mp1xx_rcc.h"               
#include "stm32mp1xx_gpio.h"              
#include "stm32mp1xx_uart.h"              //PB2 ---> UART4_RX                       
//PG11 ---> UART4_TX                      //RCC/GPIO/UART4章节初始化                
void hal_uart4_init();                    
//发送一个字符                            
void hal_put_char(const char ch);         
//发送一个字符串                          
void hal_put_string(const char* string);  
//接收一个字符                            
char hal_get_char();                      
//接收一个字符串                          
char* hal_get_string();                   #endif

2)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  0x50000A28[1]RCC->MP_AHB4ENSETR |= (0X1 << 1);//2.使能GPIOG组控制器  MP_AHB4ENSETR[6] = 1  0x50000a28[6]RCC->MP_AHB4ENSETR |= (0X1 << 6);//3.使能UART4组控制器  MP_AHB4ENSETR[11] = 1 PB2 PG11---> 0x500000A00[16] RCC->MP_APB1ENSETR |= (0X1 << 16);//GPIO章节初始化//1.设置PB2引脚为复用功能模式 MODER[5:4] = 10GPIOB->MODER &= (~(0x1 << 4));GPIOB->MODER |= (0x1 << 5);//2.设置PB2引脚复用功能为UART4_RX功能 AFRL[11:8] = 1000GPIOB->AFRL &= (~(0xf << 8));GPIOB->AFRL |= (0x1 << 11);//设置PG11引脚为复用功能模式 MODER[23:22] = 10GPIOG->MODER &= (~(0x1 << 22));GPIOG->MODER |= (0x1 << 23);//设置PG11引脚复用功能为UART4_TX功能 AFRH[15:12] = 0110GPIOG->AFRH &= (~(0xf << 12));GPIOG->AFRH |= (0x6 << 12);//UART4章节初始化//8N1 115200 使能位 代码编写逻辑//0.设置串口UE=0 CR1[0] = 0if(USART4->CR1 & (0x1 << 0)){delay_ms(500);USART4->CR1 &= (~(0x1 << 0));}//1.设置1位起始位,8位数据位 CR1[28][12] = 00USART4->CR1 &= (~(0x1 << 12));USART4->CR1 &= (~(0x1 << 28));//2.设置串口1位停止位 CR2[13:12] = 00USART4->CR2 &= (~(0x3 << 12));//3.设置串口无校验位 CR1[10] = 0USART4->CR1 &= (~(0x1 << 10));//4.设置串口16倍采样率 CR1[15] = 0USART4->CR1 &= (~(0x1 << 15));//5.设置串口不分频 PRESC[3:0] = 0000USART4->PRESC &= (~(0xf << 0));//6.设置串口波特率为115200 BRR = 0X22b//USART4->BRR &= (~(0xffff)); //可以不清零USART4->BRR |= (0x22b); //直接置0x22b // |= :按位赋值,  =  直接赋值//7.设置串口发送位使能 CR1[3] = 1USART4->CR1 |= (0x1 << 3);//8.设置串口接受位使能 CR1[2] = 1USART4->CR1 |= (0x1 << 2);//9.设置串口使能 CR1[0] = 1USART4->CR1 |= (0x1 << 0);
}
//发送一个字符
void hal_put_char(const char ch)
{//1.判断发送数据寄存器是否为空 ISR[7]//读0:发送数据寄存器满,需要等待 for while//读1:发送数据寄存器空,可以发送数据while(!(USART4->ISR & (0X1 << 7)));//2.将参数ch传递过来的内容,赋值给TDR寄存器USART4->TDR = (volatile unsigned int)ch;	//3.判断一帧数据是否发送完成 ISR[6]//读0:一帧数据没有发送完成,需要等待 for while//读1:一帧数据发送完成,可以发送下一帧数据while(!(USART4->ISR & (0x1 << 6)));
}//发送一个字符串
void hal_put_string(const char* string)
{//判断字符串是否为\0while(*string){//一个字符一个字符进行发送hal_put_char(*string++);}hal_put_char('\r');hal_put_char('\n');
}//接收一个字符
char hal_get_char()
{char ch;//1.判断接收数据寄存器是否不为空 ISR[5]//读0:没有接收到数据,需要等待 for while//读1:接收到数据,可以将数据读出while(!(USART4->ISR & (0x1 << 5)));//2.将接收数据寄存器中RDR,读出来ch = (char)USART4->RDR;return ch;
}char buffer[50] = {0};
//接收一个字符串
char* hal_get_string()
{int i=0;for(i=0;i<49;i++){buffer[i] = hal_get_char(); //开发板接收一个字符hal_put_char(buffer[i]); 	//发送一个字符显示串口工具if(buffer[i] == '\r')break;}buffer[i] = '\0';hal_put_char('\n');return buffer;
}

3)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();hal_put_string("hello");while(1){//单个字符//hal_put_char(hal_get_char() + 1);//字符串hal_put_string(hal_get_string());}return 0;
}

4)效果

实验一:收发字符

实验二:收发字符串

二、函数实现

1)uart4.h

2)uart.c

3)main.c

4)效果

实验一:收发字符

实验二:收发字符串

相关文章:

C语言 cortex-A7核 UART总线 实验

一、C 1&#xff09;uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h&quo…...

不同走向地下管线的地质雷达响应特征分析

不同走向地下管线的地质雷达响应特征分析 前言 以PVC管线为例&#xff0c;建立不同走向&#xff08;水平倾斜、垂直倾斜、水平相邻&#xff09;的三维管线地质模型&#xff0c;进行三维地质雷达数据模拟&#xff0c;分析不同走向地下管线的地质雷达响应特征。 文章目录 不同…...

Nginx负载均衡详解

一、负载均衡介绍 1、负载均衡的定义 单体服务器解决不了并发量大的请求&#xff0c;所以&#xff0c;我们可以横向增加服务器的数量&#xff08;集群&#xff09;&#xff0c;然后将请求分发到各个服务器上&#xff0c;将原先请求集中到单个服务器上的情况改为将请求分发到多…...

基于Spring Boot的宠物咖啡馆平台的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 看护师信息管理 宠物寄养管理 健康状况管理 点单 宠物体验 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已…...

TYVJ P1026 犁田机器人

描述 Farmer John為了让自己从无穷无尽的犁田工作中解放出来&#xff0c;於是买了个新机器人帮助他犁田。这个机器人可以完成犁田的任务&#xff0c;可惜有一个小小的缺点&#xff1a;这个犁田机器人一次只能犁一个边的长度是整数的长方形的田地。 因為FJ的田地有树和其他障碍…...

软件测试面试经验分享,真实面试题

前言 本人普通本科计算机专业&#xff0c;做测试也有3年的时间了&#xff0c;讲下我的经历&#xff0c;我刚毕业就进了一个小自研薪资还不错&#xff0c;有10.5k&#xff08;个人觉得我很优秀&#xff09;&#xff0c;在里面呆了两年&#xff0c;积累了一些的经验和技能&#…...

计算机网络 - 链路层

计算机网络 - 链路层 计算机网络 - 链路层 基本问题 1. 封装成帧2. 透明传输3. 差错检测 信道分类 1. 广播信道2. 点对点信道 信道复用技术 1. 频分复用2. 时分复用3. 统计时分复用4. 波分复用5. 码分复用 CSMA/CD 协议PPP 协议MAC 地址局域网以太网交换机虚拟局域网 基本问题…...

5.wifi开发【智能家居:上】,开发准备:智能开关灯,智能采集温湿,智能调彩灯

一。wifi智能家居项目开发 【开发准备1】&#xff1a;继电器控制开发 1.智能开关 器件准备&#xff1a;wifi&#xff08;esp8266&#xff0c;使用CP2102&#xff09;继电器 结果&#xff1a; 2.继电器工作原理 &#xff08;1&#xff09;继电器是一种自动电气开关 &#xff…...

26523-2022 精制硫酸钴 随笔练习

声明 本文是学习GB-T 26523-2022 精制硫酸钴. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了精制硫酸钴的要求、试验方法、检验规则、标志、标签、包装、运输和贮存。 本文件适用于精制硫酸钴。 注&#xff1a;该产品主要用于…...

企业该如何选择数字化转型工具?_光点科技

随着科技的不断进步和数字化的浪潮席卷全球&#xff0c;企业数字化转型已经成为了保持竞争力和持续增长的关键因素之一。无论企业规模大小&#xff0c;数字化转型都可以提高效率、降低成本、改善客户体验&#xff0c;从而实现更好的业务结果。然而&#xff0c;要成功进行数字化…...

算法与数据结构-Trie树

文章目录 什么是“Trie 树”&#xff1f;如何实现一棵 Trie 树&#xff1f;Trie 树真的很耗内存吗&#xff1f;Trie 树与散列表、红黑树的比较 什么是“Trie 树”&#xff1f; Trie 树&#xff0c;也叫“字典树”。顾名思义&#xff0c;它是一个树形结构。它是一种专门处理字符…...

语音助手开发小记(2023.9.25)

通道问题 在使用函数swr_alloc_set_opts给SwrContext传递输入输出的音频参数时&#xff0c;需要设置通道&#xff0c;这里通道为2&#xff0c;但是通道布局不能传递2.比如AV_CH_LAYOUT_STEREO 实际值为3 如果要计算通道布局的通道数使用函数av_get_channel_layout_nb_channels…...

FastestDet---模型训练

代码:https://github.com/dog-qiuqiu/FastestDet 一、构造数据集 数据集格式YOLO相同,每张图片对应一个txt标签文件。标签格式:“category cx cy wh”,category为类别id,cx, cy为归一化标签框中心点的坐标,w, h为归一化标签框的宽度和高度, .txt标签文件内容示例如下: 0…...

基于SpringBoot的医院管理系统

目录 前言 一、技术栈 二、系统功能介绍 病床信息管理 药房信息管理 个人中心管理 药房信息 病床类别 科室信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展&#xff0c;医院也在创建着属于自己的管理系统。本文介…...

java图片转pdf ,pdf 导出

pom引入jar <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.0-RC2</version></dependency> 转pdf方法 /*** 使用pdfbox将jpg转成pdf** throws IOException IOException*/pu…...

掌握Go的运行时:从编译到执行

目录 一、Go运行编译简介Go语言的目标和设计哲学运行时环境编译过程小结 二、执行环境操作系统与硬件层系统调用&#xff08;Syscalls&#xff09;虚拟内存 Go运行时&#xff08;Runtime&#xff09;Goroutine调度器内存管理和垃圾收集网络I/O代码示例&#xff1a;Go运行时调度…...

打造香港最安全便捷的银行,众安银行发布首份技术白皮书

作者&#xff1a;林海宾&李龙 作为香港金融科技的代表&#xff0c;香港虚拟银行通过科技驱动&#xff0c;为客户提供了安全、便捷、普惠的金融服务。在八间持牌的虚拟银行中&#xff0c;众安银行目前在用户数量、存款、资产和收入规模上均处于领先水平。最快120秒线上开户…...

Spring实现简单的Bean容器

1.BeanDefinition&#xff0c;用于定义 Bean 实例化信息&#xff0c;现在的实现是以一个 Object 存放对象 public class BeanDefinition {/*** bean对象*/private Object bean;/*** 存放 &#xff08;定义&#xff09;Bean 对象*/public BeanDefinition(Object bean) {this.bea…...

Python15题day13

③continue的好处 break是跳出循环体&#xff0c;continue是跳过continue语句后面的代码块&#xff0c;循环并不停止 题目要求: 使用input函数接受用户的输入&#xff0c;如果用户输入的数值小于等于10&#xff0c;则判断是奇数还是偶数如果数值大于10&#xff0c;则输出“输入…...

聊聊并发编程——多线程之AQS

目录 队列同步器&#xff08;AQS&#xff09; 独占锁示例 AQS之同步队列结构 解析AQS实现 队列同步器&#xff08;AQS&#xff09; 队列同步器AbstractQueuedSynchronizer&#xff08;以下简称同步器&#xff09;&#xff0c;是用来构建锁或者其他同步组 件的基础框架&…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...