ARM串口通信编程实验
完成:从终端输入选项,完成点灯关灯,打开风扇关闭风扇等操作
#include "gpio.h"
int main()
{char a;//char buf[128];uart4_config();gpio_config();while(1){//接收一个字符数据a = getchar();//发送接收的字符putchar(a);switch(a){case '1':{light1_on();}break;case '2':{light2_on();}break;case '3':{light3_on();}break;case '4':{fans_on();}break;case '0':{light_off();}break;}}return 0;
}
#include "gpio.h"void uart4_config(){//使能GPIOB\GPIOG\UART4外设时钟RCC->MP_AHB4ENSETR |= (0x1<<6); //gpioBRCC->MP_AHB4ENSETR |= (0x1<<1); //gpioGRCC->MP_APB4ENSETR |= (0x1<<16); //uart4//设置PB2、PG11用于UART4管脚复用GPIOB->MODER &=~(0x3<<4);GPIOB->MODER |= (0x2<<4);GPIOB->AFRL &=~(0xf<<8);GPIOB->AFRL |= (0x8<<8);GPIOG->MODER &= ~(0x3<<22);GPIOG->MODER |= (0x2<<22);GPIOG->AFRH &=~(0xf<<12);GPIOG->AFRH |= (0x6<<12);//设置串口禁用USART4->CR1 &= ~(0x1);//设置数据位宽为8位USART4->CR1 &=(~(0x1<<12));USART4->CR1 &=(~(0x1<<28));//设置无奇偶校验位USART4->CR1 &=(~(0x1<<10));//设置16倍过采样USART4->CR1 &=(~(0x1<<15));//设置1位停止位USART4->CR2 &=(~(0x3<<12));//设置不分频USART4->PRESC &= (~0xf);//设置波特率为115200USART4->BRR = 0x22B;//使能发送器USART4->CR1 |= (0x1<<3);//使能接收器USART4->CR1 |= (0x1<<2);//使能串口USART4->CR1 |= (0x1);}void putchar(char a)
{while(!(USART4->ISR &(0x1<<7)));USART4->TDR=a;while(!(USART4->ISR &(0x1<<6)));
}char getchar()
{char a;while(!(USART4->ISR &(0x1<<5)));a=USART4->RDR;return a;
}void puts(char *s)
{while(*s){putchar(*s);s++;}putchar('\r');putchar('\n');
}void gets(char *s)
{while(1){*s = getchar();putchar(*s);if(*s == 'r')break;s++;}*s = '\0';putchar('\n');
}void gpio_config()
{RCC_GPIO |=(0x3<<4);GPIOE->MODER &=(~(0x3<<20));GPIOE->MODER |=(0x1<<20);GPIOE->OTYPER &=(~(0x1<<10));GPIOE->OSPEEDR &=(~(0x3<<20));GPIOE->PUPDR &=(~(0x3<<20));GPIOF->MODER &=(~(0x3<<20));GPIOF->MODER |=(0x1<<20);GPIOF->OTYPER &=(~(0x1<<10));GPIOF->OSPEEDR &=(~(0x3<<20));GPIOF->PUPDR &=(~(0x3<<20));GPIOE->MODER &=(~(0x3<<16));GPIOE->MODER |=(0x1<<16);GPIOE->OTYPER &=(~(0x1<<8));GPIOE->OSPEEDR &=(~(0x3<<16));GPIOE->PUPDR &=(~(0x3<<16));GPIOE->MODER &=(~(0x3<<18));GPIOE->MODER |=(0x1<<18);GPIOE->OTYPER &=(~(0x1<<9));GPIOE->OSPEEDR &=(~(0x3<<18));GPIOE->PUPDR &=(~(0x3<<18));}void light1_on()
{GPIOE->ODR |= (0x1<<10);
}void light2_on()
{GPIOF->ODR |= (0x1<<10);
}void light3_on()
{GPIOE->ODR |= (0x1<<8);
}void fans_on()
{GPIOE->ODR |= (0x1<<9);
}void light_off()
{GPIOE->ODR &= (~(0x1<<10));GPIOF->ODR &= (~(0x1<<10));GPIOE->ODR &= (~(0x1<<8));GPIOE->ODR &= (~(0x1<<9));
}
#include "gpio.h"void uart4_config(){//使能GPIOB\GPIOG\UART4外设时钟RCC->MP_AHB4ENSETR |= (0x1<<6); //gpioBRCC->MP_AHB4ENSETR |= (0x1<<1); //gpioGRCC->MP_APB4ENSETR |= (0x1<<16); //uart4//设置PB2、PG11用于UART4管脚复用GPIOB->MODER &=~(0x3<<4);GPIOB->MODER |= (0x2<<4);GPIOB->AFRL &=~(0xf<<8);GPIOB->AFRL |= (0x8<<8);GPIOG->MODER &= ~(0x3<<22);GPIOG->MODER |= (0x2<<22);GPIOG->AFRH &=~(0xf<<12);GPIOG->AFRH |= (0x6<<12);//设置串口禁用USART4->CR1 &= ~(0x1);//设置数据位宽为8位USART4->CR1 &=(~(0x1<<12));USART4->CR1 &=(~(0x1<<28));//设置无奇偶校验位USART4->CR1 &=(~(0x1<<10));//设置16倍过采样USART4->CR1 &=(~(0x1<<15));//设置1位停止位USART4->CR2 &=(~(0x3<<12));//设置不分频USART4->PRESC &= (~0xf);//设置波特率为115200USART4->BRR = 0x22B;//使能发送器USART4->CR1 |= (0x1<<3);//使能接收器USART4->CR1 |= (0x1<<2);//使能串口USART4->CR1 |= (0x1);}void putchar(char a)
{while(!(USART4->ISR &(0x1<<7)));USART4->TDR=a;while(!(USART4->ISR &(0x1<<6)));
}char getchar()
{char a;while(!(USART4->ISR &(0x1<<5)));a=USART4->RDR;return a;
}void gpio_config()
{RCC_GPIO |=(0x3<<4);GPIOE->MODER &=(~(0x3<<20));GPIOE->MODER |=(0x1<<20);GPIOE->OTYPER &=(~(0x1<<10));GPIOE->OSPEEDR &=(~(0x3<<20));GPIOE->PUPDR &=(~(0x3<<20));GPIOF->MODER &=(~(0x3<<20));GPIOF->MODER |=(0x1<<20);GPIOF->OTYPER &=(~(0x1<<10));GPIOF->OSPEEDR &=(~(0x3<<20));GPIOF->PUPDR &=(~(0x3<<20));GPIOE->MODER &=(~(0x3<<16));GPIOE->MODER |=(0x1<<16);GPIOE->OTYPER &=(~(0x1<<8));GPIOE->OSPEEDR &=(~(0x3<<16));GPIOE->PUPDR &=(~(0x3<<16));GPIOE->MODER &=(~(0x3<<18));GPIOE->MODER |=(0x1<<18);GPIOE->OTYPER &=(~(0x1<<9));GPIOE->OSPEEDR &=(~(0x3<<18));GPIOE->PUPDR &=(~(0x3<<18));}void light1_on()
{GPIOE->ODR |= (0x1<<10);
}void light2_on()
{GPIOF->ODR |= (0x1<<10);
}void light3_on()
{GPIOE->ODR |= (0x1<<8);
}void fans_on()
{GPIOE->ODR |= (0x1<<9);
}void light_off()
{GPIOE->ODR &= (~(0x1<<10));GPIOF->ODR &= (~(0x1<<10));GPIOE->ODR &= (~(0x1<<8));GPIOE->ODR &= (~(0x1<<9));
}



相关文章:
ARM串口通信编程实验
完成:从终端输入选项,完成点灯关灯,打开风扇关闭风扇等操作 #include "gpio.h" int main() {char a;//char buf[128];uart4_config();gpio_config();while(1){//接收一个字符数据a getchar();//发送接收的字符putchar(a);switch(…...
MyBatis的延迟加载(懒加载)
MyBatis 中的延迟加载是指在需要时才加载对象的某些属性或关联对象,而不是在初始查询时就加载所有数据。这对于性能优化和减少不必要的数据库查询非常有用。 1. 基于配置文件的延迟加载 在 MyBatis 的 XML 映射文件中,你可以使用 lazyLoadingEnabled 和…...
嵌入式-stm32-用PWM点亮LED实现呼吸灯
一:知识前置 1.1、LED灯怎么才能亮? 答:LED需要低电平才能亮,高电平是灯灭。 1.2、LED灯为什么可以越来越亮,越来越暗? 答:这是用到不同占空比来实现的,控制LED实现呼吸灯&…...
C语言初学7:循环
while 循环 一、while 循环语法: while(condition) {statement(s); } condition 为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。 二、while 循环举例 #inc…...
力扣69. x 的平方根
二分查找 思路: 设置 left 指针为 0,right 指针为 x;如果 mid (right - left) / 2 left 的平方小于或等于 x,此时移动 left mid 1,并缓存当前 mid 值,可能这个 mid 就是结果,或者 x 的平方…...
go语言学习计划。
第1周:Go语言概述与环境搭建 内容:了解Go语言的历史、特点和应用场景。安装Go环境,配置工作区。实践:编写第一个Go程序,了解Go的编译运行流程。 第2周:基本语法与数据类型 内容:学习基本数据…...
设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用场景和优缺点。
系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用…...
docker run --help帮助文档
文章目录 基础环境docker run --helpdocker run --help中文翻译 基础环境 环境:ubuntu20.04 x64 使用apt install docker.io安装docker docker版本: rootky:/userdata/testOnebuttonDeploy/shsany_ai/kyai_arm_ubuntu# docker -v Docker version 24.0…...
【Qt-Timer】
Qt编程指南 ■ QTimeEvent■ Qtimer■ QDateTimeEdit■ QDateTime■■ ■ QTimeEvent 1.启动定时器 定时器ID startTimer (时间间隔); int idt startTimer (250); 每隔指定的时间间隔,触发一次定时器事件。 2.定时器事件处理 virtual void timerEvent (QTimeEvent…...
Java多线程技术五——单例模式与多线程-备份
1 概述 本章的知识点非常重要。在单例模式与多线程技术相结合的过程中,我们能发现很多以前从未考虑过的问题。这些不良的程序设计如果应用在商业项目中将会带来非常大的麻烦。本章的案例也充分说明,线程与某些技术相结合中,我们要考虑的事情会…...
Seem环境安装
创建虚拟环境 conda create -n seem python3.8 conda activate seem 安装相关依赖:(不按照的话会报错) sudo apt-get install openmpi-bin libopenmpi-devconda install gcc_linux-64pip install mpi4py 导入环境 export PYTHONPATH$(pwd…...
java八股jvm
JVM虚拟机篇-01-JVM介绍、运行流程_哔哩哔哩_bilibili 1.PC程序计数器 2.堆 3.虚拟机栈 4.方法区/永久代/元空间 5.直接内存 JVM虚拟机篇-06-JVM组成-你听过直接内存吗_哔哩哔哩_bilibili 6.双亲委派 从下往上找,有同名类优先使用上级加载器的,不用自己…...
家校互通小程序实战开发02首页搭建
目录 1 创建应用2 搭建首页总结 我们上一篇介绍了家校互通小程序的需求,创建了对应的数据源。有了这个基础的分析之后,我们就可以进入到开发阶段了。开发小程序,先需要创建应用。 1 创建应用 登录控制台,点击创建应用,…...
使用matlab制作声音采样率转换、播放以及显示的界面
利用matlab做一个声音采样率转换、播放以及显示的界面 大抵流程: 图形界面创建:使用figure函数创建名为“声音采样率转换”的图形界面,并设置了其位置和大小。 按钮和文本框:使用uicontrol函数创建了选择音频文件的按钮、显示当前…...
FPGA-AMBA协议、APB协议、AHB规范、AXI4协议规范概述及它们之间的关系
FPGA-AMBA协议、APB协议、AHB协议、AXI4协议规范概述 笔记记录,AMBA协议、APB协议、AHB规范、AXI4协议规范概述,只是概述描述,具体详细的协议地址传输、数据传输等内容将在下一章节详细说明。 文章目录 FPGA-AMBA协议…...
NI VeriStand中的硬件I / O延迟时间
NI VeriStand中的硬件I / O延迟时间 - NI 适用于 软件 VeriStand 问题详述 在我的VeriStand项目中,我要从DAQ或FPGA硬件中获取数据,在模型中处理输出,然后输出数据。在硬件输入和输出之间,我应该期望什么样的延迟?如…...
YoloV8的目标检测推理
YoloV8的目标检测推理 原始的YoloV8封装的层次太高,想要为我们所用可能需要阅读很多API,下面给出比较简单的使用方式 导入所需的库 os:用于操作文件系统。cv2 (OpenCV):用于图像处理。numpy:提供数学运算࿰…...
c语言中数据结构
一、结构体的由来 1. 数据类型的不足 C语言中,基本数据类型只有整型、字符型、浮点型等少数几种,无法满足复杂数据类型的需要。 2. 数组的限制 虽然数组可以存储多个同类型的数据,但是数组中的元素个数是固定的,无法动态地改变…...
【GitHub精选项目】抖音/ TikTok 视频下载:TikTokDownloader 操作指南
前言 本文为大家带来的是 JoeanAmier 开发的 TikTokDownloader 项目,这是一个高效的下载 抖音/ TikTok 视频的开源工具。特别适合用户们保存他们喜欢的视频或分享给其他人。 TikTokDownloader 是一个专门设计用于下载 TikTok 视频的工具,旨在为用户提供一…...
Java开发框架和中间件面试题(3)
14.Spring事务中的隔离级别有哪几种? 在TransactionDefinition接口中定义了五个表示隔离级别的常量: 1⃣️ISOLATION DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的可重复读隔离级别;Oracle默认采用的读已提…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
