IO初始化框架参考:
#include "includes.h"
#include "TrafficLights_GPIO_Config.h"
//* 如果在其它c文件已定义,则去掉本行第一个斜杠,以屏蔽这个函数定义
//STM32F0系列设置GPIO
void SetGPIO(GPIO_TypeDef *Port,
u16 pin,
GPIOSpeed_TypeDef speed,
GPIOMode_TypeDef mode,
GPIOOType_TypeDef OType,
GPIOPuPd_TypeDef PuPd)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = pin;
GPIO_InitStructure.GPIO_Mode = mode;
GPIO_InitStructure.GPIO_OType = OType;
GPIO_InitStructure.GPIO_PuPd = PuPd;
GPIO_InitStructure.GPIO_Speed = speed;
GPIO_Init(Port, &GPIO_InitStructure);
}
// */
const GPIO_Define_Struct TrafficLights_Gpio[TrafficLights_GPIO_Count] = {
{GPIOA, GPIO_Pin_0 ,GPIO_Speed_10MHz, GPIO_Mode_OUT, GPIO_OType_PP, GPIO_PuPd_NOPULL, HC595_CLK}, //PA0 定义为HC595_CLK
{GPIOA, GPIO_Pin_1 ,GPIO_Speed_10MHz, GPIO_Mode_IN, GPIO_OType_OD, GPIO_PuPd_UP, KEY1}, //PA1 定义为KEY1
{GPIOA, GPIO_Pin_2 ,GPIO_Speed_10MHz, GPIO_Mode_OUT, GPIO_OType_PP, GPIO_PuPd_NOPULL, HC595_DATA}, //PA2 定义为HC595_DATA
{GPIOA, GPIO_Pin_3 ,GPIO_Speed_10MHz, GPIO_Mode_IN, GPIO_OType_OD, GPIO_PuPd_UP, HC595_DI}, //PA3 定义为HC595_DI
{GPIOA, GPIO_Pin_4 ,GPIO_Speed_10MHz, GPIO_Mode_OUT, GPIO_OType_PP, GPIO_PuPd_NOPULL, HC595_SHIFT}, //PA4 定义为HC595_SHIFT
{GPIOA, GPIO_Pin_5 ,GPIO_Speed_10MHz, GPIO_Mode_OUT, GPIO_OType_OD, GPIO_PuPd_UP, KEY_LED3}, //PA5 定义为KEY_LED3
{GPIOA, GPIO_Pin_6 ,GPIO_Speed_10MHz, GPIO_Mode_OUT, GPIO_OType_OD, GPIO_PuPd_UP, KEY_LED2}, //PA6 定义为KEY_LED2
{GPIOA, GPIO_Pin_7 ,GPIO_Speed_10MHz, GPIO_Mode_OUT, GPIO_OType_OD, GPIO_PuPd_UP, KEY_LED1}, //PA7 定义为KEY_LED1
{GPIOB, GPIO_Pin_1 ,GPIO_Speed_10MHz, GPIO_Mode_OUT, GPIO_OType_PP, GPIO_PuPd_NOPULL, RUN_LED}, //PB1 定义为RUN_LED
{GPIOA, GPIO_Pin_9 ,GPIO_Speed_10MHz, GPIO_Mode_AF, GPIO_OType_PP, GPIO_PuPd_NOPULL, TX1}, //PA9 定义为TX1
{GPIOA, GPIO_Pin_10,GPIO_Speed_10MHz, GPIO_Mode_IN, GPIO_OType_OD, GPIO_PuPd_UP, RX1}, //PA10定义为RX1
};
void TrafficLights_GPIO_Configuration(void)//初始化所用到的GPIO
{
u8 i,num=TrafficLights_GPIO_Count;
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1); //串口1:TXD
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1); //串口1:RXD
for(i=0;i<num;i++)
{
if(TrafficLights_Gpio[i].no != i)//检查管脚编号是否正确
{
// DebugPrint("错误的管脚编号!");
while(1)
;
}
else
{
SetGPIO(TrafficLights_Gpio[i].Port,TrafficLights_Gpio[i].pin,TrafficLights_Gpio[i].speed,TrafficLights_Gpio[i].mode,TrafficLights_Gpio[i].otype,TrafficLights_Gpio[i].pupd);
}
}
//添加其它初始化(如重映射、拉高或拉低某些IO等等)……
}