[APM32E0] APM32E030的GPIO驱动

[复制链接]
236|4
口天土立口 发表于 2025-9-6 13:42 | 显示全部楼层 |阅读模式
1697968bbc8e19f0fc.png

APM32E030有PA/PB/PC/PD/PF等多组GPIO,可以配置为输入、输出、复用、模拟等多种功能。

本次代码基于开发板:APM32E030R Micro-EVB
现象LED:LED1(PB6)


驱动代码如下:
  1. #define GPIO_PORT   (GPIOB)
  2. #define GPIO_PIN    (GPIO_PIN_6)
  1. /*
  2. * [url=/u/brief]@brief[/url]       GPIO初始化
  3. *
  4. * @param       None
  5. *
  6. * @retval      None
  7. *
  8. */
  9. void bsp_gpio_init(void)
  10. {
  11.     GPIO_Config_T gpioConfig;
  12.    
  13.     RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOB);
  14.     GPIO_ConfigStructInit(&gpioConfig);
  15.     gpioConfig.pin     = GPIO_PIN;
  16.     gpioConfig.mode    = GPIO_MODE_OUT;
  17.     gpioConfig.outtype = GPIO_OUT_TYPE_PP;
  18.     gpioConfig.speed   = GPIO_SPEED_50MHz;
  19.     gpioConfig.pupd    = GPIO_PUPD_NO;   
  20.     GPIO_Config(GPIO_PORT, &gpioConfig);
  21. }
  1. /*
  2. * @brief       GPIO翻转
  3. *
  4. * @param       None
  5. *
  6. * @retval      None
  7. *
  8. */
  9. void bsp_gpio_toggle(void)
  10. {
  11.     if (GPIO_ReadOutputBit(GPIO_PORT, GPIO_PIN) == BIT_SET) {
  12.         GPIO_ClearBit(GPIO_PORT, GPIO_PIN);
  13.     } else {
  14.         GPIO_SetBit(GPIO_PORT, GPIO_PIN);
  15.     }
  16. }


测试代码如下:
  1. void delay(void)
  2. {
  3.     volatile int n = 0xFFFFF;
  4.     while(n--);
  5. }
  1. // 应用初始化
  2. void app_init(void)
  3. {
  4.     bsp_gpio_init();
  5. }

  6. // 应用任务
  7. void app_task(void)
  8. {
  9.     bsp_gpio_toggle();
  10.     delay();
  11. }


详细代码,请查看附件:
Toggle.zip (2.05 MB, 下载次数: 0)




黎明热忱 发表于 2025-9-7 23:28 | 显示全部楼层
GPIO的操作,我觉得官方的库函数里面的操作就够了。这再来了一层封装,倒是觉得有些过了
 楼主| 口天土立口 发表于 2025-9-8 09:05 | 显示全部楼层
黎明热忱 发表于 2025-9-7 23:28
GPIO的操作,我觉得官方的库函数里面的操作就够了。这再来了一层封装,倒是觉得有些过了 ...

做底层与应用层分离时,需要这样封装。在更换MCU时,可以方便只动底层代码而不用管应用层。
黎明热忱 发表于 2025-9-22 13:30 | 显示全部楼层
咱们做嵌入式项目,有几次会更换MCU的。
逆鳞风暴 发表于 2025-10-1 09:20 | 显示全部楼层
代码结构很清晰,不过记得在实际应用中,根据你的硬件设计,可能需要调整GPIO的配置参数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

45

帖子

0

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