STM32--基于固件库(Library Faction)的流水灯、静态数码管

news2024/9/29 21:37:52

目录

一、GPIO介绍  

二、基于固件库(Library Faction)的流水灯

三、基于固件库(Library Faction)的静态数码管


 一、GPIO介绍

GPIO库函数,对GPIO可进行一些,读写控制的操作,本文章应用的就是GPIO_Write 

 GPIO接在APB2(高速总线)上,

         AHB/APB桥(APB) 两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操 作于全速(最高72MHz)。 有关连接到每个桥的不同外设的地址映射请参考表1。在每一次复位以后,所有除SRAM和 FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外 设的时钟。

        注意: 当对APB寄存器进行8位或者16位访问时,该访问会被自动转换成32位的访问:桥会自动将8位 或者32位的数据扩展以配合32位的向量。

每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存 器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置 成多种模式。

─ 输入浮空

─ 输入上拉

─ 输入下拉

─ 模拟输入

─ 开漏输出

─ 推挽式输出

─ 推挽式复用功能

─ 开漏复用功能

        每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访 问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这 样,在读和更改访问之间产生IRQ时不会发生危险。

 

 

 

二、基于固件库(Library Faction)的流水灯

文件的搭建请参照使用MDK-ARM(KEIL V5)创建一个工程(有图有文字)_可乐CC+的博客-CSDN博客

main.c
#include "stm32f10x.h"
#include <flowingwater.h>

void Delayms(uint32_t i)
{
	while(i--);
}

int main()
{
	int i;
	LED_Init();
	while(1)
	{
//		GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);//8个led同时亮、灭
//		Delayms(0xa00000);
//		GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN);
//		Delayms(0xa00000);
		for(i=0;i<8;i++)
		{
	//	GPIO_Write(LED_GPIO_PORT,0Xfffffe<<i);//8个灯依次点亮,不熄灭
			GPIO_Write(LED_GPIO_PORT,~(0x000001<<i));//八个灯依次点亮,前一个熄灭
			Delayms(0xa00000);
		}
	}
}

flowing water.h
#ifndef _FLOWINGWATER_H_
#define _FLOWINGWATER_H_

#include <stm32f10x.h>
#define LED_GPIO_PORT GPIOC
#define LED_GPIO_PIN  (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)

void LED_Init(void);

#endif



flowing water.c
#include <flowingwater.h>

void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	GPIO_InitStruct.GPIO_Pin = LED_GPIO_PIN;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(LED_GPIO_PORT,&GPIO_InitStruct);
}

1-初始化所需要使用的引脚,如果使用的多,可以用“|”进行合并,写在一起。

2-根据需求,对gpio口进行驱动。 

三、基于固件库(Library Faction)的静态数码管

编写静态数码管只需要在原来的基础上添加一个数组。


#include "stm32f10x.h"
#include <flowingwater.h>

uint16_t  table[16]={0xffc0, 0xf9, 0xa4, 0xb0,0x99,0x92,0x82,0xf8, 0x80 ,0x90 ,0x88,0x83,0xc6 ,0xa1,0x86,0x8e};


void Delayms(uint32_t i)
{
	while(i--);
}

int main()
{
	int i;
	LED_Init();
	while(1)
	{
//		GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);//8
//		Delayms(0xa00000);
//		GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN);
//		Delayms(0xa00000);
		for(i=0;i<16;i++)
		{
	//	GPIO_Write(LED_GPIO_PORT,0Xfffffe<<i);
	//		GPIO_Write(LED_GPIO_PORT,~(0x000001<<i));
			GPIO_Write(LED_GPIO_PORT,table[i]);
			Delayms(0xa00000);
			GPIO_Write(LED_GPIO_PORT,0xffff);

		}
	}
}

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

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

相关文章

短视频矩阵是什么?源码搭建技术干货

一、短视频账号矩阵是什么&#xff1f; 短视频账户矩阵实际上是通过一些技术手段将账户和账户连接起来的。这种账户有一定的相关性。通过相互吸引流量&#xff0c;可以扩大账户的影响力&#xff0c;使账户拥有更多的粉丝和更高的价值。短视频账户矩阵属于短视频营销策划的高级…

Python 带你制作自动评论程序,让你喜欢的人一眼看到你

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 知识点: 动态数据抓包 requests发送请求 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests pip install requests 第三方模块安装&#xff1a; win R 输入cmd 输入安装命令 pip install 模块名 (…

深入了解CSS颜色架构:提升你的网页设计技巧

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

【Java】JUC下的常用接口和类

Callable接口ReentrantLock常用的方法创建公平锁创建读写锁唤醒机制ReentrantLock与synchronized的区别 原子类工具类SemaphoreCountDownLatchCyclicBarrier-循环栅栏 线程安全的集合类CopyOnWriteArrayList多线程环境使用队列多线程环境使用哈希表ConcurrentHashMap java.util…

OpenResty 中的 Nginx 基础知识

Nginx 版本 OpenResty 的版本&#xff0c;落后于标准 Nginx 版本不少&#xff0c;所以较新的 Nginx 支持的功能&#xff0c;OpenResty 不一定支持。 Nginx 进程模型 当启动 Nginx 后我们使用 ps 来查看相关进程&#xff1a; $ ps -ef --forest | grep nginx root 32475…

OpenGL超级第12章学习笔记:管线监控

前言 本篇在讲什么 OpenGL蓝宝书第十二章学习笔记之管线监控 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c…

C++编译过程

How the C Compiler works? 文章目录 How the C Compiler works?compilingExamples总结欢迎关注公众号【三戒纪元】 通过编程&#xff0c;是的text程序编程可执行文件&#xff0c;基本上主要有2个操作发生&#xff1a; compiling 编译linking 链接 compiling C 编辑器要做的…

VXLAN:数据中心网络的未来

概要 随着云计算和虚拟化技术的快速发展&#xff0c;数据中心网络正面临着越来越大的挑战。传统的网络架构在适应大规模数据中心的需求方面存在一些限制&#xff0c;如扩展性、隔离性和灵活性等方面。为了克服这些限制&#xff0c;并为数据中心网络提供更好的性能和可扩展性&am…

【好书精读】网络是怎样连接的 之 连接服务器

&#xff08;该图由AI制作 学习AI绘图 联系我&#xff09; 目录 1 连接是什么意思 1.1 连接实际上是通信双方交换控制信息 2 负责保存控制信息的头部 2.1 客户端与服务器之间交换的控制信息 连接操作的实际过程 1 连接是什么意思 创建套接字之后 &#xff0c; 应用程序 …

Selenium教程__使用execute_script执行JavaScript(11)

selenium的包含的方法已能完全满足UI自动化&#xff0c;但是有些时候又不得不用到执行JS的情况&#xff0c;比如在一个富文本框中输入1W个字&#xff0c;使用send_keys方法将经历漫长的输入过程&#xff0c;如果换成使用JS的innerHTML方法就能够很快的完成输入。 selenium执行…

Shell 函数实现Go语言多版本管理轻量级方案

现有的工具方案 https://github.com/moovweb/gvmhttps://github.com/voidint/g 我的方案 优点&#xff1a; 原生&#xff1a;基于 go 语言本身支持多版本的能力实现&#xff0c;可以下载任何官方发布的版本简单&#xff1a;shell 函数实现&#xff0c;直接集成到 bashrc 或…

软件测试技能,JMeter压力测试教程,HTTP Cookie管理器(四)

目录 前言 一、场景案例 二、HTTP Cookie管理器 三、302 重定向 前言 Web网站的请求大部分都有cookies&#xff0c;jmeter的HTTP Cookie管理器可以很好的管理cookies 我用的 jmeter5.1 版本&#xff0c;直接加一个HTTP Cookie管理器放到请求的最前面&#xff0c;就可以自…

用docker搭建selenium grid分布式环境实践

目录 前言&#xff1a; selenium jar包直接启动节点 用docker命令直接启动 docker-compose 启动 Hub和node在一台机器上 Hub和node不在一台机器上 遗留问题 总结 前言&#xff1a; Selenium是一个流行的自动化测试工具&#xff0c;支持多种编程语言和多种浏览器。Sele…

【微服务架构演进】一文读懂单片到微服务架构的模式和最佳实践

在本文中&#xff0c;我们将学习如何使用设计模式、原则和最佳实践来设计微服务架构。我们将使用正确的架构设计模式和技术。 在本文结束时&#xff0c;您将了解如何在微服务分布式架构上设计系统以实现高可用性、高可扩展性、低延迟和对网络故障的弹性&#xff0c;从而处理数百…

学习Spring之声明式事务

什么是事务&#xff1f; 一个业务有一组操作&#xff0c;要么都成功&#xff0c;要么都失败 事务的四大特性&#xff1a;ACID A 原子性&#xff1a;一组操作&#xff0c;要么都成功&#xff0c;要么都失败 C 一致性 &#xff1a;事务的前后要保证事务的一致性 I 隔离性 &…

QLabel的使用

QLabel介绍 QLabel 是 Qt 框架中的一个控件类&#xff0c;用于显示文本或图像。它可以在窗口或其他容器中显示静态文本&#xff0c;并且可以根据需要设置格式、对齐方式和尺寸。 主要作用如下&#xff1a; 显示文本内容&#xff1a;QLabel 可以显示文字内容&#xff0c;可以…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

Spring Boot 中使用 @EventListener 注解监听事件

Spring Boot 中使用 EventListener 注解监听事件 Spring Boot 是一个流行的 Java Web 框架&#xff0c;它提供了丰富的功能和工具来简化开发人员的工作。其中一个非常有用的功能是事件监听器。在 Spring Boot 中&#xff0c;我们可以使用 EventListener 注解来监听事件&#x…

一天时间完成Python入坑(开发环境搭建、excel解析、exe打包三步走)

0.为什么要入坑Python 早就知道Python好&#xff0c;Python妙&#xff0c;Python用起来呱呱叫。工作上一直没有什么用得上Python的必要性&#xff0c;就一直没有接触&#xff0c;本次终于来了机会&#xff1a;【图新地球桌面端要对外开放Python API】&#xff0c;开放图新地球的…

【mars3d】Cesium实现雷达放射波

Cesium实现雷达放射波 1、雷达放射波 先看效果图 说明&#xff1a;使用的是mars3d框架&#xff0c;原生的Cesium实现方式可以绕道~ 实现方式&#xff1a; <template><div id"mars3dContainer"></div> </template><script setup> i…