这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【CH582M】通用GPIO输入操作

共1条 1/1 1 跳转至

【CH582M】通用GPIO输入操作

专家
2026-08-11 20:49:15     打赏

前面学习了GPIO口的知识后,本体继续GPIO口输入功能的实践。设置GPIO为输入,只需要执行:

GPIOA_ModeCfg(GPIO_Pin_x, GPIO_ModeIN_PU);    // x= 1 - 15 

GPIOB_ModeCfg(GPIO_Pin_x, GPIO_ModeIN_PU); // x= 1 - 23 

第二个参数是设置是否上拉、下拉的。可选的值:

    GPIO_ModeIN_Floating, // 0 - 浮空输入

    GPIO_ModeIN_PU,       // 1 - 上拉输入

    GPIO_ModeIN_PD,       // 2 - 下拉输入

依旧要注意帮避开开发板上已经被使用的功能GPIO。不过这里需要说明的是,虽然BOOT、RESET已经被连接到指定的GPIO口,但这个设置需要配合GPIO功能复用设置。比如RESET,在没有启用IO口复用的场合,可以作为普通IO口使用的。

image.png

本次实践中,我们使用RESET按钮所在PB23作为输入,根据这个输入值改编PB4连接的LED。代码如下:

#include "CH58x_common.h"

#define LED_PIN     GPIO_Pin_4

int main(void)
{
    // 1. 设置系统时钟为 60MHz(必须)
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    
    // 2. 初始化 GPIO
    // 先置高电平(LED 灭,假设低电平点亮),再配置为推挽输出
    GPIOB_SetBits(LED_PIN);
    GPIOB_ModeCfg(LED_PIN, GPIO_ModeOut_PP_5mA);
    
    // 配置PB23为上拉输入,对应RESET按键
    GPIOB_SetBits(GPIO_Pin_23);
    GPIOB_ModeCfg(GPIO_Pin_23, GPIO_ModeIN_PU);            
    while(1)
    {
        if (GPIOB_ReadPortPin(GPIO_Pin_23)) {
            GPIOB_ResetBits(LED_PIN);
        } else {
            GPIOB_SetBits(LED_PIN);
        }
        DelayMs(50);
    }
}

编译后下载程序到开发板,运行。

此时按下RESET按钮,蓝色LED应该亮。松开按钮,蓝色LED应该灭。





关键词: CH582M     GPIO     输入    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]