最小系统板 STM32入门,呼吸灯实现(STM32F103C6T6)
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)相关推荐
- 最小系统板 STM32入门,点亮 LED 灯(STM32F103C6T6)
Hello, I'm Shendi 最近开整单片机,这里记录一下 我目前配置,最小系统板 STM32F103C6T6,ST-LINK V2 最小系统板,通电后PWR灯会亮,ST-LINK插上电脑后也会 ...
- stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯
后台网友建议制作一个流水灯,正好发现自己有之前购买的STM32F103C8T6核心板,今天搭建一个流水灯,正好学习一下STM32 GPIO输出如何实现,将来驱动蜂鸣器.继电器等都会使用的. 流水灯相当 ...
- 从0到1入门STM32最小系统板(0)——前言
从0到1入门STM32最小系统板--前言 这个系列的文章将从0开始制作一个STM32最小系统板,大概分为如下几个部分: 元件简述: 原理图绘制: PCB布局: 打板焊接: 本篇文章主要讲解一下最小系统 ...
- 从0到1入门STM32最小系统板(2-1)——绘制原理图之器件选型
从0到1入门STM32最小系统板--绘制原理图之器件选型 本次我们选择的芯片是STM32F446RET6,使用立创EDA进行原理图绘制. 文章目录 从0到1入门STM32最小系统板--绘制原理图之器件 ...
- STM32最小系统板介绍
自学的话,网上买一个STM32F103C8T6最小系统板,包邮也就十来块,研究透了,再去买开发板,也是不错的选择 1.芯片介绍 1+.STM32芯片用的是3V电压,但是如果没有的话,这个最小芯片会通过 ...
- STM32最小系统板程序下载
文章目录 STM32的几种启动模式 CH340芯片 无板载CH340芯片的开发板使用串口下载程序 板载CH340芯片的开发板使用串口下载程序 不含CH340芯片的开发板下载程序流程 2022/05/1 ...
- PCB设计之STM32最小系统板
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 PCB设计之STM32最小系统板 文章目录 文章目录 一.AD版本 二.PCB之原理图绘制步骤 1.STM32F103C8T6最小系统 ...
- 【stm32】如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例
[stm32]如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例 外部硬件: stm32仿真编程器 (仿真编制器自己在网上买,不确定买哪个的可以就买我这个,图片上有牌子,自 ...
- stm32最小系统板学习笔记
最小系统板包含 内核 存储器 时钟 复位 电源管理 时钟 时钟包含两部分,内部时钟和外部时钟 同时,每一部分又分为低速和高速两种时钟 内部先不说, 外部时钟就是指的晶振,外部低速晶振是32.768Kh ...
- STC12C5A60S2最小系统板/51单片机温度显示和温度控制风扇
STC12C5A60S2最小系统板/51单片机温度显示和温度控制风扇,板载有DS18B20和TM1650+4位数码管. 项目简介 单片机课课程设计,要做一个智能温控风扇,达到设定的下限温度值就开启风扇 ...
最新文章
- docker 配置加速器
- 并发基础篇(一) 线程介绍
- DIV盒子模型介绍 div用法
- 什么是堆(Heap)
- c 语言注释格式化,linux 格式化C语言的源文件 命令:indent
- Linux配置 DNS and BIND服务配置详解--缓存服务器配置 正反向解析配置
- Arturia Prophet Mac音频插件:将Prophet 5,Prophet VS,Prophet Hybrid三种不同音乐合成器于一体
- asp和php功能,asp和php都有什么功能?
- [c/c++]小议几个写缓冲区的函数
- sql server生成不重复的时间字符串
- mysql navicat报表_使用Navicat定时备份mysql数据库和创建报表并邮件自动发送
- 华为电脑笔记本_华为笔记本电脑屏幕质量竟如此糟糕!
- sql以什么开头怎么写_如果让你给自己的人生写一个开头,你会怎么写?
- 硬件工程师面试常见问题
- python 文本分析教程_《Python机器学习基础教程》七、处理文本数据
- DATEDIF函数使用方法高级篇到期提醒等
- IM的扫码登录功能如何实现?
- Oracle 协议设配器错误解决方案
- Wallpaper Engine使用视频壁纸黑屏解决方法(window10)
- 每日一言:站在高山之巅的人