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

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 文件中&#xff0c;方便复用和寻找&#xff1b; 创建Hardware\LED文件&#xff0c;其中有led.c和led.h文件&#xff0c;用于存放有关LED灯操作的方法&#xff1b; 在User文…...

Midjourney国内直登

Midjourney确实是一个强大的AI绘画工具&#xff0c;能够根据用户输入的文本生成高质量的图像。然而&#xff0c;由于国内的网络限制&#xff0c;直接访问Midjourney可能会遇到障碍。 目前&#xff0c;已经有一些国内代理或中转平台可以帮助用户更方便地使用Midjourney&#xf…...

【双目视觉标定】——3面结构光相机标定实践(获取相机内参)~未完待续

相机标定基本原理及双目相机内参解析 相机标定是计算机视觉中的一个重要步骤&#xff0c;旨在确定相机的内部和外部参数&#xff0c;以便在图像处理中进行准确的三维重建、物体识别等任务。本文将重点讲解双目相机的内参和外参原理&#xff0c;并结合实际参数进行分析。 一、…...

Python常用脚本集锦

收集了一些常用Python脚本&#xff0c;作为平时练手使用&#xff0c;也可以作为自己的笔记&#xff0c;用到哪个功能可以自己查询一下即可。 文件和目录管理 复制文件 import shutil# 复制源文件到目标文件 shutil.copy(source.txt, destination.txt)移动文件 import shuti…...

MacBook 如何设置打开json格式文件的默认程序是vs code

首先右键选中文件&#xff0c;然后选中显示简介 然后选中打开方式 设置成vs code...

如何在 Spring Boot 中实现多数据源的事务管理?

在 Spring Boot 中实现多数据源的事务管理可以通过以下几种方式&#xff1a; 一、使用编程式事务管理 配置多个数据源 如同前面提到的&#xff0c;在 application.properties 或 application.yml 文件中配置多个数据源的连接信息&#xff0c;并创建对应的数据源 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

一、序言 为了对阶段性的知识积累、方便以后调查问题&#xff0c;特做此文档&#xff01; 将以camera app 使用camera2 api进行分析。 (1)、打开相机 openCamera (2)、创建会话 createCaptureSession (3)、开始预览 setRepeatingRequest (4)、停止预览 stopRepeating (5)、关闭…...

nginx监控指标有哪些

Nginx 的监控指标可以帮助你了解服务器的性能、资源使用以及运行状态。下面是一些常见的 Nginx 监控指标&#xff0c;涵盖了访问、性能、资源使用等多个方面&#xff1a; 1. 访问量与请求处理 Active Connections&#xff08;活跃连接数&#xff09;&#xff1a;当前 Nginx 处…...

我谈正态分布——正态偏态

目录 pdf和cdf参数 标准正态分布期望和方差分布形态 3 σ 3\sigma 3σ原则 正态和偏态正态偏态瑞利分布偏度 (Skewness)峰度 (Kurtosis) 比较 正态分布的英文是Normal Distribution&#xff0c;normal是“正常”或“标准”的意思&#xff0c;中文翻译是正态&#xff0c;多完美的…...

如何使用uniswap v2 获取两个代币的交易对池子

在 Uniswap V2 中,获取两个代币的交易对池子(即 pair)可以通过以下步骤实现: 连接到 Uniswap V2 的合约:你需要与 Uniswap V2 的 Factory 合约进行交互,通过该合约来查找代币交易对。 获取交易对地址:Uniswap V2 Factory 合约提供了一个 getPair 函数,可以通过该函数查…...

CSS中常见的两列布局、三列布局、百分比和多行多列布局!

目录 一、两列布局 1、前言&#xff1a; 2. 两列布局的常见用法 两列布局的元素示例&#xff1a; 代码运行后如下&#xff1a; 二、三列布局 1.前言 2. 三列布局的常见用法 三列布局的元素示例&#xff1a; 代码运行后如下&#xff1a; 三、多行多列 1.前言 2&…...

GaussDB Ustore存储引擎解读

目录 一、数据库存储引擎 二、GaussDB Ustore存储引擎 总结 本文将介绍GaussDB中的Ustore存储引擎&#xff0c;包括Ustore的设计背景、特点介绍和适用业务场景等。 一、数据库存储引擎 数据库的存储引擎负责在内存和磁盘上存储、检索和管理数据&#xff0c;确保每个节点的…...

JAVA基础:数组 (习题笔记)

一&#xff0c;编码题 1&#xff0c;数组查找操作&#xff1a;定义一个长度为10 的一维字符串数组&#xff0c;在每一个元素存放一个单词&#xff1b;然后运行时从命令行输入一个单词&#xff0c;程序判断数组是否包含有这个单词&#xff0c;包含这个单词就打印出“Yes”&…...

VMWARE ESXI VMFS阵列故障 服务器数据恢复

1&#xff1a;河南用户一台DELL R740 3块2.4T硬盘组的RAID5&#xff0c;早期坏了一个盘没有及时更换&#xff0c;这次又坏了一个&#xff0c;导致整组RAID5处于数据丢失的状态&#xff0c; 2&#xff1a;该服务器装的是VMware ESXI 6.7&#xff0c;用户把3块硬盘寄过来进行数据…...

实时金融股票数据API接口websocket接入方法

一、使用websocket的协议提升传输速度 实时金融股票数据对于投资者和交易员来说至关重要。通过使用WebSocket接入方法&#xff0c;可以轻松获取实时金融股票类数据并及时做出决策。WebSocket是一种高效的双向通信协议&#xff0c;它允许数据的实时推送&#xff0c;避免了不断的…...

机器学习与成像技术

机器学习与成像技术 在科技日新月异的今天&#xff0c;机器学习与成像技术的结合正引领着智能视觉领域进入一个全新的发展阶段。这一结合不仅推动了图像识别、目标检测、视频分析等领域的快速发展&#xff0c;还深刻影响着医疗、安防、自动驾驶等多个行业。本文将从机器学习与…...

【系统架构设计师】预测试卷一:综合知识(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

这两道题属于比较简单的&#xff0c;顺道说一下&#xff0c;今年的题有点抽象&#xff0c;web不是misc&#xff0c;re不是web的&#xff0c;也有可能时代在进步&#xff0c;现在要求全栈✌了吧 web1 最开始被强网的小浣熊带偏思路了&#xff0c;进来疯狂找sql注入&#xff0c…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...