STM32入门开发操作记录(二)——LED与蜂鸣器
目录
- 一、工程模板
- 二、点亮主板
- 1. 配置寄存器
- 2. 调用库函数
- 三、LED
- 1. 闪烁
- 2. 流水灯
- 四、蜂鸣器
一、工程模板
参照第一篇,新建工程目录ProjectMould
,将先前打包好的Start
,Library
和User
文件^C^V
过来,并在Keil5
内完成器件支持包的加载,模块路径的添加和ST配置,即可得到工程模板。
以后建立新项目只需拷贝模板、重命名后,在Keil5
内打开即可。
二、点亮主板
所需器材:STM32
最小系统板、ST-Link
仿真器、母对母杜邦线4
根。
端口接线:
STM32 | ST-Link |
---|---|
GND | GND |
SWCLK | SWCLK |
SWIO | SWDIO |
3V3 | 3.3V |
正确接入后,PWR
端口01
灯常亮,PC13
端口02
灯闪烁,这是芯片内置的初始测试程序。
1. 配置寄存器
该方法需要阅读芯片参考手册,将数字信号转换为八进制传递参数。
#include "stm32f10x.h"int main(void)
{// 配置寄存器点灯RCC->APB2ENR = 0x00000010; // RCC寄存器——APB2外设时钟使能寄存器 -> 开启IO端口C时钟GPIOC->CRH = 0x00300000; // GPIO寄存器——端口配置高寄存器 -> 通用推挽输出模式:最大速度50MHzGPIOC->ODR = 0x00002000; // GPIO寄存器——端口输出数据寄存器 -> PC13端口:高电平(灭)//GPIOC->ODR = 0x00000000; // GPIO寄存器——端口输出数据寄存器 -> PC13端口:低电平(亮)
}
程序编写完成后,F7 + F8
编译并载入,就可以实现PC13
端口02
灯的控制。
2. 调用库函数
该方法形式较为复杂,但代码更具复用性和可读性,下文开始全部使用库函数编程。
#include "stm32f10x.h"int main(void)
{// 外设时钟控制:使能/失能APB2的外设时钟 -> 开启IO端口C时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);// 配置结构体参数GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 通用推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // PC13引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最大速度50MHz// 初始化端口模式 -> 初始化GPIOC外设时钟GPIO_Init(GPIOC, &GPIO_InitStructure);// 配置端口电平GPIO_SetBits(GPIOC, GPIO_Pin_13); // 高电平:熄灭//GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 低电平:点亮
}
三、LED
所需器材:STM32
最小系统板、ST-LINK
仿真器、MB-102
面包板、LED
(长脚+
,短脚-
)若干、跳线若干、杜邦线若干。
系统板初次插入面包板会十分困难,建议先用杜邦线探针逐个疏通面包板的插孔,然后在系统板两端交替施力,“跷跷板式”下压,直至完全进入。
1. 闪烁
参照第一篇,将目录Resource\程序源码\STM32Project-无注释版\1-3 Delay函数模块\
下的头文件加入System
,完成延时函数模块的添加,编译并载入以下代码。
#include "stm32f10x.h" // 器件模块
#include "Delay.h" // 延时模块// LED闪烁
int main(void)
{// 使能/失能APB2的外设时钟 -> 开启IO端口A时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 配置结构体参数GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 通用推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PA0引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最大速度50MHz// 配置端口模式 -> 初始化GPIOA外设时钟GPIO_Init(GPIOA, &GPIO_InitStructure);// 配置端口电平//GPIO_SetBits(GPIOA, GPIO_Pin_0); // 高电平:熄灭//GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 低电平:点亮// 闪烁:周期200毫秒while(1){//GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); // 低电平:点亮//Delay_ms(500);//GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); // 高电平:熄灭//Delay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0); // 低电平:点亮Delay_ms(100);GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1); // 高电平:熄灭Delay_ms(100);}
}
2. 流水灯
在A0
至A7
端口接入LED
。
#include "stm32f10x.h" // 器件模块
#include "Delay.h" // 延时模块// 流水灯
int main(void)
{// 使能/失能APB2的外设时钟 -> 开启IO端口A时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 配置结构体参数GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 通用推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // 所有引脚//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // PA引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最大速度50MHz// 配置端口模式 -> 初始化GPIOA外设时钟GPIO_Init(GPIOA, &GPIO_InitStructure);// 延时闪烁:取反 -> 低电平:点亮while(1){GPIO_Write(GPIOA, ~0x0001); // A0Delay_ms(100);GPIO_Write(GPIOA, ~0x0002); // A1Delay_ms(100);GPIO_Write(GPIOA, ~0x0004); // A2Delay_ms(100);GPIO_Write(GPIOA, ~0x0008); // A3Delay_ms(100);GPIO_Write(GPIOA, ~0x0010); // A4Delay_ms(100);GPIO_Write(GPIOA, ~0x0020); // A5Delay_ms(100);GPIO_Write(GPIOA, ~0x0040); // A6Delay_ms(100);GPIO_Write(GPIOA, ~0x0080); // A7Delay_ms(100);}
}
四、蜂鸣器
所需器材:STM32
最小系统板、ST-LINK
仿真器、MB-102
面包板、3.3V
有源蜂鸣器、跳线若干、公对公/母杜邦线若干。
端口接线:除了A15
,B3
,B4
是JLINK
的调试端口,其他端口都可用。
蜂鸣器 | 面包板 |
---|---|
GND | - |
I/O | B13 |
VCC | + |
#include "stm32f10x.h" // 器件模块
#include "Delay.h" // 延时模块// 蜂鸣器
int main(void)
{// 使能/失能APB2的外设时钟 -> 开启IO端口B时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// 配置结构体参数GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 通用推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // PB12引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最大速度50MHz// 配置端口模式 -> 初始化GPIOB外设时钟GPIO_Init(GPIOB, &GPIO_InitStructure);// 手表闹钟while(1){GPIO_ResetBits(GPIOB, GPIO_Pin_12); // 低电平:响Delay_ms(100);GPIO_SetBits(GPIOB, GPIO_Pin_12);Delay_ms(100);GPIO_ResetBits(GPIOB, GPIO_Pin_12);Delay_ms(100);GPIO_SetBits(GPIOB, GPIO_Pin_12);Delay_ms(700);}
}
相关文章:

STM32入门开发操作记录(二)——LED与蜂鸣器
目录 一、工程模板二、点亮主板1. 配置寄存器2. 调用库函数 三、LED1. 闪烁2. 流水灯 四、蜂鸣器 一、工程模板 参照第一篇,新建工程目录ProjectMould,将先前打包好的Start,Library和User文件^C^V过来,并在Keil5内完成器件支持包的…...
n3.平滑升级和回滚
平滑升级和回滚 1. 平滑升级流程2. 平滑升级和回滚案例 有时候我们需要对Nginx版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时 Nginx又在跑着业务无法停掉,这时我们就可能选择平滑升级 1. 平滑升级流程 平…...
C#WPF DialogHost.Show 弹出对话框并返回数据
在WPF中,使用DialogHost.Show方法显示一个对话框并获取返回数据,你需要定义一个对话框,并在对话框关闭时返回数据。以下是一个简单的例子: 首先,在主窗口中添加DialogHost控件: <MaterialDesign:DialogHost x:Name="dialogHost" /> 然后,创建一个对话…...

Kafka Producer发送消息流程之分区器和数据收集器
文章目录 1. Partitioner分区器2. 自定义分区器3. RecordAccumulator数据收集器 1. Partitioner分区器 clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java,中doSend方法,记录了生产者将消息发送的流程,其中有一步…...
Codeforces Round 958 (Div. 2)
C o d e f o r c e s R o u n d 958 ( D i v . 2 ) \Huge{Codeforces Round 958 (Div. 2)} CodeforcesRound958(Div.2) 文章目录 Problems A. Split the Multiset题意思路标程 Problems B. Make Majority题意思路标程 Problems C. Increasing Sequence with Fixed OR题意思路标…...

<数据集>猫狗识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:3686张 标注数量(xml文件个数):3686 标注数量(txt文件个数):3686 标注类别数:2 标注类别名称:[cat, dog] 序号类别名称图片数框数1cat118811892dog24982498 使用标…...

Figma 中文版指南:获取和安装汉化插件
Figma是一种主流的在线团队合作设计工具,也是一种基于 Web 端的设计工具。在当今的设计时代,Figma 的使用满足了每个人的设计需求,不仅可以实现在线编辑,还可以方便日常管理,有效提高工作效率。然而,相信很…...
用c语言写一个贪吃蛇游戏
贪吃蛇游戏通常涉及到终端图形编程和简单的游戏逻辑。以下是一个基本的实现示例,包括贪吃蛇的移动、食物生成、碰撞检测等功能。 1. 贪吃蛇游戏的基本结构 贪吃蛇游戏可以分为以下几个部分: 游戏地图和终端绘制:使用二维数组表示游戏地图&am…...
计算机网络入门 --网络模型
计算机网络入门 --网络模型 1.OSI七层模型 1.1 模型概念 OSI七层模型是将计算机网络通信协议划分为七个不同层次的标准化框架,每一层都负责不同功能,并从物理连接层开始处理。OSI七层网络模型如下分别为:物理层、数据链路层、网络层、传输…...

陪玩系统小程序模式APP小程序H5系统搭建开发
随着移动互联网的营及和游戏行业的蓬轨发展,陪玩服务应远而生并迅速唱起,陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁,其模式系统的搭建与开发是得尤为重要,本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程,包…...
算法训练营day72
题目:117. 软件构建 (kamacoder.com) #include<iostream> #include<unordered_map> #include<vector> #include<queue>using namespace std;int main() {int n, m;cin >> n >> m;vector<int> indegree(n, 0);unordered_…...

C语言------指针讲解(2)
目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 一、数组名的理解 通过学习,我们知道:数组名和数组首元素的地址打印出来的结果一模一样,数组…...

大数据技术基础
一、大数据平台 1.大数据平台方案步骤: ①市场上有哪些大数据平台 ②硬件、系统、业务增长等方面 ③方案是否通过 通过后:按照一期目标投入 先虚拟环境部署联系,再实际部署 《大数据架构介绍》《Hadoop架构解析》《Hadoop集群规划》 《H…...

【文心智能体】前几天百度热搜有一条非常有趣的话题《00后疯感工牌》,看看如何通过低代码工作流方式实现图片显示
00后疯感工牌体验:https://mbd.baidu.com/ma/s/6yA90qtM 目录 前言比赛推荐工作流创建工作流入口创建工作流界面工作流界面HTTP工具卡点地方 总结推荐文章 前言 前几天百度热搜有一条非常有有趣《00后疯感工牌》。 想着通过文心智能体去一键生成00后疯感工牌是不是…...

C++20中的constinit说明符
constinit说明符断言(assert)变量具有静态初始化,即零初始化和常量初始化(zero initialization and constant initialization),否则程序格式不正确(program is ill-formed)。 constinit说明符声明具有静态或线程存储持续时间(thread storage duration)的…...

Java 中的正则表达式
转义字符由反斜杠\x组成,用于实现特殊功能当想取消这些特殊功能时可以在前面加上反斜杠\ 例如在Java中当\出现时是转义字符的一部分,具有特殊意义,前面加一个反斜可以取消其特殊意义,表示1个普通的反斜杠\,\\\\表示2个…...

华为配置蓝牙终端定位实验
个人主页:知孤云出岫 目录 配置蓝牙终端定位示例 业务需求 组网需求 数据规划 配置思路 配置注意事项 操作步骤 配置文件 配置蓝牙终端定位示例 组网图形 图1 配置蓝牙终端定位示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业…...

搭建hadoop+spark完全分布式集群环境
目录 一、集群规划 二、更改主机名 三、建立主机名和ip的映射 四、关闭防火墙(master,slave1,slave2) 五、配置ssh免密码登录 六、安装JDK 七、hadoop之hdfs安装与配置 1)解压Hadoop 2)修改hadoop-env.sh 3)修改 core-site.xml 4)修改hdfs-site.xml 5) 修改s…...

pytorch-pytorch之LSTM
目录 1. nn.LSTM2. nn.LSTMCell 1. nn.LSTM 初始化函数输入参数与RNN相同,分别是input_size,hidden_size和num_layer foward函数也与RNN类似,只不过返回值除了out外,ht变为(ht,ct) 代码见下图: 2. nn.LSTMCell 初…...

jvm优化
1.jvm组成 什么是jvm,java是跨平台语言,对不同的平台(windos,linux),有不同的jvm版本。jvm屏蔽了平台的不同,提供了统一的运行环境,让java代码无需考虑平台的差异。 jdk包含jre包含…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...