模块化是一个广泛应用于软件开发、系统设计和工程等领域的概念。它指的是将一个系统或一个整体划分成互相独立且可独立操作的模块或组件,并通过定义明确的接口进行交互。
在软件开发中,模块化的概念使得程序可以分解为更小、更可管理的部分。每个模块通常都具有明确定义的功能和接口,可以独立开发、测试和维护,从而提高开发效率和代码的可重用性。此外,模块化还有助于减少系统的复杂性,提升代码的可读性和可维护性。
在系统设计和工程领域,模块化的概念有助于将复杂的系统分解为易于构建和管理的模块。这些模块可以独立设计、建造和测试,然后在组装时相互连接,形成完整的系统。通过模块化设计,可以提高系统的可扩展性、可维护性和可靠性,同时降低系统的风险和成本。
模块化是将系统划分为独立的部分,通过定义明确的接口实现交互,从而提高软件开发和系统设计的效率、可重用性和可维护性。
1.在我们的工程文件中(User)文件下新建一个子文件(LED),用于存放LED灯的.c
和.h文件,如图所示:
2.打开工程文件(new),进入主界面新建两个界面,然后保存到我们刚刚建的LED
文件夹下,分别命名为led.c和led.h,如图所示:
3.添加LED模块的路径到工程文件中,如下图所示:
4.编写(LED)代码(注意:本文以STM32F405为例)
LED函数的配置涉及到GPIO和RCC时钟
(1)开启RCC时钟(GPIOB/GPIOC)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC,ENABLE); //开启GPIOB/GPIOC
(2)初始化LED灯函数(即GPIO函数)
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
(3)初始化GPIO配置
#include "led.h"
void LED_Init(void){
//RCC开时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOA, ENABLE); // 使能GPIOB的时钟
//灯初始化
GPIO_InitTypeDef GPIO_InitStruct = {0}; //定义结构体变量
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; //浮空
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 ; //LED3--PB0
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; //LED1--PC4 LED2--PC5
GPIO_Init(GPIOC, &GPIO_InitStruct);
}
#ifndef _LED_H_
#define _LED_H_
#include "stm32f4xx.h"
#include "io_bit.h"
#define LED1 PCout(4)
#define LED2 PCout(5)
#define LED3 PBout(0)
void LED_Init(void);//声明
#endif
#include "led.h"
#include "systick.h"
int main(){
LED_Init(); //调用LED初始化函数
SysTick_Init(168); //延迟函数
while(1){
LED1 = 0;
LED2 = 0;
LED3 = 0;
Delay_ms(500);
LED1 = 1;
LED2 = 1;
LED3 = 1;
Delay_ms(500);
}
}
模块化的作用是提高代码的可重用性、降低系统的复杂性、提高开发效率和并行开发能力、增加系统的可维护性,并促进团队合作。这对于软件开发和系统设计都是非常有益的。
注意:本人所写的文章均用于记录自己的学习过程!!!!