物联网D2——GPIO(led灯、流水灯、蜂鸣器)

GPIO简介:

在这里插入图片描述

ADC(Analog-Digtal-Converter):

物联网(IoT)中的ADC指的是模拟-数字转换器(Analog-to-Digital Converter)。在物联网应用中,传感器通常输出模拟信号,例如温度、湿度、光线等。ADC的作用是将这些模拟信号转换为数字信号,以便微控制器或其他数字设备进行处理和分析。
在物联网设备中,ADC扮演着关键角色,因为它们使得设备能够从外部环境中采集数据并进行数字化处理。这些数字化的数据可以用于各种用途,例如监测环境条件、控制设备操作、收集统计信息等。
ADC的性能和特性对于物联网应用至关重要,因为它们直接影响到数据的准确性和可靠性。在选择和设计物联网设备时,需要考虑ADC的分辨率、采样速率、功耗以及与微控制器或处理器的接口等方面的因素。
##GPIO结构:
在这里插入图片描述
在这里插入图片描述

APB2:

在物联网(IoT)中,APB2代表高性能总线(Advanced Peripheral Bus 2)。APB2是ARM Cortex-M系列微控制器中的一种外设总线,用于连接高性能外设,例如定时器、通用定时器/计数器(TIM)、串行外设接口(SPI)、I²C接口等。
APB2与其他外设总线(如APB1和AHB)一起组成了微控制器的外设总线系统,用于连接和控制外部外设。APB2通常用于连接那些需要更高性能和带宽的外设,以便它们能够与微控制器进行高速通信和数据传输。
总之,APB2在物联网设备中是一个重要的外设总线,用于连接和控制高性能外设,以满足物联网应用的需求。

GPIO8种模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

LED灯的面包板插法

在这里插入图片描述

在这里插入图片描述

后缀说明

在软件开发中,“.c” 和 “.h” 是两种常见的文件扩展名,它们通常用于C语言或C++语言项目中。它们的作用和用途有所不同:

-.c 文件:
“.c” 文件通常是C语言或C++语言源代码文件的扩展名。
这些文件包含实际的源代码,其中包括函数定义、变量声明、数据结构定义等。
“.c” 文件中的代码通常是实现特定功能或模块的具体实现。
-.h 文件:
“.h” 文件通常是C语言或C++语言头文件的扩展名,也称为头文件或者头部文件。
这些文件包含了函数声明、宏定义、类型定义等接口信息,但不包含具体的代码实现。
“.h” 文件中的内容通常被其他源文件包含(通过 #include 指令),以便在编译时将接口信息提供给其他源文件使用。
总的来说,“.c” 文件包含源代码的实际实现,而 “.h” 文件包含接口声明和定义。在软件开发中,将功能性代码与接口定义分离到不同的文件中可以提高代码的可维护性和可重用性。

新建工程注意事项(工程模板)

-不能有多个以.s结尾的后缀文件,否则会出现重复匹配的错误(error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.)
在这里插入图片描述

删除工程中间文件(项目瘦身)

在这里插入图片描述

流水LED灯

初始代码

#include "stm32f10x.h"                  // Device header
#include "MyDelay.h"   //自定义延时函数
#include "Delay.h"     //官方延迟函数

int main(void){
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //时钟使能
  //配置GPIO端口
  //定义引脚A0
  GPIO_InitTypeDef GI0;
  GI0.GPIO_Mode = GPIO_Mode_Out_PP;        //推完输出模式
  GI0.GPIO_Pin = GPIO_Pin_0;   //这里可以替换为: GI.GPIO_Pin = GPIO_Pin_All; 所有引脚都可以输出电平;或者按位或操作,某几个引脚能输出电平
  GI0.GPIO_Speed = GPIO_Speed_50MHz;
   //定义引脚A1
  GPIO_InitTypeDef GI1;
  GI1.GPIO_Mode = GPIO_Mode_Out_PP;        //推完输出模式
  GI1.GPIO_Pin = GPIO_Pin_1;
  GI1.GPIO_Speed = GPIO_Speed_50MHz;
   //定义引脚A2
  GPIO_InitTypeDef GI2;
  GI2.GPIO_Mode = GPIO_Mode_Out_PP;        //推完输出模式
  GI2.GPIO_Pin = GPIO_Pin_2;
  GI2.GPIO_Speed = GPIO_Speed_50MHz;
   //定义引脚A3
  GPIO_InitTypeDef GI3;
  GI3.GPIO_Mode = GPIO_Mode_Out_PP;        //推完输出模式
  GI3.GPIO_Pin = GPIO_Pin_3;
  GI3.GPIO_Speed = GPIO_Speed_50MHz;
   //定义引脚A4
  GPIO_InitTypeDef GI4;
  GI4.GPIO_Mode = GPIO_Mode_Out_PP;        //推完输出模式
  GI4.GPIO_Pin = GPIO_Pin_4;
  GI4.GPIO_Speed = GPIO_Speed_50MHz;
  //初始化引脚
  GPIO_Init(GPIOA,&GI0);
  GPIO_Init(GPIOA,&GI1);
  GPIO_Init(GPIOA,&GI2);
  GPIO_Init(GPIOA,&GI3);
  GPIO_Init(GPIOA,&GI4);
//     GPIO_ResetBits(GPIOA,GPIO_Pin_0);      //A0设置为低电平
//     GPIO_SetBits(GPIOA,GPIO_Pin_0);        //A0设置为高电平
//     GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);     //任意设置A0的高/低电平
   while(1){  
     //A0
      GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET); //引脚低电平,灯亮,电流正极流向负极                                   
     Delay_s(1);    
     GPIO_WriteBit(GPIOA ,GPIO_Pin_0,Bit_SET); //引脚高电平 ,灯灭,电流不流动
     Delay_s(1);    
     //A1 
     GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET); //引脚低电平,灯亮,电流正极流向负极                                   
     Delay_s(1);
     GPIO_WriteBit(GPIOA ,GPIO_Pin_1,Bit_SET); //引脚高电平 ,灯灭,电流不流动
     Delay_s(1);
     //A2 
     GPIO_WriteBit(GPIOA,GPIO_Pin_2,Bit_RESET); //引脚低电平,灯亮,电流正极流向负极                                   
     Delay_s(1);
     GPIO_WriteBit(GPIOA ,GPIO_Pin_2,Bit_SET); //引脚高电平 ,灯灭,电流不流动
     Delay_s(1);
     //A3 
     GPIO_WriteBit(GPIOA,GPIO_Pin_3,Bit_RESET); //引脚低电平,灯亮,电流正极流向负极                                   
     Delay_s(1);
     GPIO_WriteBit(GPIOA ,GPIO_Pin_3,Bit_SET); //引脚高电平 ,灯灭,电流不流动
     Delay_s(1);
     //A4 
     GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_RESET); //引脚低电平,灯亮,电流正极流向负极                                   
     Delay_s(1);
     GPIO_WriteBit(GPIOA ,GPIO_Pin_4,Bit_SET); //引脚高电平 ,灯灭,电流不流动
     Delay_s(1);
   }
}

改进后的流水灯代码

#include "stm32f10x.h"                  // Device header
#include "MyDelay.h"   //自定义延时函数
#include "Delay.h"     //官方延迟函数
#include "stdio.h"
int main(void){
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //时钟使能
  //配置GPIO端口
  //定义引脚A0
  GPIO_InitTypeDef GI;
  GI.GPIO_Mode = GPIO_Mode_Out_PP;        //推完输出模式
  GI.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;  //按位或操作,指定端口输出电平
  GI.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GI);
//     GPIO_ResetBits(GPIOA,GPIO_Pin_0);      //A0设置为低电平
//     GPIO_SetBits(GPIOA,GPIO_Pin_0);        //A0设置为高电平
//     GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);     //任意设置A0的高/低电平
  //     GPIO_Write(GPIOA,GPIO_Pin_x);     //设置Ax引脚的高电平
   while(1){  
      GPIO_Write(GPIOA,~0x0001);       //取反的操作是因为推挽输出下,引脚低电平灯亮,取反实现指定位低电平
     Delay_ms(500);
      GPIO_Write(GPIOA,~0x0002);
     Delay_ms(500);
      GPIO_Write(GPIOA,~0x0004);
     Delay_ms(500);
      GPIO_Write(GPIOA,~0x0008);
     Delay_ms(500);
      GPIO_Write(GPIOA,~0x0010);
     Delay_ms(500);
   }
}

蜂鸣器

#include "stm32f10x.h"                  // Device header
#include "MyDelay.h"   //自定义延时函数
#include "Delay.h"     //官方延迟函数
#include "stdio.h"
int main(void){
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //时钟使能
  //配置GPIO端口
  //定义引脚A0
  GPIO_InitTypeDef GI;
  GI.GPIO_Mode = GPIO_Mode_Out_PP;        //推完输出模式
  GI.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_12;  //按位或操作,指定端口输出电平
  GI.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GI);
  
  int i=100;
  //蜂鸣器响 ,低电平有效
  while(1){ 
     GPIO_WriteBit(GPIOA,GPIO_Pin_12,Bit_RESET);
     Delay_ms(i);
    i+=10;
      GPIO_Write(GPIOA,~0x000C);
     Delay_ms(i);
    i+=10;
     GPIO_Write(GPIOA,~0x000C);
     Delay_ms(i);
    i+=10;
  }
   
}

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值