深圳规划建设局网站,云服务器有哪些,网络营销与市场营销的关系,合肥高端网站建设设计GPIO#xff1a;General Purpose Input Output #xff08;通用输入/输出#xff09;。 GPIO最经典应用#xff1a;LED灯。
先看电路。声明#xff1a;参考正点原子战舰开发板。 与LED串联的电阻称为限流电阻。
限流电阻计算公式#xff1a;R(U-LED压降)/20ma。
U为LE…GPIOGeneral Purpose Input Output 通用输入/输出。 GPIO最经典应用LED灯。
先看电路。声明参考正点原子战舰开发板。 与LED串联的电阻称为限流电阻。
限流电阻计算公式R(U-LED压降)/20ma。
U为LED工作电压LED一般最大电流为20ma。
在此R3.3-0.7/0.02130Ω。
因此本次示例中限流电阻阻值大于130Ω才不会烧坏LED。 再看代码。
GPIO初始化。
void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);GPIO_InitStructure.GPIO_Pin GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure);GPIO_SetBits(GPIOB, GPIO_Pin_5);GPIO_InitStructure.GPIO_Pin GPIO_Pin_5;GPIO_Init(GPIOE, GPIO_InitStructure);GPIO_SetBits(GPIOE, GPIO_Pin_5);
}
LED应用
void HW_Led0_Off(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_5); //设置GPIO输出1
}void HW_Led0_on(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_5); //设置GPIO输出0
}void HW_Led1_Off(void)
{GPIO_SetBits(GPIOE, GPIO_Pin_5); //设置GPIO输出1
}void HW_Led1_on(void)
{GPIO_ResetBits(GPIOE, GPIO_Pin_5); //设置GPIO输出0
}
思考为什么IO输出低电平时LED亮而不是输出高电平
思路 1、由于单片机的I/O口的结构决定了它灌电流能力较强而拉电流能力比较弱即IO口的低平驱动能力较强而高电平驱动能力较差 2、为了简化单片机接口的设计。高电平驱动和低电平驱动是同样的效果另外低电平驱动也简化了控制代码避免了单片机上电复位时端口置高电平后对led的影响 从STM32中文参考手册内得知STM32的GPIO可配置为八种模式。 1、浮空输入(Input floating) 2、上拉输入(Input pull-up) 3、下拉输入(Input pull-down) 4、模拟输入(Analog) 5、开漏输出(Output open-drain) 6、推挽式输出(Output push-pull) 7、推挽式复用功能(Alternate function push-pull) 8、开漏复用功能(Alternate function open-drain)
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;
驱动LED使用的是推挽输出。推挽电路push-pull就是两个不同极性晶体管间连接的输出电路。 简单理解推挽和开漏的区别驱动能力不同。推挽驱动能力强。
复用意思是GPIO不作为普通IO而是特殊功能使用比如ADC、USART等。
更深层次的研究可参考链接博客https://blog.csdn.net/techexchangeischeap/article/details/72569999 引脚输出速度有3种
typedef enum
{ GPIO_Speed_10MHz 1,GPIO_Speed_2MHz, GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
GPIO的速度应该与应用匹配。速度配置越高噪声越大功耗越大。
比如配置为串口应用波特率为115200此时GPIO的速度配置为2MHz就够了既省电也噪声小。
I2C接口400K波特率若想把余量留大些可以配置为10MHz。
SPI接口18M或9M需要选用50MHz的GPIO速度。 输入模式的讲解在下一篇笔记。
特殊应用重映射I/O在后续如有项目需要再添加入笔记。