云计算百科
云计算领域专业知识百科平台

STM32单片机标准库—GPIO点灯与按键输入

点灯

如上图,电流方向都为从右向左,即右边电压高于左边电压时电路导通,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,表示引脚当前输入为低电平

根据按键按下时输入的状态来判断按键是否按下。

赞(0)
未经允许不得转载:网硕互联帮助中心 » STM32单片机标准库—GPIO点灯与按键输入
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!