stm32学习4
学习目录
- 一.流水灯
- 1.创建文件
- 2.编写相关代码
一.流水灯
1.创建文件
将方法进行分类保存在不同的 .c 文件中,方便复用和寻找;
创建Hardware\LED文件,其中有led.c和led.h文件,用于存放有关LED灯操作的方法;
在User文件中创建delay.c和delay.h文件,用于存放延迟的方法;

2.编写相关代码
(1)编写LED灯有关的代码:
在led.h中声明方法名等,方便其他 .c 文件进行引用;
#ifndef __LED_H
#define __LED_H#include "stm32f10x.h"//宏定义
#define LED1 GPIO_ODR_ODR0
#define LED2 GPIO_ODR_ODR1
#define LED3 GPIO_ODR_ODR8//初始化
void LED_Init(void);//控制某个LED的开关
void LED_On(uint16_t led);
void LED_Off(uint16_t led);//翻转LED状态
void LED_Toggle(uint16_t led);//对一组LED灯,全开全关
void LED_OnAll(uint16_t leds[],uint8_t size);
void LED_OffAll(uint16_t leds[],uint8_t size);#endif
在led.c中实现方法:
#include "led.h"//初始化
void LED_Init(void)
{//1.时钟配置;为了让stm32的时钟与外设的时钟进行适配RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;//2.GPIO工作模式配置;GPIOA->CRL &= ~GPIO_CRL_CNF0;GPIOA->CRL |= GPIO_CRL_MODE0;GPIOA->CRL &= ~GPIO_CRL_CNF1;GPIOA->CRL |= GPIO_CRL_MODE1;GPIOA->CRH &= ~GPIO_CRH_CNF8;GPIOA->CRH |= GPIO_CRH_MODE8;//3.PA0输出高电平,默认关灯;LED_Off(LED1);LED_Off(LED2);LED_Off(LED3);
}//控制某个LED的开关
void LED_On(uint16_t led)
{GPIOA->ODR &= ~led;
}void LED_Off(uint16_t led)
{GPIOA->ODR |= led;
}//翻转LED状态
void LED_Toggle(uint16_t led)
{//需要先判断当前LED状态,读取IDR对应位if((GPIOA->IDR & led) == 0){LED_Off(led);}else{LED_On(led);}
}//对一组LED灯,全开全关
void LED_OnAll(uint16_t leds[],uint8_t size)
{for (uint8_t i = 0; i < size; i++){LED_On(leds[i]);}}void LED_OffAll(uint16_t leds[],uint8_t size)
{for (uint8_t i = 0; i < size; i++){LED_Off(leds[i]);}
}
(2)编写延迟的代码:
在delay.h中:
#ifndef __DELAY_H
#define __DELAY_H#include "stm32f10x.h"void Delay_us(uint16_t us);
void Delay_ms(uint16_t ms);
void Delay_s(uint16_t s);#endif
在delay.c中:
在该方法中使用到了stm32中自带的系统时钟
#include "delay.h"// 延时函数,微秒作为单位,利用系统嘀嗒定时器,72MHz,一次嘀嗒 1/72 us
void Delay_us(uint16_t us)
{//1.装载一个计数器,72 * usSysTick->LOAD = 72 * us;//2.配置,使用系统时钟(1),计数结束不产生中断(0),使能定时器(1)SysTick->CTRL |= 0x05;//3.等待计数值变为0,判断CTRL标志位COUNTFLAG是否位1while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG) == 0){}//4.关闭定时器SysTick->CTRL &= ~SysTick_CTRL_ENABLE;}void Delay_ms(uint16_t ms)
{while (ms--){Delay_us(1000);}}void Delay_s(uint16_t s)
{while (s--){Delay_ms(1000);}}
(3)主函数编写:
#include "led.h"
#include "delay.h"int main(void)
{//初始化LEDLED_Init();//定义一个LED数组uint16_t leds[] = {LED1,LED2,LED3};//在循环中执行流水灯,依次点亮每个灯,保持一段时间再关灯;while(1){for (uint8_t i = 0; i < 3; i++){LED_On(leds[i]);Delay_ms(500);LED_Off(leds[i]); }}
}
相关文章:
stm32学习4
学习目录 一.流水灯1.创建文件2.编写相关代码 一.流水灯 1.创建文件 将方法进行分类保存在不同的 .c 文件中,方便复用和寻找; 创建Hardware\LED文件,其中有led.c和led.h文件,用于存放有关LED灯操作的方法; 在User文…...
Midjourney国内直登
Midjourney确实是一个强大的AI绘画工具,能够根据用户输入的文本生成高质量的图像。然而,由于国内的网络限制,直接访问Midjourney可能会遇到障碍。 目前,已经有一些国内代理或中转平台可以帮助用户更方便地使用Midjourney…...
【双目视觉标定】——3面结构光相机标定实践(获取相机内参)~未完待续
相机标定基本原理及双目相机内参解析 相机标定是计算机视觉中的一个重要步骤,旨在确定相机的内部和外部参数,以便在图像处理中进行准确的三维重建、物体识别等任务。本文将重点讲解双目相机的内参和外参原理,并结合实际参数进行分析。 一、…...
Python常用脚本集锦
收集了一些常用Python脚本,作为平时练手使用,也可以作为自己的笔记,用到哪个功能可以自己查询一下即可。 文件和目录管理 复制文件 import shutil# 复制源文件到目标文件 shutil.copy(source.txt, destination.txt)移动文件 import shuti…...
MacBook 如何设置打开json格式文件的默认程序是vs code
首先右键选中文件,然后选中显示简介 然后选中打开方式 设置成vs code...
如何在 Spring Boot 中实现多数据源的事务管理?
在 Spring Boot 中实现多数据源的事务管理可以通过以下几种方式: 一、使用编程式事务管理 配置多个数据源 如同前面提到的,在 application.properties 或 application.yml 文件中配置多个数据源的连接信息,并创建对应的数据源 bean。 手动开启…...
SQL 常用更新操作
目录 1. 从一个查询结果中获取数据批量更新一张表 1. 从一个查询结果中获取数据批量更新一张表 更新table_a中所有id在tmp查询结果中的name值 UPDATE table_a a SET a.name tmp.name FROM (SELECT id, name FROM table_b) tmp WHERE a.id tmp.id;UPDATE table_a a JOIN (SE…...
Android camera2
一、序言 为了对阶段性的知识积累、方便以后调查问题,特做此文档! 将以camera app 使用camera2 api进行分析。 (1)、打开相机 openCamera (2)、创建会话 createCaptureSession (3)、开始预览 setRepeatingRequest (4)、停止预览 stopRepeating (5)、关闭…...
nginx监控指标有哪些
Nginx 的监控指标可以帮助你了解服务器的性能、资源使用以及运行状态。下面是一些常见的 Nginx 监控指标,涵盖了访问、性能、资源使用等多个方面: 1. 访问量与请求处理 Active Connections(活跃连接数):当前 Nginx 处…...
我谈正态分布——正态偏态
目录 pdf和cdf参数 标准正态分布期望和方差分布形态 3 σ 3\sigma 3σ原则 正态和偏态正态偏态瑞利分布偏度 (Skewness)峰度 (Kurtosis) 比较 正态分布的英文是Normal Distribution,normal是“正常”或“标准”的意思,中文翻译是正态,多完美的…...
如何使用uniswap v2 获取两个代币的交易对池子
在 Uniswap V2 中,获取两个代币的交易对池子(即 pair)可以通过以下步骤实现: 连接到 Uniswap V2 的合约:你需要与 Uniswap V2 的 Factory 合约进行交互,通过该合约来查找代币交易对。 获取交易对地址:Uniswap V2 Factory 合约提供了一个 getPair 函数,可以通过该函数查…...
CSS中常见的两列布局、三列布局、百分比和多行多列布局!
目录 一、两列布局 1、前言: 2. 两列布局的常见用法 两列布局的元素示例: 代码运行后如下: 二、三列布局 1.前言 2. 三列布局的常见用法 三列布局的元素示例: 代码运行后如下: 三、多行多列 1.前言 2&…...
GaussDB Ustore存储引擎解读
目录 一、数据库存储引擎 二、GaussDB Ustore存储引擎 总结 本文将介绍GaussDB中的Ustore存储引擎,包括Ustore的设计背景、特点介绍和适用业务场景等。 一、数据库存储引擎 数据库的存储引擎负责在内存和磁盘上存储、检索和管理数据,确保每个节点的…...
JAVA基础:数组 (习题笔记)
一,编码题 1,数组查找操作:定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个单词就打印出“Yes”&…...
VMWARE ESXI VMFS阵列故障 服务器数据恢复
1:河南用户一台DELL R740 3块2.4T硬盘组的RAID5,早期坏了一个盘没有及时更换,这次又坏了一个,导致整组RAID5处于数据丢失的状态, 2:该服务器装的是VMware ESXI 6.7,用户把3块硬盘寄过来进行数据…...
实时金融股票数据API接口websocket接入方法
一、使用websocket的协议提升传输速度 实时金融股票数据对于投资者和交易员来说至关重要。通过使用WebSocket接入方法,可以轻松获取实时金融股票类数据并及时做出决策。WebSocket是一种高效的双向通信协议,它允许数据的实时推送,避免了不断的…...
机器学习与成像技术
机器学习与成像技术 在科技日新月异的今天,机器学习与成像技术的结合正引领着智能视觉领域进入一个全新的发展阶段。这一结合不仅推动了图像识别、目标检测、视频分析等领域的快速发展,还深刻影响着医疗、安防、自动驾驶等多个行业。本文将从机器学习与…...
【系统架构设计师】预测试卷一:综合知识(75道选择题)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5~6题】【第7题】【第8~10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17~18题】【第19~20题】【第21~22题】【第23~24题】【第25~26题】【第2…...
【addRepository 在tomcat 8和tomcat 9的支持情况】
项目中涉及将远程下载的 jar包进行解密后加载到 tomcat 容器中。 File jarFile new File(fileUrl); String jarFileUrl jarFile.toURI().toURL().toString(); WebappClassLoader webLoader (WebappClassLoader) classLoader; webLoader.addRepository(jarFileUrl);在升级到 …...
2024网鼎杯web1+re2 wp
这两道题属于比较简单的,顺道说一下,今年的题有点抽象,web不是misc,re不是web的,也有可能时代在进步,现在要求全栈✌了吧 web1 最开始被强网的小浣熊带偏思路了,进来疯狂找sql注入,…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
如何把工业通信协议转换成http websocket
1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时…...
python可视化:俄乌战争时间线关键节点与深层原因
俄乌战争时间线可视化分析:关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一,自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具,系统分析这场战争的时间线、关键节点及其背后的深层原因,全面…...
Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)
做RAG自己打算使用esmilvus自己开发一个,安装时好像网上没有比较新的安装方法,然后找了个旧的方法对应试试: 🚀 本文将手把手教你在 Docker 环境中部署 Elasticsearch 7.10.1 IK分词器 拼音插件 Kibana,适配中文搜索…...
虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)
当我们网关配置好了,DNS也配置好了,最后在虚拟机里还是无法访问百度的网址。 第一种情况: 我们先考虑一下,网关的IP是否和虚拟机编辑器里的IP一样不,如果不一样需要更改一下,因为我们访问百度需要从物理机…...
