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默认采用的读已提…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
