STM32入门开发操作记录(二)——LED与蜂鸣器

目录

  • 一、工程模板
  • 二、点亮主板
    • 1. 配置寄存器
    • 2. 调用库函数
  • 三、LED
    • 1. 闪烁
    • 2. 流水灯
  • 四、蜂鸣器

一、工程模板

  参照第一篇,新建工程目录ProjectMould,将先前打包好的StartLibraryUser文件^C^V过来,并在Keil5内完成器件支持包的加载模块路径的添加ST配置,即可得到工程模板。

  以后建立新项目只需拷贝模板、重命名后,在Keil5内打开即可。
请添加图片描述

二、点亮主板

  所需器材:STM32最小系统板、ST-Link仿真器、母对母杜邦线4根。
  端口接线:

STM32ST-Link
GNDGND
SWCLKSWCLK
SWIOSWDIO
3V33.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. 流水灯

  在A0A7端口接入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有源蜂鸣器、跳线若干、公对公/母杜邦线若干。
  端口接线:除了A15B3B4JLINK的调试端口,其他端口都可用。

蜂鸣器面包板
GND-
I/OB13
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);}
}

请添加图片描述

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

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

相关文章

【ARM】CCI集成指导整理

目录 1.CCI集成流程 2.CCI功能集成指导 2.1CCI结构框图解释 Request concentrator Transaction tracker Read-data Network Write-data Network B-response Network 2.2 接口注意项 记录一下CCI500的ACE slave interface不支持的功能: 对于ACE-Lite slav…

手机和电脑通过TCP传输(一)

一.工具 手机端:网络调试精灵 电脑端:野火网络调试助手 在开始通信之前,千万要查看一下电脑的防火墙是否关闭,否则可能会无法通信 在开始通信之前,千万要查看一下电脑的防火墙是否关闭,否则可能会无法通信…

vue3+TS从0到1手撸后台管理系统

1.路由配置 1.1路由组件的雏形 src\views\home\index.vue(以home组件为例) 1.2路由配置 1.2.1路由index文件 src\router\index.ts //通过vue-router插件实现模板路由配置 import { createRouter, createWebHashHistory } from vue-router import …

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(一)-3GPP TS 23.256 技术规范概述

3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及A2X(Aircraft-to-Everything)服务的支持。 3GPP TS 23.256 技术规范: 以下是文档的核心内容总结: UAV系…

类和对象的简述(c++篇)

开局之前,先来个小插曲,放松一下: 让我们的熊二来消灭所有bug 各位,在这祝我们: 放松过后,开始步入正轨吧。爱学习的铁子们: 目录: 一类的定义: 1.简述: 2…

【Springboot】新增profile环境配置应用启动失败

RT 最近接手了一个新的项目,为了不污染别人的环境,我新增了一个自己的环境配置。结果,在启动的时候总是失败,就算是反复mvn clean install也是无效。 问题现象 卡住无法进行下一步 解决思路 由于之前都是能启动的&#xff0c…

Spring Boot项目的404是如何发生的

问题 在日常开发中,假如我们访问一个Sping容器中并不存在的路径,通常会返回404的报错,具体原因是什么呢? 结论 错误的访问会调用两次DispatcherServlet:第一次调用无法找到对应路径时,会给Response设置一个…

SpringBoot使用开发环境的application.properties

在Spring Boot项目中,application.properties 或 application.yml 文件是用于配置应用程序外部属性的重要文件。这些文件允许定制你的应用,而无需更改代码。根据不同的运行环境,可以通过创建以application-{profile}.properties格式命名的文件…

MMFewshot框架少样本目标检测配置学习(二)

教程 0:MMFEWSHOT 检测概述 在 MMFewShot 中,有三个用于获取数据的重要组件: Datasets:ann_cfg从少数镜头设置中加载注释并过滤图像和注释。 Dataset Wrappers:确定采样逻辑,例如根据查询图像采样支持图像…

<Rust>egui部件学习:如何在窗口及部件显示中文字符?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第一篇博…

2024-07-16 Unity插件 Odin Inspector5 —— Conditional Attributes

文章目录 1 说明2 条件特性2.1 DisableIf / EnableIf2.2 DisableIn / EnableIn / ShowIn / HideIn2.3 DisableInEditorMode / HideInEditorMode2.4 DisableInInlineEditors / ShowInInlineEditors2.5 DisableInPlayMode / HideInPlayMode2.6 ShowIf / HideIf2.7 ShowIfGroup / …

鸿蒙架构之AOP

零、主要内容 AOP 简介ArkTs AOP 实现原理 JS 原型链AOP实现原理 AOP的应用场景 统计类: 方法调用次数统计、方法时长统计防御式编程:参数校验代理模式实现 AOP的注意事项 一、AOP简介 对于Android、Java Web 开发者来说, AOP编程思想并不…

java智慧工地云平台源码,基于BIM+AI智能大数据中心和云平台的智慧工地监管平台

智慧工地云平台源码,智慧工地系统源码,工程管理系统APP源码, “智慧工地”基于BIM(建筑信息模型)AI(人工智能)智能大数据中心和云平台,围绕建筑工程项目全生命周期,集成安…

Linux下如何安装配置Graylog日志管理工具

Graylog是一个开源的日志管理工具,可以帮助我们收集、存储和分析大量的日志数据。它提供了强大的搜索、过滤和可视化功能,可以帮助我们轻松地监控系统和应用程序的运行情况。 在Linux系统下安装和配置Graylog主要包括以下几个步骤: 准备安装…

Scratch编程乐园:108课打造小小编程大师

《Scratch少儿趣味编程108例(全视频微课版)》以Scratch 3.6版本为基础,通过108个案例详细介绍了运用Scratch软件制作动画、游戏等趣味作品的方法,充分培养孩子的想象力和创造力。本书共分为9章,第1章概述Scratch下载、…

ArrayList.subList的踩坑

需求描述&#xff1a;跳过list中的第一个元素&#xff0c;获取list中的其他元素 原始代码如下&#xff1a; List<FddxxEnterpriseVerify> companyList fddxxEnterpriseVerifyMapper.selectList(companyQueryWrapper);log.info("获取多个法大大公司数据量为&#…

OMS 2.0至3.0升级项目成功案例:红袖女装

近日&#xff0c;巨益科技成功助力女装品牌红袖完成OMS 3.0升级&#xff0c;并顺利通过项目验收。此次升级通过优化系统架构、提高数据处理能力和实现多系统集成&#xff0c;红袖品牌显著提升了订单处理速度、库存管理精度和客户满意度&#xff0c;实现了运营效率和服务质量的全…

基于Python+Flask+SQLite的豆瓣电影可视化系统

FlaskMySQLEcharts 基于PythonFlaskSQLite的豆瓣电影可视化系统 Echarts 不支持登录注册&#xff0c;并且信息存储在数据库中 不含爬虫代码&#xff0c;或爬虫代码已失效 简介 基于PythonFlaskMySQL的豆瓣电影可视化系统&#xff0c;采用Echart构建图表&#xff0c;支持自定…

python 算法题之,统计不存在的值的累加和

s list(map(int, input().split())) k int(input()) s.sort() print(s)if s:m 0 # 统计找到的不存在的数的个数res 0 # 累值t 1 # 当前数i 0 # 列表中当前下标while True:if i < len(s) and s[i] t: # 如果当前数存在i 1else: # 当前数不存在res (res t) % …

第九课:服务器发布(静态nat配置)

一个要用到静态NAT的场景&#xff0c;当内网有一台服务器server1&#xff0c;假如一个用户在外网&#xff0c;从外网访问内网怎么访问呢&#xff0c;无法访问&#xff0c;这是因为外网没办法直接访问内网&#xff0c;这时候需要给服务器做一个静态NAT。 静态NAT指的是给服务器…