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"//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] = 0USART4->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 = 0X22bUSART4->BRR &= (~(0xffff));USART4->BRR |= (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]while(!(USART4->ISR & (0x1 << 6)));
}//发送一个字符串
void hal_put_string(const char* string)
{//判断字符串是否为'\0'int i=0;while(string[i] != '\0'){//一个字符一个字符进行发送hal_put_char(string[i]);i++;}
}//接收一个字符
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()
{for(int i=0;buffer[i]!='\0'; i++){buffer[i]='\0';}//判断键盘enter是否按下'\r'int i = 0;char ch;while(1){ch = hal_get_char();hal_put_char(ch);buffer[i] = ch;i++;if(ch == '\r'){hal_put_char('\n'); break; }}buffer[i] = '\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(); 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)uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h&quo…...
asp.net C#免费反编译工具ILSpy
在维护一个没有源码的C#项目,只能反编译了。 项目主页 https://github.com/icsharpcode/ILSpy 使用方法 中文界面使用简单,把你要反编译的dll拖过去就可以了。好使!!!...
演讲实录:DataFun 垂直开发者社区基于指标平台自主洞察北极星指标
在7月14日举办的 Kyligence 用户大会的数智新应用论坛上,DataFun COO 杜颖女士为大家带来了《垂直开发者社区基于指标平台自主洞察北极星指标》的主题演讲。接下来,我们一起看看 DataFun 如何在没有专门的 IT 团队的情况下,实现对北极星指标的…...
ffmpeg编译 Error: operand type mismatch for `shr‘
错误如下: D:\msys2\tmp\ccUxvBjQ.s: Assembler messages: D:\msys2\tmp\ccUxvBjQ.s:345: Error: operand type mismatch for shr D:\msys2\tmp\ccUxvBjQ.s:410: Error: operand type mismatch for shr D:\msys2\tmp\ccUxvBjQ.s:470: Error: operand type mismatch…...
【Windows Server 2012 R2搭建FTP站点】
打开服务器管理器——添加角色和功能 下一步 下一步 下一步 选择FTP服务器,勾上FTP服务和FTP扩展,点击下一步 安装 安装完成关闭 打开我们的IIS服务器 在WIN-XXX主页可以看到我们的FTP相关菜单 右键WIN-XXXX主页,添加FTP站点 输入站点名称-FT…...
python教程:使用gevent实现高并发并限制最大并发数
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 import time import gevent from gevent.pool import Pool from gevent import monkey # 一,定义最大并发数 p Pool(20) # 二,导入gevent…...
借助reCAPTCHA实现JavaScript验证码功能
前言 验证码(CAPTCHA)是一种常见的安全验证机制,常用于区分真实用户和机器人。使用验证码可以有效防止恶意登录、自动注册或者密码爆破等攻击。本文将借助reCAPTCHA第三方库来实现JavaScript验证码功能。 验证码的原理 验证码的核心思想是要…...
监控数据的采集方式及原理
采集方法使用频率从高到低依次是读取 /proc目录、执行命令行工具、远程黑盒探测、拉取特定协议的数据、连接到目标对象执行命令、代码埋点、日志解析。 读取 /proc目录 /proc是一个位于内存中的伪文件系统,而在该目录下保存的不是真正的文件和目录,而是…...
Vue路由与node.js环境搭建
目录 前言 一.Vue路由 1.什么是spa 1.1简介 1.2 spa的特点 1.3 spa的优势以及未来的挑战 2.路由的使用 2.1 导入JS依赖 2.2 定义两个组件 2.3 定义组件与路径对应关系 2.4 通过路由关系获取路由对象 2.5 将对象挂载到vue实例中 2.6 定义触发路由事件的按钮 2.7 定…...
腾讯云16核服务器性能测评_轻量和CVM配置大全
腾讯云16核服务器配置大全,CVM云服务器可选择标准型S6、标准型SA3、计算型C6或标准型S5等,目前标准型S5云服务器有优惠活动,性价比高,计算型C6云服务器16核性能更高,轻量16核32G28M带宽优惠价3468元15个月,…...
Postman应用——下载注册和登录
文章目录 下载安装注册登录注册账号登录账号 下载安装 Postman下载:https://www.postman.com/ 访问链接后,进入首页,根据自己的操作系统下载对应的版本。 找到下载到的目录直接双击.exe文件,会默认安装在C盘,安装完会…...
uni-app混合开发 navigateTo、reLaunch、redirectTo、switchTab区别
1.navigateTo 保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。 要注意的是navigateTo只能跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数;如果跳转url参数为tabBar的路径则无法进行跳转 2.redir…...
专业软件测评中心:关于软件性能测试的实用建议
软件性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。 一、软件性能测试的实用建议 1、制定清晰的测试目标:明确测试目标…...
vue项目通过json-bigint在前端处理java雪花id过长导致失去精度问题
这里 我简单模仿了一个接口 这里 我单纯 返回一个long类型的雪花id 然后 前端 用 axios 去请求 大家知道 axios 会对请求数据做一次处理 而我们 data才是拿到我们java这边实际返回的东西 简单说 就是输出一下我们后端返回 的内容 这里 我们网络中显示的是 35866101868095488…...
【全志V3s】SPI NAND Flash 驱动开发
文章目录 一、硬件介绍V3s的启动顺序 二、驱动支持U-Boot驱动主线 Linux 驱动已经支持 三、烧录工具 xfel四、构建U-Boot(官方的Uboot)先编译一下开始spi nand flash 代码层面的适配修改menuconfig配置ARM architecture配置Support for SPI Nand Flash o…...
【二叉树】二叉树展开为链表-力扣 114 题
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...
NLP文本生成全解析:从传统方法到预训练完整介绍
目录 1. 引言1.1 文本生成的定义和作用1.2 自然语言处理技术在文本生成领域的使用 2 传统方法 - 基于统计的方法2.1.1 N-gram模型2.1.2 平滑技术 3. 传统方法 - 基于模板的生成3.1 定义与特点3.2 动态模板 4. 神经网络方法 - 长短时记忆网络(LSTM)LSTM的核心概念PyTorch中的LST…...
OpenBA:开源模型家族再添一员!从头训练的15B中英非对称Encoder-Decoder结构双语模型...
苏州大学从头训练的双语非对称Encoder-Decoder模型OpenBA已正式开源! 主要亮点包括: 亮点一:此模型为中文开源社区贡献了一个有代表性的编码器解码器大语言模型,其训练过程(包括数据收集与清洗、模型构建与训练&#x…...
安防视频监控平台EasyNVR无法控制云台,该如何解决?
TSINGSEE青犀视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。在智慧安防等视频监控场景中,EasyNVR可提供视频实时监控直播、云端…...
基座向量施密特正交化
最近再次细细的阅读了向量施密特正交化,重新系统梳理一下 一、正交基地与向量的正交分解 二、基化成标准正交基,是什么意思 将一个向量空间中的基向量通过某种方式转化为一组标准正交基,是指将原有的基向量进行调整,使得它们满足…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

