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);}
}

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

  1. 最小系统板 STM32入门,点亮 LED 灯(STM32F103C6T6)

    Hello, I'm Shendi 最近开整单片机,这里记录一下 我目前配置,最小系统板 STM32F103C6T6,ST-LINK V2 最小系统板,通电后PWR灯会亮,ST-LINK插上电脑后也会 ...

  2. stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯

    后台网友建议制作一个流水灯,正好发现自己有之前购买的STM32F103C8T6核心板,今天搭建一个流水灯,正好学习一下STM32 GPIO输出如何实现,将来驱动蜂鸣器.继电器等都会使用的. 流水灯相当 ...

  3. 从0到1入门STM32最小系统板(0)——前言

    从0到1入门STM32最小系统板--前言 这个系列的文章将从0开始制作一个STM32最小系统板,大概分为如下几个部分: 元件简述: 原理图绘制: PCB布局: 打板焊接: 本篇文章主要讲解一下最小系统 ...

  4. 从0到1入门STM32最小系统板(2-1)——绘制原理图之器件选型

    从0到1入门STM32最小系统板--绘制原理图之器件选型 本次我们选择的芯片是STM32F446RET6,使用立创EDA进行原理图绘制. 文章目录 从0到1入门STM32最小系统板--绘制原理图之器件 ...

  5. STM32最小系统板介绍

    自学的话,网上买一个STM32F103C8T6最小系统板,包邮也就十来块,研究透了,再去买开发板,也是不错的选择 1.芯片介绍 1+.STM32芯片用的是3V电压,但是如果没有的话,这个最小芯片会通过 ...

  6. STM32最小系统板程序下载

    文章目录 STM32的几种启动模式 CH340芯片 无板载CH340芯片的开发板使用串口下载程序 板载CH340芯片的开发板使用串口下载程序 不含CH340芯片的开发板下载程序流程 2022/05/1 ...

  7. PCB设计之STM32最小系统板

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 PCB设计之STM32最小系统板 文章目录 文章目录 一.AD版本 二.PCB之原理图绘制步骤 1.STM32F103C8T6最小系统 ...

  8. 【stm32】如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例

    [stm32]如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例 外部硬件: stm32仿真编程器 (仿真编制器自己在网上买,不确定买哪个的可以就买我这个,图片上有牌子,自 ...

  9. stm32最小系统板学习笔记

    最小系统板包含 内核 存储器 时钟 复位 电源管理 时钟 时钟包含两部分,内部时钟和外部时钟 同时,每一部分又分为低速和高速两种时钟 内部先不说, 外部时钟就是指的晶振,外部低速晶振是32.768Kh ...

  10. STC12C5A60S2最小系统板/51单片机温度显示和温度控制风扇

    STC12C5A60S2最小系统板/51单片机温度显示和温度控制风扇,板载有DS18B20和TM1650+4位数码管. 项目简介 单片机课课程设计,要做一个智能温控风扇,达到设定的下限温度值就开启风扇 ...

最新文章

  1. docker 配置加速器
  2. 并发基础篇(一) 线程介绍
  3. DIV盒子模型介绍 div用法
  4. 什么是堆(Heap)
  5. c 语言注释格式化,linux 格式化C语言的源文件 命令:indent
  6. Linux配置 DNS and BIND服务配置详解--缓存服务器配置 正反向解析配置
  7. Arturia Prophet Mac音频插件:将Prophet 5,Prophet VS,Prophet Hybrid三种不同音乐合成器于一体
  8. asp和php功能,asp和php都有什么功能?
  9. [c/c++]小议几个写缓冲区的函数
  10. sql server生成不重复的时间字符串
  11. mysql navicat报表_使用Navicat定时备份mysql数据库和创建报表并邮件自动发送
  12. 华为电脑笔记本_华为笔记本电脑屏幕质量竟如此糟糕!
  13. sql以什么开头怎么写_如果让你给自己的人生写一个开头,你会怎么写?
  14. 硬件工程师面试常见问题
  15. python 文本分析教程_《Python机器学习基础教程》七、处理文本数据
  16. DATEDIF函数使用方法高级篇到期提醒等
  17. IM的扫码登录功能如何实现?
  18. Oracle 协议设配器错误解决方案
  19. Wallpaper Engine使用视频壁纸黑屏解决方法(window10)
  20. 每日一言:站在高山之巅的人

热门文章

  1. HRBUST 2386 - 霍冰阔落(主席树)
  2. 基于Java swing+mysql+eclipse的【图书管理系统】
  3. 三维坐标系旋转——旋转矩阵到旋转角之间的换算
  4. matlab 展开计算公式,钣金下料展开计算公式
  5. Django——jinja2配置与使用
  6. 机器学习(3)——有监督学习
  7. C# + OpenXML 生成 Word 文档(VS2015)
  8. 中兴新支点操作系统_中兴新支点操作系统下载
  9. WinSCP(Windows与Linux文件同步工具)使用总结
  10. 高层管理者的必备技能