当前位置: 首页 > news >正文

STM32-第一节-新建工程,GPIO输出(LED,蜂鸣器)

一、新建工程:

1.Keil中新建工程,选择开发板型号。

2.工程文件夹建立Start,Library等分类,复制模版工程中的文件到工程文件夹中。

3.在Keil中添加分组,添加文件。

4.工程选项设置:

c/c++中:Include Paths内声明所有包含头文件的分类文件夹(Start,Library等)
                Define内定义USE_STDPERIPH_DRIVER

Debug中:下拉列表选择对应调试器
                  Settings - Flash Download里选择Reset and Run。

5.在main.c文件中编程即可。

#include "stm32f10x.h"                  // Device headerint main
{return 0;
}

二、GPIO:

1.GPIO介绍:

通用输入输出口。可配置为8种模式。引脚电平 0 - 3.3V。

2.系统结构:

在stm32中,挂载在APB2总线上。

名称按照GPIOA,GPIOB等命名。

每个GPIO有16个引脚,编号0-15,GPIOA_0一般称作PA0。

3.几种模式介绍:

(1)上拉/下拉输入:不接输入时默认输入为高/低电平。

(2)模拟输入:GPIO无效,引脚直接接入ADC模块(即输入为模拟信号)

(3)开漏输出:输出时高电平为高阻态,低电平为VSS。

(4)推挽输出:输出时高电平为VDD,低电平为VSS。

 4.函数介绍:

(1)将GPIO使能:

//介绍:APB2总线时钟使能函数
//参数1:需要时钟信号的外设,具体名称可右键函数找到定义查看
//(此次为RCC_APB2Periph_GPIOA,因为要点亮PA0口的LED)
//参数2:ENABLE or DISABLE

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 (2)GPIO设置参数结构体:

    //介绍:GPIO设置参数结构体
    //结构体成员:Mode设置模式,Pin目标引脚,Speed设置输出速度
    //Mode值:GPIO_Mode_AIN模拟输入,GPIO_Mode_IPD下拉输入,GPIO_Mode_IPU上拉输入,
    //                GPIO_Mode_Out_OD开漏输出,GPIO_Mode_Out_PP推挽输出
    //Pin值:GPIO_Pin_0到GPIO_Pin_15,GPIO_Pin_All(激活多个端口,用按位或
    //Speed值:GPIO_Speed_50MHz(选这个就行)

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
(3)告诉GPIO参数:

//介绍:GPIO初始化函数
//参数1:要设置的GPIO
//参数2:一个结构体,包含GPIO的设置参数

GPIO_Init(GPIOA, &GPIO_InitStructure);
(4)GPIO写入函数:    

//介绍:设置GPIO引脚的值,set为置1,reset为置0
//参数:GPIOx,目标引脚

GPIO_SetBits(GPIOA,GPIO_Pin_13);
GPIO_ResetBits(GPIOA,GPIO_Pin_13);

 //参数:GPIOx,目标引脚,Bit_RESET或Bit_SET
 //参数:GPIOx,对应值,低位为PA0,高位为PA15

GPIO_WriteBit(GPIOA,GPIO_Pin_13,Bit_SET);
GPIO_Write(GPIOA,0x0001);

三、LED灯闪烁:

1.连线图:

2.组合代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{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;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);while (1){GPIO_ResetBits(GPIOA, GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA, GPIO_Pin_0);Delay_ms(500);}
}

四、蜂鸣器:

注意:A15,B3,B4为调试端口,不要使用。

1.蜂鸣器介绍:

低电平响,高电平不响。代码原理同上。

2.接线图:

 

http://www.dtcms.com/a/263439.html

相关文章:

  • SQuirreL SQL:一个免费的通用数据库开发工具
  • 华为云Flexus+DeepSeek征文 | 基于华为云Dify-LLM搭建知识库问答助手
  • 怎么在手机上预约心理咨询师
  • MySQL索引失效场景
  • 【软考高项论文】信息系统项目的资源管理
  • 大模型在急性左心衰竭预测与临床方案制定中的应用研究
  • 【Redis面试篇】Redis高频八股汇总
  • 长短期记忆网络(LSTM):让神经网络拥有 “持久记忆力” 的神奇魔法
  • 周赛98补题
  • Go语言安装使用教程
  • Golang的多环境配置
  • 「Java流程控制」while循环
  • Redis 实现消息队列
  • 【软考高项论文】论信息系统项目的质量管理
  • js代码01
  • 【数据分析】环境数据降维与聚类分析教程:从PCA到可视化
  • uniapp+vue2 input不显示明文密码,点击小眼睛显示或隐藏密码
  • “对象创建”模式之原型模式
  • window显示驱动开发—全屏模式
  • SuperGlue:基于图神经网络的特征匹配技术解析
  • 【Linux系统部分】在Linux命令行中写一个简单的shell外壳
  • ansible的剧本文件一般放在什么地方?
  • creo 2.0学习笔记
  • Stanford_CS224W----Machine learning with graph
  • (5)pytest-yield操作
  • 实现ModbusTCP转Profinet网关协议转换功能的网关设备
  • 【python】langgraph环境安装的曲折办法
  • 问题分解提示法:用结构化方法破解LLM复杂任务难题
  • 信创项目oracle数据库迁移到达梦数据库需要会有哪些问题?如何解决?
  • 《Redis可扩展:轻松应对数据增长与流量高峰》