0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AS32X601驱动系列教程 GPIO_点亮LED详解

安芯 来源:jf_29981791 作者:jf_29981791 2025-05-23 16:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式开发的奇妙旅程中,GPIO(通用输入输出接口)作为芯片与外部世界交互的重要桥梁,扮演着不可或缺的角色。从简单的 LED 灯控制,到复杂的外设通信,GPIO 的灵活运用为开发者打开了无限可能的大门。自本章开始,正式开始用代码控制AS32x601各外设完成功能配置。

需要注意的是,AS32X601提供了8组GPIO,其中GPIOA~GPIOG寄存器操作完全一致,但在使用GPIOH的时候,寄存器列表中间少了一个32位寄存器,因此在使用过程中容易造成误操作,我们在驱动库中已经做了映射,若想要自行操作寄存器进行控制,需要格外注意这一点。

另外,在芯片的IO复用表中,其默认功能并非全部都是GPIO,还包含了MUL类型,使用此类型IO时,需要先将复用配置为GPIO功能,在完成接下来的操作。

硬件设计

AS32x601评估板板载3颗LED灯用于IO输出评估,原理图如下:

根据上图可以知道,LED“正极”接电源,“负极”接GPIOG三个引脚,当IO拉低时,LED亮,IO输出高时,LED灭,据此设计控制逻辑。

程序设计

操作流程

  1. 开led对应IO时钟
  2. 检查对应引脚默认配置,是否需要复用调整
  3. 初始化gpio结构体
  4. 控制gpio输出

主要代码分析

复制上一小节的工程模板,在工程目录下新建Bsp文件夹用于存放led相关控制代码,在IAR工程界面添加led.c和led.h文件。

在led.c文件中添加相应头文件,之后编写led初始化代码。

  1. /*
    • Function: User_LED_Init
    • Description: Configure LED GPIO.
    • Return: None.
  2. */
  3. void User_LED_Init()
  4. {
  5. GPIO_InitTypeDef GPIO_InitStructure;
  6. GPIOG_CLK_ENABLE();
  7. /* GPIOB Configure */
  8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
  9. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  10. GPIO_InitStructure.GPIO_OType = GPIO_Out_PP;
  11. GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_9mA;
  12. GPIO_Init(GPIOG, &GPIO_InitStructure);
  13. }

在上述代码清单中,根据电路原理图,led与mcu的PG10、14、15引脚相连,因此我们首先打开GPIOG的时钟使能;

之后初始化gpio结构体,通过或操作同时对三个引脚进行初始化,配置推挽输出,同时配置io输出能力位9mA。

接下来,我们用宏定义的形式编写LED的控制函数。

  1. #define LED1_ON() GPIO_WriteBits(GPIOG, GPIO_Pin_15, GPIO_OCtrl_Vol)
  2. #define LED1_OFF() GPIO_WriteBits(GPIOG, GPIO_Pin_15, GPIO_OCtrl_Voh)
  3. #define LED1_TOGGLE() GPIO_ToggleBits(GPIOG, GPIO_Pin_15)
  4. #define LED2_ON() GPIO_WriteBits(GPIOG, GPIO_Pin_14, GPIO_OCtrl_Vol)
  5. #define LED2_OFF() GPIO_WriteBits(GPIOG, GPIO_Pin_14, GPIO_OCtrl_Voh)
  6. #define LED2_TOGGLE() GPIO_ToggleBits(GPIOG, GPIO_Pin_14)
  7. #define LED3_ON() GPIO_WriteBits(GPIOG, GPIO_Pin_10, GPIO_OCtrl_Vol)
  8. #define LED3_OFF() GPIO_WriteBits(GPIOG, GPIO_Pin_10, GPIO_OCtrl_Voh)
  9. #define LED3_TOGGLE() GPIO_ToggleBits(GPIOG, GPIO_Pin_10)

在led.h文件中添加如上代码,AS32驱动库中包含了引脚控制输出函数以及引脚翻转控制函数,通过宏的形式完成led控制名称的转换,便于理解。

此时,代码并不算完成,之后我们需要查询芯片设计手册中,GPIOG所在的总线,在系统时钟配置函数中需要打开对应总线时钟,具体方式参考上一小节。

最后,编写主函数代码,控制三个led灯流水闪烁。

  1. void main()
  2. {
  3. Systemclock_Init();
  4. delay_init(SMU_ClocksStruct.AXIBus0_Frequency/1000000);
  5. /* Initialize LED */
  6. User_LED_Init();
  7. while(1)
  8. {
  9. LED1_ON();LED2_OFF();LED3_OFF();
  10. delay_ms(100);
  11. LED1_OFF();LED2_ON();LED3_OFF();
  12. delay_ms(100);
  13. LED1_OFF();LED2_OFF();LED3_ON();
  14. delay_ms(100);
  15. }
  16. }

补充

在这个代码中调用了一个延时函数,该函数位于库文件System目录下,利用RISCV的CSR定时器,可以理解为系统定时器编写的精确延时函数,因此需要对此函数进行初始化,并传入当前系统时钟。

  1. delay_init(SMU_ClocksStruct.AXIBus0_Frequency/1000000);

SMU_ClocksStruct.AXIBus0_Frequency就是在系统时钟初始化函数中最后一个函数调用所读回来的所有总线时钟,由于Core时钟与AXIBus0同频,所以在此处就利用该参数进行延时初始化,除1000000的作用是,延时计算的时候单位为MHz,所以把后边的数量级给除掉。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    244

    文章

    24800

    浏览量

    693986
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19287

    浏览量

    405453
  • GPIO
    +关注

    关注

    16

    文章

    1337

    浏览量

    56675
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MAX7370:8x8 按键开关控制器与 LED 驱动的卓越之选

    保护级别的 8x8 按键开关控制器与 LED 驱动/GPIO 芯片。它能为微处理器提供多达 64 个按键开关的管理功能,同时还具备可选的 GPIO
    的头像 发表于 05-11 17:30 462次阅读

    TPS6106x系列LED驱动芯片:特性、应用与设计要点

    TPS6106x系列LED驱动芯片:特性、应用与设计要点 在电子设备的设计中,LED驱动芯片的选
    的头像 发表于 02-27 15:35 303次阅读

    揭秘MAX8595:高效36V升压转换器,点亮LED新视界!

    揭秘MAX8595X/MAX8596X:高效36V升压转换器,点亮LED新视界! 在电子设备的世界里,LED作为显示和照明的关键组件,其
    的头像 发表于 02-04 15:20 406次阅读

    深入解析RK平台GPIO驱动:从原理到调试,开发者必看指南

    GPIO(通用输入输出)作为嵌入式系统中最基础也最常用的硬件接口,是连接芯片与外部设备的 “桥梁”。从简单的 LED 控制、按键检测,到复杂的传感器通信,都离不开 GPIO 的支持。在瑞芯微(RK
    的头像 发表于 02-03 15:53 1442次阅读
    深入解析RK平台<b class='flag-5'>GPIO</b><b class='flag-5'>驱动</b>:从原理到调试,开发者必看指南

    探索MAX7306:多功能I2C/SMBus接口GPIOLED驱动

    探索MAX7306/MAX7307:多功能I2C/SMBus接口GPIOLED驱动器 在电子设计领域,对于高效、灵活的GPIO扩展和LED
    的头像 发表于 02-02 15:55 329次阅读

    MAX7304:集成ESD保护的I2C接口16端口GPIOLED驱动

    MAX7304:集成ESD保护的I2C接口16端口GPIOLED驱动器 在电子设备的设计中,GPIO扩展器和LED
    的头像 发表于 02-02 15:50 369次阅读

    探索DRV601立体声线路驱动器:特性、应用与设计要点

    探索DRV601立体声线路驱动器:特性、应用与设计要点 在电子设备的音频处理领域,线路驱动器起着至关重要的作用。德州仪器(TI)推出的DRV601立体声线路
    的头像 发表于 02-02 15:45 432次阅读

    UCC2753x系列单通道高速栅极驱动器:特性、应用与设计要点详解

    UCC2753x系列单通道高速栅极驱动器:特性、应用与设计要点详解 引言 在电子电路设计中,栅极驱动器扮演着至关重要的角色,它能够有效
    的头像 发表于 01-09 16:05 1174次阅读

    AS32X601的I2C模块操作EEPROM详解

    国科安芯推出的AS32X601系列MCU芯片内置的I2C模块提供了符合工业标准的两线串行制接口,可用于MCU和外部I2C设备的通讯。I2C总线使用两条串行线:串行数据线SDA和串行时钟线SCL
    的头像 发表于 12-21 21:39 1813次阅读
    <b class='flag-5'>AS32X601</b>的I2C模块操作EEPROM<b class='flag-5'>详解</b>

    基于 AS32X601 微控制器的定时器模块(TIM)技术研究与应用实践

    摘要: 本文全面介绍了国科安芯推出的AS32X601系列微控制器的定时器模块(TIM),包括其系统架构、功能特性、应用场景以及工程实践要点。通过对芯片的详细分析,揭示了其高性能运行的基础。本文详细
    的头像 发表于 08-19 16:44 1126次阅读

    【创龙TLT113-MiniEVM开发板试用体验】点亮LED

    源(3.3V),负极连接GPIO引脚。 点亮条件 :GPIO输出低电平时形成电流通路(低电平驱动)或高电平驱动(根据电路设计)。 本开发板
    发表于 08-05 21:36

    AS32X601芯片Flash擦写调试技术解析

    本文聚焦于 国科安芯推出的AS32X601 芯片的 Flash 擦写调试工作,深入剖析其片内 Flash 存储器架构,详述 Flash 控制器功能与运作机制。通过对 Flash 指令集的解读,梳理
    的头像 发表于 07-22 13:47 1030次阅读
    <b class='flag-5'>AS32X601</b>芯片Flash擦写调试技术解析

    AS32X601系列MCU硬件最小系统设计与调试方案探析

    推出的AS32X601 系列 MCU 为例,深入探讨硬件最小系统设计要点以及硬件调试方案,旨在为相关领域的研究人员和技术人员提供有价值的参考。
    的头像 发表于 07-22 13:46 943次阅读

    澎湃微电子LED显示驱动IC PTH036X的特性

    PTH036x属于澎湃微超显(X-Spin)产品系列,是内部由一个低功耗32bit MCU,与一个LED驱动器组成的SOC芯片产品。32bi
    的头像 发表于 07-10 15:14 2213次阅读

    【VisionFive 2单板计算机试用体验】GPIO点亮LED

    测试板卡GPIO点亮LED灯。 一、搭建环境 1.1、文档 按照官方的应用文档搭建测试环境GPIO点亮
    发表于 06-30 07:31