正式开端学STM32,就同C51相同流水灯开端了……….
启用一个GPIO 口 的流程:(片子已近跑起来了)
设时钟—写装备文件—调用初始化函数
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//
3.1.1RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B |C,ENABLE):使能APB2总线外设时钟
3.1.2RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C,DISABLE):开释GPIO复位
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD;//开漏输出
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;//50M时钟速度
//gpio A组中的 哪些引脚 什么形式速度
typedefstruct
{
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
typedef enum
{ GPIO_Mode_AIN =0x0,//模仿输入
GPIO_Mode_IN_FLOATING =0x04,//浮空输入
GPIO_Mode_IPD =0x28,//下拉输入
GPIO_Mode_IPU =0x48,//上拉输入
GPIO_Mode_Out_OD =0x14,//开漏输出
GPIO_Mode_Out_PP =0x10,//推挽输出
GPIO_Mode_AF_OD =0x1C,//开漏复用功用
GPIO_Mode_AF_PP =0x18//推挽复用功用
}GPIOMode_TypeDef;
库写的适当谨慎 运用了枚举,也可见IO 的功用之多功用之强~!
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化IO口 装备完毕。
/***********************************************************************************************
#defineLED1_ONGPIO_ResetBits(GPIOA,GPIO_Pin_8)
#define LED1_OFFGPIO_SetBits(GPIOA,GPIO_Pin_8)
GPIO_ResetBits便是低电平0GPIO_SetBits 便是高电平 1
留意我这 是开漏。
手册中
开漏形式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状况(P-MOS从不被激活)。
─
推挽形式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。
牛人说
推挽输出:能够输出高,低电平,衔接数字器材。
输出 0 时,N-MOS 导通,P-MOS 高阻 ,输出0。
输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需求外部上拉电路)。
>>开漏输出:输出端适当于三极管的集电极.要得到高电平状况需求上拉电阻才行. 适合于做电流型的驱动,其吸收电流的才干相对强(一般20ma以内).
输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。
输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需求外部上拉电路);此形式能够把端口作为双向IO运用。
1.1I/O口的输出形式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分组织了多个响应速度不同的输出驱动电路,用户能够依据自己的需求挑选适宜的驱动电路)。经过挑选速度来挑选不同的输出驱动模块,到达最佳的噪声控制和降低功耗的意图。高频的驱动电路,噪声也高,当不需求高的输出频率时,请选用低频驱动电路,这样十分有利于进步体系的EMI功用。当然假设要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。关键是GPIO的引脚速度跟运用匹配(引荐10倍以上?)。比方:
1.1.1关于串口,假设最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。
1.1.2关于I2C接口,假设运用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不行,这时能够选用10M的GPIO引脚速度。
1.1.3关于SPI接口,假设运用18M或9M波特率,用10M的GPIO的引脚速度明显不行了,需求选用50M的GPIO的引脚速度。
1.4一切端口都有外部中止才干。为了运用外部中止线,端口有必要装备成输入形式。
1.5GPIO口的装备具有上锁功用,当装备好GPIO口后,能够经过程序锁住装备组合,直到下次芯片复位才干解锁