跑马灯实验(stm32)

news2024/11/24 8:49:43

目录

  • LED的功能代码
    • led.c
    • led.h
    • 硬件相关说明
  • main.c
  • 代码的一些介绍
    • BSRR和BRR
  • 实验结果

说明:以下内容参考正点原子的相关资料

LED的功能代码

led.c

void LED_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	 //使能PB,PE端口时钟
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB.5
 GPIO_SetBits(GPIOB,GPIO_Pin_5);						 //PB.5 输出高

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	    		 //LED1-->PE.5 端口配置, 推挽输出
 GPIO_Init(GPIOE, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(GPIOE,GPIO_Pin_5); 						 //PE.5 输出高 
}

led.h

#ifndef __LED_H
#define __LED_H	 

#include "sys.h"
#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5	

void LED_Init(void);//初始化

		 				    
#endif

硬件相关说明

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

main.c

#include "sys.h"
#include "delay.h"
#include "led.h"

 int main(void)
 {	
	delay_init();	    //延时函数初始化	  
	LED_Init();		  	//初始化与LED连接的硬件接口
	while(1)
	{
		LED0=0;
		LED1=1;
		delay_ms(300);	 //延时300ms
		LED0=1;
		LED1=0;
		delay_ms(300);	//延时300ms
	}
 }

代码的一些介绍

这里使用的是位带操作来实现操作某个 IO 口的 1 个位

#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5	

#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出 
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))

相应的库函数操作代码。

GPIO_SetBits(GPIOB, GPIO_Pin_5); //设置 GPIOB.5 输出 1,等同 LED0=1;
GPIO_ResetBits (GPIOB, GPIO_Pin_5); //设置 GPIOB.5 输出 0,等同 LED0=0;

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BSRR = GPIO_Pin;
}

#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \
                                    ((PERIPH) == GPIOB) || \
                                    ((PERIPH) == GPIOC) || \
                                    ((PERIPH) == GPIOD) || \
                                    ((PERIPH) == GPIOE) || \
                                    ((PERIPH) == GPIOF) || \
                                    ((PERIPH) == GPIOG))
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

BSRR和BRR

  • BSRR:端口位设置/清除寄存器
    在这里插入图片描述
  • BRR:端口位清除寄存器

在这里插入图片描述

实验结果

可以看到红绿灯交错闪烁
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单月涨粉30w,小红书涨粉秘诀是什么?

6月,小红书平台又涌现出哪些优质博主?品牌在投放种草方面有何亮眼表现? 为洞察小红书平台的内容创作趋势及品牌营销策略,新红推出6月月度榜单,从创作者、品牌、品类多方面入手,解析月榜数据,为从…

耗时半月,终于把牛客网上的软件测试面试八股文整理成PDF合集!

大家好,最近收到不少小伙伴的留言,反映现在的面试难度越来越高,要背的八股文越来越多了,考察的知识点也越来越细致,明摆着就是想让我们“徒手造航母”嘛!对程序员们来说确实是一大挑战。 因此,…

Win10快捷方式添加到开始菜单或磁贴

打开Windows文件夹,进入该目录(用户名替换为当前用户):C:\Users\[你的用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 将应用的快捷方式复制到此目录下,即可展示在开始菜单中可以右键在将快捷方式固定到磁贴

【UnityDOTS 小知识】在DOTS中实例化Prefab的方法

在DOTS中实例化Prefab的方法 前言 实例化Prefab的方法常规方法: 1.利用Baker的方式,以及getEntity方法,将prefab转化为一个对应的Entity原型,再利用EntityManager或ECB的Instantiate方法实例化这个Entity原型得到对应Prefab的实…

LSTD: A Low-Shot Transfer Detector for Object Detection论文阅读笔记

LSTD: A Low-Shot Transfer Detector for Object Detection论文阅读笔记 提出low-shot Transfer detector,来解决标注样本数据不足的情况。利用source domain知识,来构建高效的target-domain检测器,仅需要很少的训练样本。 提出了一个高效的…

第一课:Figma 软件安装与汉化

Figma软件基本介绍 Figma 是一款可在线协作的UI设计软件,最大的亮点在于它基于 WEB 平台研发,能支撑全平台操作系统的运行,适合各种场景下的使用。Figma软件特色功能: 在线编辑,适配全平台:使用软件 Figma…

Python 利用opencv实现识别最大面积验证码

此篇文章解决的是某象的最大验证码,这个最大面积验证码,就是识别图中划线区域中最大面积的验证码,我一开始打算用深度学习去做,但是结合了网上的资料以及自己的想法来看,还是用opencv处理又快又较为准确,而且还不用准备深度学习的一些环境 我准备了大概几十张验证码,经过…

Linux运维-修改密码报错提示:authentication token manipulation error

背景 今天在Linux Centos7环境的使用中,突然遇到了这个问题,为了以后再次遇到后可以快速的解决问题,特此记录。 首先是无法进入系统,然后通过单用户进入系统后修改密码,然后遇到该问题。 单用户进入系统 在如下位置添加init/bin/bash 后按Ctrl X 重启系统 进入b…

联想凌拓数据管理平台—— MagnaScale 分布式存储软件

MagnaScale 分布式存储软件 MagnaScale 数据管理平台是联想凌拓自研 ThinkSystem DXN 非结构化存储的核心软件,具有高性能、高可用性、横向扩展的特点。 MagnaScale 解决方案 是 DXN 非结构化存储的核心软件,能够真正实现软硬件解耦,为客户提…

在 VS Code 的 User Snippets 中使用美元符号 $ 失败的问题

在 VS Code 的 User Snippets 中使用美元符号 $ 失败的问题 在日常工作里经常会用到一些常用的代码片段, 比如创建一个 .vue 文件的初始结构, 所以我会选择在 VS Code 的 User Snippet 中创建一个代码片段, 如下 {"Print to console": {"scope": "v…

异常处理在开源SpringBoot/SpringCloud微服务框架的最佳实践

目录导读 异常处理在开源SpringBoot/SpringCloud微服务框架的最佳实践1. Java为什么要有异常2 Java异常分类3. JDK异常处理4. 模块化异常处理5. 服务化异常处理5.1 web服务化异常处理5.1.1 web参数校验服务化异常最佳实践5.1.1.1 web参数校验服务化异常分析5.1.1.2 web参数校验…

七、html表格

1、表格 表格 组织内容:推荐 布局:不推荐,嵌套非常复杂,影响SEO,采用列表代替布局 2、表格的结构 标题 头部 列标题 主体 行、列、单元格 脚部 在JavaScript默认提供主体 3、表格的使用 4、列与行合并&#xff1…

Kubernetes(k8s)实战:使用k8s+jenkins实现CICD

文章目录 一、什么是CICD二、准备k8s环境三、jenkins环境准备(选择一台服务器)1、安装java(最新版jenkins只支持jdk11以上)(1)找到jdk资源上传到指定机器(2)配置环境变量 2、安装mav…

stm32 freertos多任务状态迁移,中断临界段,任务延时

freertos的作用 处理器运行模式 arm中SP,LR,PC寄存器以及其它所有寄存器以及处理器运行模式介绍 一、xTaskCreate() 1、prvInitialiseNewTask() 2、prvAddNewTaskToReadyList() (1…

mysql迁移

目录 1.SQLyog 2.阿里云DTS 1.创建任务 2.配置源库及目标库信息 3.配置任务对象及高级配置 4.高级配置 1.SQLyog 适用于离线迁移,全量迁移,少量迁移,数据库大小在几百兆范围内,时间需要几十秒到几分钟不等。 选择源库&…

java网络编程、TCP和UDP、三次握手和四次挥手

一、网络编程入门 (1)概念 在网络通信协议下,不同计算机上运行的程序,可以进行数据传输 (2)网络编程三要素: IP地址 设备在网络中的地址,是唯一的标识。全称”互联网协议地址”&a…

value_counts()方法--Pandas

1. 函数功能 返回DataFrame中值与计算组成的Series 2. 函数语法 DataFrame.value_counts(subsetNone, normalizeFalse, sortTrue, ascendingFalse, dropnaTrue)3.函数参数 参数含义subset可选参数,标签或者标签列表 ,计算时要用的列normalize布尔值&…

android原生工程测试opencv库与opencl功能

1.jni原生工程main文件夹中创建jniLibs 2.复制opencv库到jniLibs 3.复制opencv头文件 头文件库导入后如下: 头文件与库路径包含 头文件直接复制出来外面,不然识别不了 断点调试

Jetson nano中使用tensorrt推理yolov5

克隆下载yolov5项目 准备yolov5项目, 从仓库下载5 5.0版本 git clone -b v5.0 https://github.com/ultralytics/yolov5.git下载权重地址 https://github.com/ultralytics/yolov5/releases/tag/v5.0自行安装必要的库 pip3 install -r requirements.txt准备tensorrtx项目 下载后可…

88、基于STM32单片机学习型搬运机器人四自由度机械臂机械手遥感控制设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&a…