打印
[单片机芯片]

基于沁恒CH32V103 MCU的简单GPIO控制应用

[复制链接]
1193|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Bblythe|  楼主 | 2024-10-4 07:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Bblythe 于 2024-10-4 07:46 编辑

最近在开发中使用了沁恒的CH32V103系列MCU,性价比非常高,而且功能齐全,特别适合一些嵌入式开发项目。今天我就分享一个用CH32V103进行GPIO控制的简单应用,来实现按键控制LED的基本功能。
硬件准备
  • 沁恒 CH32V103开发板
  • 一个按键开关
  • 一颗LED灯
  • 若干跳线

软件环境
  • Keil IDE
  • CH32V103的标准库

实现功能



按下按键时,LED亮起;松开按键时,LED熄灭。通过这个例程,大家可以熟悉GPIO输入和输出的基本操作。

步骤
  • 配置GPIO端口:需要将一个GPIO口配置为输入(接按键),另一个GPIO口配置为输出(接LED)。使用CH32V103标准库非常简单,只需几行代码。
  • 初始化代码:这里是GPIO的初始化代码。我们选择了PA0作为按键输入,PA1作为LED输出。
#include "ch32v10x.h"

// GPIO初始化函数
void GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    // 开启GPIOA时钟
    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);

    // 配置PA1为输出模式(LED)
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

int main(void)
{
    // 初始化GPIO
    GPIO_Init();

    while(1)
    {
        // 检测按键状态,按下时点亮LED
        if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) // 按键按下
        {
            GPIO_SetBits(GPIOA, GPIO_Pin_1); // LED点亮
        }
        else
        {
            GPIO_ResetBits(GPIOA, GPIO_Pin_1); // LED熄灭
        }
    }
}

代码说明:

  • 我们通过 GPIO_ReadInputDataBit() 来检测按键的状态,如果按键被按下(低电平),则调用 GPIO_SetBits() 点亮LED;否则,调用 GPIO_ResetBits() 关闭LED。
  • GPIO_Mode_IN_FLOATING 用于配置GPIO输入为浮空输入模式,GPIO_Mode_Out_PP 用于配置输出为推挽输出模式,适合控制LED灯。

总结:


这个小项目可以帮助大家快速上手沁恒CH32V103 MCU的GPIO控制。通过简单的按键控制LED,你可以深入了解GPIO的配置和使用方法。后续我还会分享更多复杂的功能应用,例如定时器中断、串口通信等。


希望这篇帖子能帮到你们,欢迎讨论交流!





使用特权

评论回复
沙发
菜鸟的第一步| | 2024-10-10 14:11 | 只看该作者
就是外部中断加上GPIO的高低电平输出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

3621

帖子

0

粉丝