点灯

如上图,电流方向都为从右向左,即右边电压高于左边电压时电路导通,LED灯亮。此电路需要注意最大过流不能超过LED和电阻的最大过流值。假设LED压降为1.8V,我们使他的过流不超过5mA。即(高压-压降)/5mA=最小阻值。(3.3V-1.8V)/5mA=300R。电阻要大于300R,除非电路需要,3.3V时一般电阻值都为1K或者10K等。
0805封装LED的过流阈值
常规小功率0805贴片LED的额定工作电流为20mA,超过25mA就属于过流状态,绝对最大电流不建议超过30mA。
长期过流会导致LED发热严重、光衰速度大幅加快,寿命急剧缩短;短时间瞬时过流可承受100mA左右(持续时间需控制在0.1ms以内),但不建议常规设计中使用该参数。日常做STM32这类MCU的指示灯驱动时,通常将工作电流控制在5~10mA就可以获得足够的亮度,既安全又能降低IO口的负载压力。
0805封装LED的正向压降
压降数值随发光颜色不同有明显区分,常规参数范围如下:
红、黄、橙色系:正向压降1.8V~2.2V,典型值约2.0V
蓝、绿、白、紫色系:正向压降2.8V~3.6V,典型值约3.0V
双色/全彩的0805LED则会对应不同颜色的两路压降参数,比如红绿双色的红光通道压降2.0~2.2V、绿光通道压降3.0~3.2V。
最常见的0805电阻,标准额定功率为 1/8W(0.125W)
程序举例
//管脚初始化
void LED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
/*开启GPIOA的时钟,因为PA0属于GPIOA端口*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/*选择要控制的GPIO引脚为PA0*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*设置引脚速率为50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*调用库函数,初始化GPIOA的PA0引脚*/
GPIO_Init(GPIOA, &GPIO_InitStructure);
//初始化时关灯
/* 关闭PA0对应的LED灯,将其电平设置为高电平,假设高电平灭灯 */
GPIO_SetBits(GPIOA, GPIO_Pin_0);
}
/* 将其电平设置为高电平*/
GPIO_SetBits(GPIOA, GPIO_Pin_0);
/* 将其电平设置为低电平*/
GPIO_SetBits(GPIOA, GPIO_Pin_0);
管脚输出控制灯的亮灭跟实际电路有关。
按键输入

如上图,IO接10K电阻然后接按键,按键另一端分别是3.3V与GND,按键输入其实就是检测按键接收到的高压或者低压。10K电阻用于限流,防止烧坏芯片。
程序举例
//初始化管脚
void Key_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启按键端口的时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//选择按键的引脚为PA0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
// 设置按键的引脚为浮空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//使用结构体初始化按键
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*检测是否有按键按下 */
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1)
{
}
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0)
{
}
GPIO_ReadInputDataBit函数读取单个GPIO引脚输入电平状态的核心库函数
返回值对应宏值1,表示引脚当前输入为高电平
返回值对应宏值0,表示引脚当前输入为低电平
根据按键按下时输入的状态来判断按键是否按下。
网硕互联帮助中心



评论前必须登录!
注册