STM32 点亮一个LED,LED流水灯

目录

电路连接

GPIO口的配置

        1.RCC开启GPIO时钟

        2.初始化GPIO

        3.使用库函数操作GPIO输出高低电平     

–代码

–实验效果


电路连接

 将LED连接到STM32的PA0上。实物发光二极管长引脚接正极;短引脚接PA0上。

GPIO口的配置

        因为LED负极接在STM32上,所以我们的任务就是控制单片机对应的I/O口输出高低电平来控制LED亮灭。所以IO口应该选择推挽输出模式。此时LED连接状态为低电平导通。(I/O的基本结构与8种输入输出模式区别)。

        接下来来配置GPIO。配置GPIO需要有三步

        1.RCC开启GPIO时钟

                在rcc.h文件里可以找到函数定义。因为GPIO是挂在APB2上的,我们要找到APB2外设时钟控制。

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

                右键,点击函数定义(Go To Definition),可以看到两个参数可以选的值,第一个值可以选以下值

             RCC_APB2Periph_AFIO,        RCC_APB2Periph_GPIOA,        RCC_APB2Periph_GPIOB,
             RCC_APB2Periph_GPIOC,     RCC_APB2Periph_GPIOD,        RCC_APB2Periph_GPIOE,
             RCC_APB2Periph_GPIOF,      RCC_APB2Periph_GPIOG,        RCC_APB2Periph_ADC1,
             RCC_APB2Periph_ADC2,       RCC_APB2Periph_TIM1,            RCC_APB2Periph_SPI1,
             RCC_APB2Periph_TIM8,         RCC_APB2Periph_USART1,      RCC_APB2Periph_ADC3,
             RCC_APB2Periph_TIM15,       RCC_APB2Periph_TIM16,          RCC_APB2Periph_TIM17,
             RCC_APB2Periph_TIM9,         RCC_APB2Periph_TIM10,          RCC_APB2Periph_TIM11

                第二个值可以选择    ENABLE or DISABLE 。   选择黑色加粗的参数,就配置好时钟了。

        2.初始化GPIO

                用结构体参数来初始化GPIO口。先定义一个结构体变量,在进行赋值,

                 最后调用          GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)     函数进行初始化。

    GPIO_InitTypeDef    GPIO_InitStructure;                              //定义结构体变量
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //定义完成后输入GPIO_InitStructure.  后面会出现Mode ,Pin,Speed变量并配置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                     // GPIO_Mode_Out_PP

    GPIO_Init(GPIOA, &GPIO_InitStructure);                //最后调用GPIO_Init() 完成初始化

        3.使用库函数操作GPIO输出高低电平     

                完成初始化后就可以通过库函数来操作输出高低电平了,同样打开stm32f10x_gpio.h可以找到函数声明,右键(goto definition)可以到 .c 文件里查找函数定义。

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);                             //置高电平1
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);                         //置低电平0
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);  //写入高低电平, BitAction BitVal 可写 Bit_RESET 置0

                                                                                                                                                                                           或者Bit_SET   置1


–代码

LED闪烁代码    其中Delay_ms  延时函数 ,主循环中, 三种配置方式都可以使LED闪烁。


 LED流水灯代码     其中的   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;   选择了16个端口全部打开。

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */

或者可以将其配置成     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2  | GPIO_Pin_3……GPIO_Pin_7;

因为由定义可知,GPIO_Pin_0 是 0x0001 相当于二进制 0000 0000 0000 0001

                             GPIO_Pin_1 是 0x0002 相当于二进制 0000 0000 0000 0010

所以 GPIO_Pin_0

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月2日
下一篇 2022年7月2日

相关推荐