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

嵌入式系统实验——【玄武F103开发板】实现两个LED小灯闪烁

目录

  • 一、实验文件
    • `main.c`
    • `stm32f10x.h`
  • 二、实验思路
  • (一)打开两个LED小灯
    • 1.在玄武F103开发板上找到LED0、LED1对应的GPIO控制寄存器
    • 2.找到GPIOB、GPIOE的地址
    • 3.打开APB2外设时钟的使能寄存器
    • 4.对GPIO寄存器进行设置
    • 对端口输出寄存器进行设置
  • (二)使两个LED小灯闪烁

一、实验文件

main.c


#include "stm32f10x.h" typedef unsigned int u32;void delay(u32 i)
{while(i--);
}int main(void)
{	RCC_APB2ENR |= (1<<3);GPIOB_CRL &= ~( 0x0F<< (4*5));	GPIOB_CRL |= (1<<4*5);RCC_APB2ENR |= (1<<6);GPIOE_CRL &= ~( 0x0F<< (4*5));	GPIOE_CRL |= (1<<4*5);while(1){GPIOB_ODR^=(1<<5);GPIOE_ODR^=(1<<5);delay(600000);}while(1);
}void SystemInit(void)
{	
}
/*********************************************END OF FILE**********************/

stm32f10x.h

/*±¾ÎļþÓÃÓÚÌí¼Ó¼Ä´æÆ÷µØÖ·¼°½á¹¹Ì嶨Òå*//*片上外设基地址*/
#define PERIPH_BASE           ((unsigned int)0x40000000)/*APB2总线基地址*/
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x00010000)
/*AHB总线基地址,这个不完全准确,与真实值有不同*/
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)/*GPIOB外设基地址*/
#define GPIOB_BASE       (APB2PERIPH_BASE + 0x0C00)/* GPIOB寄存器*/
#define GPIOB_CRL 	 	 *(unsigned int*)(GPIOB_BASE+0x00)
#define GPIOB_CRH 	 	 *(unsigned int*)(GPIOB_BASE+0x04)
#define GPIOB_IDR 	 	 *(unsigned int*)(GPIOB_BASE+0x08)
#define GPIOB_ODR 	 	 *(unsigned int*)(GPIOB_BASE+0x0C)
#define GPIOB_BSRR 	 	 *(unsigned int*)(GPIOB_BASE+0x10)
#define GPIOB_BRR 	 	 *(unsigned int*)(GPIOB_BASE+0x14)
#define GPIOB_LCKR 	 	 *(unsigned int*)(GPIOB_BASE+0x18)/*GPIOE外设基地址*/
#define GPIOE_BASE        (APB2PERIPH_BASE + 0x1800)/* GPIOE寄存器*/
#define GPIOE_CRL 	 	 *(unsigned int*)(GPIOE_BASE+0x00)
#define GPIOE_CRH 	 	 *(unsigned int*)(GPIOE_BASE+0x04)
#define GPIOE_IDR 	 	 *(unsigned int*)(GPIOE_BASE+0x08)
#define GPIOE_ODR 	 	 *(unsigned int*)(GPIOE_BASE+0x0C)
#define GPIOE_BSRR 	 	 *(unsigned int*)(GPIOE_BASE+0x10)
#define GPIOE_BRR 	 	 *(unsigned int*)(GPIOE_BASE+0x14)
#define GPIOE_LCKR 	 	 *(unsigned int*)(GPIOE_BASE+0x18)/*RCC外设地址*/
#define RCC_BASE      (AHBPERIPH_BASE + 0x1000)
/*RCC的AHB1始终使能寄存器地址,强制转换成指针*/
#define RCC_APB2ENR		 *(unsigned int*)(RCC_BASE+0x18)

二、实验思路

(一)打开两个LED小灯

1.在玄武F103开发板上找到LED0、LED1对应的GPIO控制寄存器

玄武F103开发板原理图.pdf (ctrl+f查找LED0即可)

分别位于GPIOB和GPIOE(PB5中的B对应GPIOB、PE5中的E对应GPIOE)

在这里插入图片描述
在这里插入图片描述

2.找到GPIOB、GPIOE的地址

在STM32F1xx中文参考手册中的28页找到:

在这里插入图片描述
但是在本次实验的文件中,采取分别列出各个总线的地址,具体寄存器位于基于总线的偏移量的方式记录各寄存器的地址
在这里插入图片描述

3.打开APB2外设时钟的使能寄存器

在这里插入图片描述
可以在STM32F1xx中文参考手册中的低70页看到RCC上GPIOB、GPIOE对应的始终分别在位3和位6
在这里插入图片描述
于是在main.c中打开这两个端口的时钟
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.对GPIO寄存器进行设置

采用通用推挽输出,速度为10M
在此之前需要清空控制其的端口位
在这里插入图片描述
在这里插入图片描述

对端口输出寄存器进行设置

在这里插入图片描述
如图所示,当LED0所在位置为低电平时,LED0点亮,相反则熄灭
(这里我没搞明白为什么是第五位,可能是因为PB5和PE5中的数字5,如果是这样的话,代码中的(1<<5)都应该改为16,但好像并不是这样)

//PB5输出低电平设置
GPIOB_ODR&=(0<<5);
//PE5输出低电平设置
GPIOE_ODR&=(0<<5);

(二)使两个LED小灯闪烁

//PB5输出低电平设置
GPIOB_ODR&=(0<<5);
//PE5输出低电平设置
GPIOE_ODR&=(0<<5);

改为

	while(1){GPIOB_ODR^=(1<<5);GPIOE_ODR^=(1<<5);delay(600000);}

并添加delay函数的定义:

void delay(u32 i)
{while(i--);
}

上述代码含义即为每隔一定的CPU执行一定数量的算术运算指令(delay函数的内容)后,就将GPIOB和GPIOE的端口输出寄存器的低五位的值按位取反

如下的代码会导致两个LED等都常亮

	while(1){GPIOB_ODR^=(16);GPIOE_ODR^=(16);delay(600000);}

相关文章:

嵌入式系统实验——【玄武F103开发板】实现两个LED小灯闪烁

目录一、实验文件main.cstm32f10x.h二、实验思路&#xff08;一&#xff09;打开两个LED小灯1.在玄武F103开发板上找到LED0、LED1对应的GPIO控制寄存器2.找到GPIOB、GPIOE的地址3.打开APB2外设时钟的使能寄存器4.对GPIO寄存器进行设置对端口输出寄存器进行设置&#xff08;二&a…...

数组之双指针题

文章目录一、最长连续不重复子序列1.题目介绍2.思路3.二、长度最小的子数组1.题目介绍2.思路3.代码三、数组元素的目标和1.题目介绍2.思路3.代码总结其实在之前我写过不少双指针得题解&#xff0c;刷题专练之数组移除元素 刷题专练之翻转题练习这两篇文章的题解基本就是双指针法…...

真实需求和梦想实现满足

多少的时光和岁月中都不曾认真系统的深度思考自己的真实需求和欲望之间是否一致&#xff0c;随着时间的流逝才发现自己追求的是一场空&#xff0c;自己的真实需求并不是苦苦追求的东西&#xff0c;这也是当梦想照进现实&#xff01;欲望是无善无恶的&#xff0c;不必为了满足自…...

[ant-design-vue] tree 组件功能使用

[ant-design-vue] tree 组件功能使用描述环境信息相关代码参数说明描述 是希望展现一个树形的菜单&#xff0c;并且对应的菜单前有复选框功能&#xff0c;但是对比官网的例子&#xff0c;我们在使用的过程中涉及到对半选中情况的处理&#xff1a; 半选中状态&#xff1a; 选中…...

QT父子窗口事件传递与事件过滤器

处理监控系统的时候遇到问题&#xff0c;在MainWidget中创建多个子Widget的时候&#xff0c;原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理&#xff0c;但调试后发现如果子Widget重新实现了事件方法&#xff0c;就直接处理掉事件了&#xff0c;没有进到Main…...

【2.4 golang中的循环语句for】

- 循环语句for 1. 循环语句for 1.1.1. Golang for支持三种循环方式&#xff0c;包括类似 while 的语法。 for循环是一个循环控制结构&#xff0c;可以执行指定次数的循环。 语法 Go语言的For循环有3中形式&#xff0c;只有其中的一种使用分号。 for init; condition; pos…...

Windows 系统下 Apache 和 php 环境怎么搭建?

传统搭建方法在 Windows 系统下&#xff0c;可以通过以下步骤来搭建 Apache 和 PHP 环境&#xff1a;1.下载 Apache 在 Apache 官网下载最新版本的 Apache&#xff0c;例如下载地址为 https://httpd.apache.org/download.cgi。2.安装 Apache 将下载的 Apache 压缩包解压到某个目…...

Python基础知识——字符串、字典

字符串 在Python中&#xff0c;字符和字符串没有区别。可能有些同学学过其他的语言&#xff0c;例如Java&#xff0c;在Java中&#xff0c;单引号’a’表示字符’a’&#xff0c;双引号"abc"表示字符串"abc"&#xff0c;但在Python当中&#xff0c;它们没…...

JVM常用指令

JVM常用指令1.准备工作2.jps3. jconsole4.jstat5.jstack6.jmap7.jvisualvm工具8.自动dump内存信息1.准备工作 在idea中编写代码 public class JVMTest {Testpublic void test() throws InterruptedException {while (true) {Thread.sleep(1000);System.out.println(123);}} }…...

排序中常见的一些指标

1、错误率与精度 错误率与精度是分类任务中最常用的两种性能度量&#xff0c;错误率是指分类错误的样本占样本总数的比例&#xff0c;精度则是分类正确的样本数占样本总数的比例。 错误率&#xff1a; 精度&#xff1a; 2、准确率/召回率/FScore True Positive(真正例, TP)&…...

51单片机入门————数码管显示

我们在马路上看到的红绿灯&#xff0c;就是由数码管来实现的&#xff0c;就是其中可能加入了一些延时和转换数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示电路原理图我们先讨论一个数码管数码管有共阳极和共阴极&#xff0c;我们现在使用的STC89C52是共阴…...

Spring事务未生效场景

一.抛出事务不支持的异常 原理&#xff1a; Spring事务默认支持RuntimeException异常&#xff0c;抛出的异常为RuntimeException异常及其子类异常事务均可生效&#xff0c;而我们日常常见的异常基本都继承自RuntimeException&#xff0c;所以无需指定异常类型事务也能生效。但…...

servlet注解开发

文章目录servlet注解开发内容回顾响应对象 HttpServletResponse重定向与请求转发ServletConfig简介案例ServletContext简介案例Servlet 注解开发简介注解使用案例WebServlet 注解详细参数综合的增删改查案例登录注册功能servlet注解开发 内容回顾 响应对象 HttpServletRespon…...

mysql一联合主键

联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键&#xff0c;这个组合在数据表中是唯一&#xff0c;且加了主键索引。 可以这么理解&#xff0c;比如&#xff0c;你的订单表里有很多字段&#xff0c;一般情况只要有个订单号bill_no做主键就可以了&…...

openpnp - 判断吸嘴是否指定了正确的旋转轴

文章目录openpnp - 判断吸嘴座是否指定了正确的旋转轴概述笔记吸嘴单独矫正的时候Calibrate precise camera ↔ nozzle N1 offsets.ENDopenpnp - 判断吸嘴座是否指定了正确的旋转轴 概述 如果没有指定吸嘴座的正确旋转轴, 会因为对应吸嘴该旋转时不旋转, 而是另外一个空闲的吸…...

【办公类-19-03】办公中的思考——Python批量统一文件名的序号(保教主任整理打印文件)

背景需求&#xff1a;为迎接督导检查&#xff0c;保教主任从各条线收集文本资料。并在每个文件名称前手动编号。但是她嘀咕道&#xff1a;”为什么两套资料放在一个文件里就不是按照数字序号排序&#xff1f;&#xff0c;有的是1X-&#xff0c;有的是40X&#xff0c;看起来很乱…...

MySQL约束

约束约束总结约束 1、概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 2、目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 3、分类&#xff1a; 注意&#xff1a;约束是作用于表中字段上的&#xff0c;可以在创建表/修改表…...

x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建

文章目录[toc]关于 docker 版本查看是否开启 experimental 功能开启 experimental 功能查看当前环境平台拉取一个 arm 平台的容器运行一个 arm 平台的容器整一个 qemu-user-static注册可支持的架构解释器尝试启动 arm64 镜像尝试启动 ppc64le 镜像后台运行 arm64 容器build 一个…...

找工作经验分享

好的简历的特点&#xff1a;简洁&#xff1a;不要使用花里胡俏的简历模板&#xff0c;一般就是一行行写下来那种就行主次分明&#xff1a;一定要有重点&#xff0c;让面试了解你强项是什么首先当然是突出技术&#xff0c;不要花大批篇幅在个人信息、兴趣爱好等&#xff0c;重点…...

C语言学习之路--操作符篇,从知识到实战

目录一、前言二、操作符分类三、算术操作符四、移位操作符1、左移操作符2、右移操作符五、位操作符拓展1、不能创建临时变量&#xff08;第三个变量&#xff09;&#xff0c;实现两个数的交换。2、编写代码实现&#xff1a;求一个整数存储在内存中的二进制中1的个数。六、赋值操…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

回溯算法学习

一、电话号码的字母组合 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"…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...