【库文件汉化】1- 基于AiPi-Eyes-DU 点亮LED

[复制链接]
查看795 | 回复8 | 2023-10-7 21:27:34 | 显示全部楼层 |阅读模式
介绍

最近在学习小安派,手里也收到了来自于安信可的小安派S1,但是由于S1上并没有GPIO引出,因此为了验证芯片功能,我还同时购买了AIPI-Eyes-DU。此系列将GPIO口全部引出。非常方便学习和验证。
本章节将学习使用如何操作和使用GPIO。
首先要使用GPIO需要引入对应的GPIO头文件,文件位于 aithinker_Ai-M6X_SDK\drivers\lhal\include\bflb_gpio.h (当然也可以不引入,这样的话需要手动的根据BL616芯片手册结合原理图操作寄存器)。我这里为了方便学习使用,自己并且结合Chatgpt对bflb_gpio.h 做了注释的汉化,更方便大家的理解。
同时,我每使用一个外设资源便会将对应的外设资源汉化,并且上传到Github,非专业翻译,请大家以官方手册为准。如果有不准确的地方欢迎提Issue,我好加以修复。
汉化如下所示:
  1. /**
  2. * @brief 初始化GPIO引脚。
  3. *
  4. * @param [in] dev 设备句柄
  5. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  6. * @param [in] cfgset GPIO配置掩码
  7. */
  8. void bflb_gpio_init(struct bflb_device_s *dev, uint8_t pin, uint32_t cfgset);

  9. /**
  10. * @brief 使能GPIO引脚并设置为输入浮空状态。
  11. *
  12. * @param [in] dev 设备句柄
  13. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  14. */
  15. void bflb_gpio_deinit(struct bflb_device_s *dev, uint8_t pin);

  16. /**
  17. * @brief 设置GPIO引脚为高电平。
  18. *
  19. * @param [in] dev 设备句柄
  20. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  21. */
  22. void bflb_gpio_set(struct bflb_device_s *dev, uint8_t pin);

  23. /**
  24. * @brief 设置GPIO引脚为低电平。
  25. *
  26. * @param [in] dev 设备句柄
  27. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  28. */
  29. void bflb_gpio_reset(struct bflb_device_s *dev, uint8_t pin);

  30. /**
  31. * @brief 从GPIO引脚读取电平状态。
  32. *
  33. * @param [in] dev 设备句柄
  34. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  35. * @return true表示高电平,否则为低电平
  36. */
  37. bool bflb_gpio_read(struct bflb_device_s *dev, uint8_t pin);

  38. /**
  39. * @brief 写入0~31号GPIO引脚。
  40. *
  41. * @param [in] dev 设备句柄
  42. * @param [in] val 0~31号GPIO引脚的值
  43. */
  44. void bflb_gpio_pin0_31_write(struct bflb_device_s *dev, uint32_t val);

  45. /**
  46. * @brief 写入32~63号GPIO引脚。
  47. *
  48. * @param [in] dev 设备句柄
  49. * @param [in] val 32~63号GPIO引脚的值
  50. */
  51. void bflb_gpio_pin32_63_write(struct bflb_device_s *dev, uint32_t val);

  52. /**
  53. * @brief 从0~31号GPIO引脚读取电平。
  54. *
  55. * @param [in] dev 设备句柄
  56. * @return 0~31号GPIO引脚的电平
  57. */
  58. uint32_t bflb_gpio_pin0_31_read(struct bflb_device_s *dev);

  59. /**
  60. * @brief 从32~63号GPIO引脚读取电平。
  61. *
  62. * @param [in] dev 设备句柄
  63. * @return 32~63号GPIO引脚的电平
  64. */
  65. uint32_t bflb_gpio_pin32_63_read(struct bflb_device_s *dev);

  66. /**
  67. * @brief 配置GPIO引脚中断。
  68. *
  69. * @param [in] dev 设备句柄
  70. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  71. * @param [in] trig_mode 触发中断的模式
  72. */
  73. void bflb_gpio_int_init(struct bflb_device_s *dev, uint8_t pin, uint8_t trig_mode);

  74. /**
  75. * @brief 使能或禁用GPIO引脚中断。
  76. *
  77. * @param [in] dev 设备句柄
  78. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  79. * @param [in] mask true表示禁用,false表示使能
  80. */
  81. void bflb_gpio_int_mask(struct bflb_device_s *dev, uint8_t pin, bool mask);

  82. /**
  83. * @brief 获取GPIO引脚中断状态。
  84. *
  85. * @param [in] dev 设备句柄
  86. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  87. * @return true表示有中断,false表示无中断
  88. */
  89. bool bflb_gpio_get_intstatus(struct bflb_device_s *dev, uint8_t pin);

  90. /**
  91. * @brief 清除GPIO引脚中断状态。
  92. *
  93. * @param [in] dev 设备句柄
  94. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  95. */
  96. void bflb_gpio_int_clear(struct bflb_device_s *dev, uint8_t pin);

  97. /**
  98. * @brief 配置GPIO引脚为UART功能。
  99. *
  100. * @param [in] dev 设备句柄
  101. * @param [in] pin GPIO引脚,使用 @ref GPIO_PIN
  102. * @param [in] uart_func UART功能,使用 @ref GPIO_UART_FUNC
  103. */
  104. void bflb_gpio_uart_init(struct bflb_device_s *dev, uint8_t pin, uint8_t uart_func);

  105. /**
  106. * @brief 控制GPIO功能。
  107. *
  108. * @param [in] dev 设备句柄
  109. * @param [in] cmd 功能命令,使用 @ref GPIO_CMD
  110. * @param [in] arg 用户数据
  111. * @return 失败时返回负数的错误值。
  112. */

  113. int bflb_gpio_feature_control(struct bflb_device_s *dev, int cmd, size_t arg);
复制代码
点亮RGB led灯,AiPi-Eyes-DU 默认出厂烧录了PWM RGB灯闪烁的代码,既然我们要学习肯定要自己去点亮一个小灯泡。
代码如下所示:
  1. #include "bflb_gpio.h"
  2. #include "board.h"
  3. struct bflb_device_s *gpio;
  4. int main(void)
  5. {
  6.     board_init();
  7.    

  8.     /**
  9.      * @brief 从系统库函数中获取支持的外设,支持获取的外设资源如下
  10.       adc dac ef_ctrl gpio uart0 uart1 spi0 pwm0 dma0_ch0
  11.       dma0_ch1 dma0_ch2 dma0_ch3 dma0_ch4 dma0_ch5 dma0_ch6
  12.       dma0_ch7 i2c0 timer0 timer1 rtc aes sha trng pka
  13.       watchdog irtx irrx sdio2
  14.      */
  15.     gpio = bflb_device_get_by_name("gpio");
  16.    
  17.     //初始化GPIO端口,并且指定当前的端口模式
  18.     bflb_gpio_init(gpio, GPIO_PIN_14,GPIO_OUTPUT |GPIO_PULLUP);
  19.     bflb_gpio_init(gpio, GPIO_PIN_15,GPIO_OUTPUT |GPIO_PULLUP);
  20.     bflb_gpio_init(gpio, GPIO_PIN_12,GPIO_OUTPUT |GPIO_PULLUP);

  21.     //Enable GPIO 即高电平
  22.     bflb_gpio_set(gpio,GPIO_PIN_14);
  23.     bflb_gpio_set(gpio,GPIO_PIN_12);
  24.     bflb_gpio_set(gpio,GPIO_PIN_15);
  25.     while(1){};
  26. }
复制代码
实验现象如下:
微信图片_20231007212625.jpg


GitHub仓库: https://github.com/mz1874/bl616-chinese-header-files.git

回复

使用道具 举报

王乐乐 | 2023-10-8 09:02:38 | 显示全部楼层
打卡学习
回复

使用道具 举报

496199544 | 2023-10-8 10:56:32 | 显示全部楼层
学习
回复

使用道具 举报

AXK123456 | 2023-10-8 13:15:51 来自手机 | 显示全部楼层
向大佬学习
回复 支持 反对

使用道具 举报

iiv | 2023-10-8 19:42:30 | 显示全部楼层
王哥666
回复

使用道具 举报

妖猊 | 2023-10-8 20:57:05 | 显示全部楼层
王哥666
回复

使用道具 举报

jkernet | 2023-10-8 22:18:15 | 显示全部楼层
yyds
回复

使用道具 举报

lsrly | 2023-10-9 11:51:09 | 显示全部楼层
大佬,多发点这个
回复 支持 反对

使用道具 举报

san | 2024-1-11 14:41:21 | 显示全部楼层
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则