[单片机芯片] 基于沁恒CH32V103 MCU的简单GPIO控制应用

[复制链接]
 楼主| 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输出。
  1. #include "ch32v10x.h"

  2. // GPIO初始化函数
  3. void GPIO_Init(void)
  4. {
  5.     GPIO_InitTypeDef GPIO_InitStructure;

  6.     // 开启GPIOA时钟
  7.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  8.     // 配置PA0为输入模式(按键)
  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  11.     GPIO_Init(GPIOA, &GPIO_InitStructure);

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

  18. int main(void)
  19. {
  20.     // 初始化GPIO
  21.     GPIO_Init();

  22.     while(1)
  23.     {
  24.         // 检测按键状态,按下时点亮LED
  25.         if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) // 按键按下
  26.         {
  27.             GPIO_SetBits(GPIOA, GPIO_Pin_1); // LED点亮
  28.         }
  29.         else
  30.         {
  31.             GPIO_ResetBits(GPIOA, GPIO_Pin_1); // LED熄灭
  32.         }
  33.     }
  34. }

代码说明:

  • 我们通过 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的高低电平输出
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

5747

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

145

主题

5747

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部