本帖最后由 Bblythe 于 2024-10-4 07:46 编辑
最近在开发中使用了沁恒的CH32V103系列MCU,性价比非常高,而且功能齐全,特别适合一些嵌入式开发项目。今天我就分享一个用CH32V103进行GPIO控制的简单应用,来实现按键控制LED的基本功能。
硬件准备- 沁恒 CH32V103开发板
- 一个按键开关
- 一颗LED灯
- 若干跳线
软件环境
实现功能
按下按键时,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的配置和使用方法。后续我还会分享更多复杂的功能应用,例如定时器中断、串口通信等。
希望这篇帖子能帮到你们,欢迎讨论交流!
|