首页 > 其他分享 >单片机知多少之STM32F103-GPIO输出应用篇

单片机知多少之STM32F103-GPIO输出应用篇

时间:2024-07-08 20:55:56浏览次数:7  
标签:STM32F103 Pin 引脚 端口 GPIOB 单片机 InitStructure GPIO

示例:选择GPIOB做流水灯

控制逻辑

将8个发光二极管的负端分别接入PB0~PB7,正端接5V电源,当配置GPIO为低电平时,回路导通,二极管开始工作,亮灯;当配置GPIO为高电平时,回路等电位断开,二极管不工作,灭灯,使GPIO输出按一定顺序执行,即流水灯。

编写代码
变量定义:

GPIO_InitTypeDef GPIO_InitStructure;:定义一个GPIO_InitTypeDef类型的结构体变量GPIO_InitStructure。这个结构体用于配置GPIO端口的参数,如引脚号、模式、速度等。

使能GPIOA端口的时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);:通过调用这个函数来使能GPIOB端口的时钟。在STM32中,每个外设(包括GPIO端口)在使用之前都需要先使能其时钟。RCC_APB2Periph_GPIOB是一个宏,表示GPIOB端口所属的时钟域,ENABLE是一个宏定义,表示使能该时钟。

配置GPIOB端口的参数:

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;:设置GPIO_InitStructure结构体中的GPIO_Pin成员,指定要初始化的引脚。这里通过位或操作(|)选择了GPIOA端口的0到7号引脚。

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;:设置引脚的模式为推挽输出(Push-Pull Output)。

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;:设置引脚的最大输出速度为50MHz。

初始化GPIOB端口:

GPIO_Init(GPIOB, &GPIO_InitStructure);:调用GPIO_Init函数,将GPIOB端口和GPIO_InitStructure结构体的地址作为参数传入。

设置GPIOA端口的初始状态:

GPIO_SetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);:调用GPIO_SetBits函数,将GPIOB端口的0到7号引脚全部设置为高电平。这通常是为了确保在程序开始执行时,LED是熄灭的(如果LED是低电平点亮的话)。然而,如果LED是高电平点亮的,那么这一步就需要改为使用GPIO_ResetBits函数来将引脚设置为低电平。

示例代码

led.c

void LED_Init(void)

 { GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);

 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;

//选择对应的引脚

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化

GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|~

GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7 ); }

main.c

int main()

{

    // 初始化 LED 引脚

    LED_Init();

    while (1)

    {

        for(int i=7; i>=0; i--)

        {

            // 操作 GPIOB 端口

            GPIO_Write(GPIOB, ~(1 << i));

            // 延时

            delay_ms(10);

        }        

    }

}

标签:STM32F103,Pin,引脚,端口,GPIOB,单片机,InitStructure,GPIO
From: https://blog.csdn.net/m0_71945335/article/details/140278615

相关文章

  • 蓝桥杯单片机学习总结(Day1 实现LED闪烁)
    标题一:通过SM74HC138译码器打开控制8个LED灯的寄存器标题二:编程思路标题三:总结 打开LED寄存器: 由开发板的原理图可知其8个LED灯的寄存器开关为SM74HC138译码器(以下用38译码器称代)的Y4口,该38译码器的输入端P25~P27,其分别对应P25->SM74HC138_A、P26->SM74HC138_B、P27->S......
  • 这一篇让你更了解GPIO_Init()函数,了解CNF和MODE是如何配置输入输出模式,GPIOX_CR端口配置
    1GPIO初始化配置函数 GPIO_Init(GPIOC,&GPIOInitStruct); 1.1  正常的初始化函数代码1.2解读GPIO_Init(GPIOC,&GPIOInitStruct); 所以GPIOC的地址为  0x40000000+0x00010000+0x00001000=0x40011000STM32F103C8T6通用与复用功能I/O(GPIO与AFIO)、......
  • STM32标准库函数功能简介————GPIO篇
    1.void GPIO_DeInit (GPIO_TypeDef*GPIOx);函数解释:将指定的GPIO端口恢复到默认设置。2.voidGPIO_AFIODeInit(void);函数解释:将外设映射设置恢复为默认状态,以重新初始化外设映射配置。3.voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);函数......
  • 张高兴的 MicroPython 入门指南:(二)GPIO 的使用
    目录什么是GPIO使用方法使用微动开关点亮板载LED硬件需求电路代码参考什么是GPIOGPIO是GeneralPurposeInputOutput的缩写,即“通用输入输出”。RaspberryPiPico左右两侧各有一列GPIO引脚,Pico通过这两列引脚进行一些硬件上的扩展,与传感器进行交互等等。简单的......
  • 51单片机:多功能时钟(附代码详解)
    一、基本功能介绍:1.时钟系统(TIME-24h)1.可根据当地时间自由修改!(非联网)按下按键S1                          默认时间05:12:01(小彩蛋*1)           使用定时器完成,保证在执行其他功能时,这套时钟......
  • 基于51单片机的交通灯设计(含文档、源码与proteus仿真,以及系统详细介绍)
    目录引言实验环境原理图仿真图1设计任务与方案选择2 系统设计3 系统调试4 总结5 参考文献资源下载引言近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核......
  • 零基础STM32单片机编程入门(八)定时器PWM输入实战含源码视频
    文章目录一.概要二.PWM输入框架图三.CubeMX配置一个PWM输入例程1.硬件准备2.创建工程3.调试四.CubeMX工程源代码下载五.讲解视频链接地址六.小结一.概要脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用单片机数字输出(1或0)来对外部模拟......
  • 基于Linux/ARM/单片机利用状态机对多个按键进行扫描实现短按或者长按
    1)Linux/ARM/单片机入门级按键扫描程序设计,分享给将要学习或者正在学习Linux/ARM/单片机开发的同学。2)内容属于原创,若转载,请说明出处。3)提供相关问题有偿答疑和支持。学习Linux/ARM/单片机的同学都会学习到一个知识点,就是按键扫描,本课题基于SigmaStar的平台SSC375芯片SOC详细......
  • 834、基于51单片机的车内换气扇的控制系统(温度,气体,数码管)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能1、单片机型号:STC89C52/51、AT89C52/51、AT89S52/51等等都可通用。2、车内换气扇的控制系统。3、按键设置阈值,通过数码管显示相关......
  • 833、基于51单片机的测量仪(电压,电平,频率,LCD1602)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能基于单片机的简易测量仪(测量电压、TTL电平01,频率等)设计-一个简易的测量设备,用两支表笔(1个是GND,一个是输入信号)测量,可用于......