本人领悟的,也一直在使用,感觉真的方便又好用。
我们在编写main.c代码时,其实可以先建一个main.h头文件,当要增加新驱动时,只要编写在main.h就可以了,
这样会使得main.c非常的清爽、简洁,比如我的main.h其中一部分
#include "stm32f10x_i2c.h" //ST的I2C库 #include "stm32f10x_gpio.h"//ST的GPIO库 void I2Cx_Config(void) { /*-----------------I2C1的配置------------------*/ I2C_DeInit(I2C1);//I2C1恢复成默认值 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);//打开I2C1外设时钟 I2C_InitTypeDef I2C_InitStruct = {//预设I2C1外设的6个参数 100000, //1...时钟100KHZ I2C_Mode_SMBusHost, //2...主模式 I2C_DutyCycle_2, //3...2比1占空比 0xf0, //4...指定第一个设备自己的地址(从机)。 I2C_Ack_Enable, //5...启用或禁用确认 I2C_AcknowledgedAddress_7bit};//6....指定是否确认7位或10位地址。 I2C_Init(I2C1, &I2C_InitStruct);//将预设参数初始化到I2C1 I2C_Cmd(I2C1, ENABLE); //使能I2C1 /*-----------------I2C1用到的PIN配置------------------*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //0 打开GPIOB的外设时钟 GPIO_InitTypeDef GPIO_InitStructure2 = {//预设GPIOB外设的3个参数 GPIO_Pin_6|GPIO_Pin_7, //1 参数PIN6、7 GPIO_Speed_10MHz, //2 参数10M速度 GPIO_Mode_AF_OD }; //3 参数AF_OD复用模式 GPIO_Init(GPIOB, &GPIO_InitStructure2); //将3个参数初始化到GPIOB }
然后在main.c中加入main.h
#include "main.h"
int main(void) { unsigned int t; //计数变量 USARTx_Config(); //初始化USARTx I2Cx_Config(); //初始化I2C1 GPIOx_Init(); //初始化GPIOX NVIC_Configuration(); //初始化中断嵌套 while(1) { printf("控制值:%d\n",t); //打印出来,方便进行查看 t=t+1; //假设这是数值 __NOP(); //断点 } }
看过UCOS II的伙计们应该会发现,其实它这个OS也类似这样的,说明这个思路非常好用的。
但是这个main.h只能给main.c包含使用,假如有定义了变量什么的,其他文件也包含的话,
一定会报错duplicate definitions for IAR报错,伙们们,要小心点哦。