提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、模块化编程
这种模块化的方式实际就是main主函数去调用子函数,这样main主函数就会简洁很多; 实例是点亮led灯,只是写法上用了函数封装的方式;
首先在工程里给子函数建立一个led的驱动代码文件夹Hardware用来存放硬件驱动,这里单独存放他的.c和.h文件
2、打开“工程管理”→新建一个组也叫Hardware, 3、打开“工程选项设置”→把Hardware文件夹添加到头文件路径列表 4、然后在Hardwear这里右键→添加新的.c文件,用来存放驱动程序的主题代码 同样在Hardwear这里右键→添加新的.h文件,用来存放这个驱动程序可以对外提供的函数或变量声明 5、main.c
#include "stm32f10x.h"
#include "Delay.h"
#include "LED.h"
int main(void)
{
LED_Init();
while(1)
{
LED_ON();
Delay_ms(100);
LED_OFF();
Delay_ms(100);
}
}
6、LED.c
#include "stm32f10x.h"
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 ;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
void LED_ON(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
void LED_OFF(void)
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
7、LED.h #ifndef __LED_H//如果LED.h没有定义 #define __LED_H//那么就自定义LED.h
void LED_Init(void); void LED_ON(void); void LED_OFF(void); //这些都是要引用的函数,所以要把名复制在LED.h头文件里 #endif 8、这些名字都要对应上
9、接线图
10、现象出现PIn0口不停的闪烁
二、初始化配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
所以类型是InitTypeDef,名字是InitStruct
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 ;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
备注
|