最小系统板 STM32入门,呼吸灯实现(STM32F103C6T6)

news/2024/4/29 8:58:36/文章来源:https://blog.csdn.net/qq_41806966/article/details/126904664

Hi, I’m Shendi

接着前一篇
https://blog.csdn.net/qq_41806966/article/details/126894938

这一次使用库来进行 LED 灯的开关,及延时的实现


呼吸灯实现

之前使用直接修改地址的方式实现点灯,这次用 GPIO 实现点灯,并加上延迟,实现一开一关的呼吸灯

首先需要在 keil 中开启对应的运行环境,点击 Manager Run-Time,选择Device
勾选以下内容

GPIO

StdPeriph Drivers -> Framework

StdPeriph Drivers -> GPIO

StdPeriph Drivers -> RCC(时钟)

StdPeriph Drivers -> TIM(定时器所需)

其中,之前的 StartUp 和 Core 是必勾选的
在这里插入图片描述

开启后就可以使用 GPIO 了



GPIO使用

首先需要开启时钟,通过以下函数

// 第一个参数为外设名称
// 第二个参数为 ENABLE(启用) 或者 DISABLE(禁用)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

然后初始化,使用 GPIO_Init 函数

// 有两个参数, 第一个参数为使用的I/O,例如 GPIOC(单片机上标出来了 ABC...)
// 第二个参数则需要定义结构体
GPIO_InitTypeDef typeDef;
// 这个地方是指定端口,例如我的是 PC13,那么就是13
typeDef.GPIO_Pin = GPIO_Pin_13;
typeDef.GPIO_Mode=GPIO_Mode_Out_PP;
typeDef.GPIO_Speed=GPIO_Speed_50MHz;// 最后初始化
GPIO_Init(GPIOC, &typeDef);

最后可以通过输入/输出函数控制GPIO口

例如点灯

// 将指定GPIO口置为高电平(关)
GPIO_SetBits(GPIOC, GPIO_Pin_13);
// 将指定GPIO口置为低电平(开)
GPIO_ResetBits(GPIOC, GPIO_Pin_13);

代码如下,就可以实现刚开始的点灯了

#include "stm32f10x.h"int main(void) {/* 开启时钟, 使用的都是已经封装好的函数 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/* 初始化 */GPIO_InitTypeDef typeDef;typeDef.GPIO_Pin = GPIO_Pin_13;typeDef.GPIO_Mode=GPIO_Mode_Out_PP;typeDef.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC, &typeDef);/* 开 */GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}

每次烧录都需要按下Reset键才能看到结果



延时

知道了开关后,加上延时,就可以做出呼吸灯的效果了

可以用循环的方式让单片机做无意义的事情来消耗时间,但这样精确度低

延时代码如下,首先需要执行定时器初始化才可以进行延时

/** 初始化定时器 */
void TIM3_Init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseInitStructure.TIM_Period    = 50000-1;TIM_TimeBaseInitStructure.TIM_Prescaler = 60-1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
}// 微秒级延时
void TIM3_Delayus(u16 xus)
{// 启动定时器TIM_Cmd(TIM3,ENABLE); while(TIM3->CNT < xus);TIM3->CNT = 0;// 关闭定时器TIM_Cmd(TIM3,DISABLE);
}// 毫秒级延时
void TIM3_Delayms(u16 xms)
{int i;for(i=0;i<xms;i++){TIM3_Delayus(1000);}
}


效果

最终效果如下,代码如下

STM32呼吸灯实现,示例视频


完整代码如下

#include "stm32f10x.h"/** 初始化定时器 */
void TIM3_Init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseInitStructure.TIM_Period    = 50000-1;TIM_TimeBaseInitStructure.TIM_Prescaler = 60-1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
}// 微秒级延时
void TIM3_Delayus(u16 xus)
{// 启动定时器TIM_Cmd(TIM3,ENABLE); while(TIM3->CNT < xus);TIM3->CNT = 0;// 关闭定时器TIM_Cmd(TIM3,DISABLE);
}// 毫秒级延时
void TIM3_Delayms(u16 xms)
{int i;for(i=0;i<xms;i++){TIM3_Delayus(1000);}
}int main(void) {/* 开启时钟, 使用的都是已经封装好的函数 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/* 初始化 */GPIO_InitTypeDef typeDef;typeDef.GPIO_Pin = GPIO_Pin_13;typeDef.GPIO_Mode=GPIO_Mode_Out_PP;typeDef.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC, &typeDef);// 初始化定时器TIM3_Init();while (1) {/* 开 */GPIO_ResetBits(GPIOC, GPIO_Pin_13);// 延时一秒TIM3_Delayms(1000);// 关GPIO_SetBits(GPIOC, GPIO_Pin_13);// 延时一秒TIM3_Delayms(1000);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

傅立叶及其python应用

前言 本文是傅立叶及其python应用系列的第三篇文章对应的仓库地址为https://github.com/yuanzhoulvpi2017/tiny_python/tree/main/Fourier_Series 介绍 第二篇主要介绍了傅立叶的核心&#xff1a;“傅里叶级数就是函数在某个函数空间中各个基底的投影和“&#xff0c;然后基…

Day27、使用DQL命令查询数据

1、DQL语言 1.1、DQL(Data Query Language&#xff0c;数据查询语言) 1&#xff09;查询数据库数据&#xff0c;如SELECT语句 2&#xff09;简单的单表查询或多表的复杂查询和嵌套查询 3&#xff09;数据库语言中最核心、最重要的语句 4&#xff09;使用频率最高的语句 1.2、SE…

Linux小白学习

Linux学习 虚拟机 安装Linux镜像下载简单命令含义 一、虚拟机安装 参考视频&#xff1a;https://www.bilibili.com/video/BV1dS4y1e7rH?share_sourcecopy_web&vd_source0d57c2e2317ebb16893c37677d1b8931 二、Linux镜像下载 网盘下载地址&#xff1a; 链接&#xff1a;h…

如何设计一个可扩展的登录功能

本文主要分享了如何设计一个可扩展的登录功能。 一、多种登录方式&#xff08;需要有一个唯一值来绑定各种登录方式&#xff0c;目前业界用的比较多的是手机号&#xff09; 1.用户名密码登录 最原始的登录方式&#xff0c;这种登录方式与注册功能是分开的&#xff0c;业界慢慢…

网课查题公众号搭建教程(内附接口、源码)

网课查题公众号搭建教程(内附接口、源码) 本平台优点&#xff1a;免费查题接口搭建 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a;题库后台http://daili.j…

Windows11+Ubuntu 3系统如何安全地删掉最后一个Ubuntu系统?

文章目录Windows11Ubuntu 3系统如何安全地删掉最后一个Ubuntu系统&#xff1f;3系统是什么&#xff1f;第一步&#xff1a;删掉Ub16第二步&#xff1a;重启进入grub命令行第三步&#xff1a;从grub命令行中手动启动ubuntu20第四步&#xff1a;进入Windows11更新开机启动项grub配…

LeetCode 0304. 二维区域和检索 - 矩阵不可变

【LetMeFly】304.二维区域和检索 - 矩阵不可变 力扣题目链接&#xff1a;https://leetcode.cn/problems/range-sum-query-2d-immutable/ 给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a; 计算其子矩形范围内元素的总和&#xff0c;该子矩阵的 左上角 为…

3、Android 活动Activity(4)(为活动补充附加信息)

在意图之外给活动添加额外的信息&#xff0c; 首先可以把字符串参数放到字符串资源文件中&#xff0c;待App运行之时再从资源文件读取字符串值&#xff1b; 接着还能在AndroidManifest.xml中给指定活动配置专门的元数据&#xff0c;App运行时即可获取对应活动的元数据信息&…

C#使用winform做一个开关小游戏

成品展示 游戏原理&#xff1a; 游戏时&#xff0c;任意点击一个格子&#xff0c;其自身状态改变&#xff0c;且上下左右四个格子的状态也进行变化&#xff0c;即&#xff1a;原来是开的变成关的&#xff0c;原来是关的变成开的。 制作过程 1.建项目会的吧。 2.设置游戏窗…

TCP重传,滑动窗口,流量控制,拥塞控制

重传机制 超时重传快速重传SACKD-SACK 超时重传 RTT 就是 数据从网络一端传送到另一端所需要的时间&#xff0c;也就是包的往返时间。 超时重传时间以 RTO 表示&#xff0c;应该略大于RTT。 如果超时重发的数据&#xff0c;再次超时时有需要重传&#xff0c;TCP的策略是超…

[需求管理-2]:什么是需求以及需求的收集与识别

目录 第1章 什么是需求识别 第2章 需求的来源 2.1 外部需求&#xff08;收集&#xff09; 2.2 内部需求&#xff08;开发&#xff09; 第3章 需求的层次 第4章 需求的形式 4.1 提问题&#xff08;针对业务层次需求、原始性需求&#xff09;&#xff1a;第一性原理 4.2 …

视觉SLAM十四讲_4李群与李代数

本文为b站视频的一个笔记 在SLAM中&#xff0c;我们经常要解下面一个问题 FminJ(T)Σi1N∣∣zi−Tpi∣∣2F minJ(T) \Sigma_{i1}^N||z_i - Tp_i||^2FminJ(T)Σi1N​∣∣zi​−Tpi​∣∣2 这个问题中, T是位姿变量。对于求最小值问题&#xff0c;我们第一步就要求函数对于变量…

Java小白踩坑录上

文章目录1、Java小白踩坑录 - String和char2、Java小白踩坑录 - Random 揭秘3、Java小白踩坑录 - B计划之Java资源如何释放&#xff1f;4、Java小白踩坑录 - 反射到底有多慢&#xff1f;5、Java小白踩坑录 - 数组 & List6、Java小白踩坑录 - Java类型的七十二变揭秘7、Java…

IDEA生成带参数和返回值注解

文章目录步骤说明打开IDEA进入 - 设置 - 编辑器 - 活动模板现象一&#xff1a;IDEA提示悬空的注解现象二&#xff1a;IDEA提示标签说明已丢失使用范围设置注解使用步骤说明 打开IDEA进入点击左上角 - 文件 - 设置 - 编辑器 - 活动模板 新建活动模板 填写模板文本 编辑变量 …

2.canal服务器配置及java客户端

【README】 1.本文总结自 B站《尚硅谷-canal》&#xff1b; 2.canal 介绍&#xff0c;可以参考 GitHub - alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 3. canal服务器配置包括 mysql配置&#xff0c;canal配置等&#xff1b; 4.mysql服务器&#xff0c;ca…

完美且简要,如此输出风控中的重要数据指标曲线(如KS等)

先前&#xff0c;我们用excel给大家演示过一个KS的计算方式。 ks值是在模型中用于区分预测正负样本分隔程度的评价指标。每个样本的预测结果化对应的一个个分数&#xff0c;从最低分到最高分&#xff0c;输出为正负样本的累积分布。Ks值为这个两个正负样本中&#xff0c;最大差…

听吧音乐项目测试

听吧音乐项目 听吧音乐测试1.项目背景2.需求分析2.1 用户需求2.2 软件需求3. 测试点分析及测试用例4. 自动化测试代码4.1 注册登录注销模块自动化测试代码4.2 专辑播放自动化测试代码5. 测试报告1.项目背景 听吧音乐是一个在线听歌网站&#xff0c;游客通过首页可以在线收听其…

WinUI 3 踩坑记:第一个窗口

本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,文中的代码也在此仓库中,若内容出现冲突以 GitHub 上的为准。WinUI 3 应用的入口和 UWP 类似,也是继承自 Application 的一个类,略有不同的是没有 UWP 那么多的启动方式可供重写,只有一个 OnLau…

python计算离散积分

前言 本文是傅立叶及其python应用系列的第一篇文章对应的仓库地址为https://github.com/yuanzhoulvpi2017/tiny_python/tree/main/Fourier_Series 介绍 本篇文章将要介绍一个非常小众的scipy函数&#xff1a;simpson. 这个函数的一大功能就是可以对离散数据积分。之所以要介…

P39 事件处理

P39 事件处理1.事件模型的流程2.事件监听器2.1 动作监听器&#xff08;ActionListener&#xff09;2.2 焦点监听器&#xff08;FocusListener&#xff09;2.3 鼠标监听器&#xff08;MouseListener&#xff09;2.4 鼠标移动/拖动监听器&#xff08;MouseMotionListener&#xf…