• 使用固件库点亮led灯


    1. 项目

      使用STM32F103VE的固件库实现流水灯设计。

    2. 代码

      由于这是基于野火的视频进行学习的,项目代码在上节基础上进行编写的。

      点亮绿灯:

      main.c

    #include "stm32f10x.h"			//相当于51单片机中的 	#include <reg51.h>
    #include "bsp_led.h"
    void Delay(uint32_t count)
    {
    	for(; count!=0; count--);
    }
    
    int main(void)
    {
    	//来到这里是,系统的时钟已经被配置到72MHz了
    	LED_GPIO_Config();	//初始化LED函数
    	while(1)
    	{
    		GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);	//熄灭LED
    		Delay(0xfffff);
    		GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);	//点亮LED
    		Delay(0xfffff);
    	}
    }
    

      bsp_led.c

    #include "bsp_led.h"
    
    void LED_GPIO_Config(void)
    {
    	GPIO_InitTypeDef GPIO_InitStruct;
    	
    	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
    	GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN; 
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
    }
    

      bsp_led.h

    #ifndef __bsp_led_h
    #define __bsp_led_h
    
    #include "stm32f10x.h"
    #define LED_G_GPIO_PIN						GPIO_Pin_0
    #define LED_G_GPIO_PORT						GPIOB
    #define LED_G_GPIO_CLK						RCC_APB2Periph_GPIOB
    
    void LED_GPIO_Config(void);
    #endif /*__bsp_led._h*/
    

      点亮红蓝灯只需将对应代码替换即可

      main.c中需替换的代码:

    		GPIO_SetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);	//熄灭LED
    		Delay(0xfffff);	
    		GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);	//点亮LED
    		Delay(0xfffff);
    
    
    		
    		GPIO_SetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);	//熄灭LED
    		Delay(0xfffff);
    		GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);	//点亮LED
    		Delay(0xfffff);
    

      bsp_led.c中需要替换的代码:

    	GPIO_InitStruct.GPIO_Pin = LED_R_GPIO_PIN; 
    	RCC_APB2PeriphClockCmd(LED_R_GPIO_CLK, ENABLE);
    	GPIO_Init(LED_R_GPIO_PORT, &GPIO_InitStruct);
    	
    	GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;
    	RCC_APB2PeriphClockCmd(LED_B_GPIO_CLK, ENABLE);
    	GPIO_Init(LED_B_GPIO_PORT, &GPIO_InitStruct);
    

      bsp_led.h中需要替换的代码:

    #define LED_R_GPIO_PIN						GPIO_Pin_5
    #define LED_R_GPIO_PORT						GPIOB
    #define LED_R_GPIO_CLK						RCC_APB2Periph_GPIOB
    
    
    #define LED_B_GPIO_PIN						GPIO_Pin_1
    #define LED_B_GPIO_PORT						GPIOB
    #define LED_B_GPIO_CLK						RCC_APB2Periph_GPIOB
    

    3. 参考资料

    •   原理图
    • 函数执行流程

    (1) 使用 GPIO_InitTypeDef 在bsp_led.c中定义 GPIO_InitStruct 初始化结构体变量,以便下面用于存储 GPIO 配置。

    (2) 调用库函数 RCC_APB2PeriphClockCmd 来使能 LED 灯的 GPIO 端口时钟,该函数有两个输入参数,第一个参数用于指示要配置的时钟,如本例中的“LED_G_GPIO_CLK”;

     函数的第二个参数用于设置状态,可输入“Disable关闭或“Enable”使能时钟。

    (3) GPIO 初始化结构体赋值,把引脚初始化成推挽输出模式,其中的 GPIO_Pin 使用宏LED_X_GPIO_PIN”来赋值,使函数的实现方便移植。

    (4) 使用以上初始化结构体的配置,调用 GPIO_Init 函数向寄存器写入参数,完成 GPIO 的初始化,这里的 GPIO 端口使用“LED_X_GPIO_PORT”宏来赋值,也是为了程序移植方便。

    (5) 使用同样的初始化结构体,只修改控制的引脚和端口,初始化其它 LED 灯使用的 GPIO 脚。
    (6) 使用宏控制 RGB 灯默认关闭。

    •   
  • 相关阅读:
    Discuz! 的编码规范
    Golang 并发编程指南
    Hyrum's Law
    从数组中将变量导入到当前的符号表
    map[interface {}]interface {} yaml文件解码
    迪基福勒检验
    约定式路由
    use of internal package github.com/gokratos/kratos/v2/internal/httputil not allowed
    See https://v8.dev/blog/mathrandom for details.
    Cast a value as a certain type
  • 原文地址:https://www.cnblogs.com/kevin-hou1991/p/15425971.html
Copyright © 2020-2023  润新知