RP2040(树莓派Pico) GPIO

GPIO可以用来操作任何东西,只要你愿意,并且GPIO反应速度够,就可以模拟出任何时序,并且GPIO一般可以复用于其他功能,可以从以前的图中看到.

不过Pico的GPIO能力还真是非常基础的,具体如下:

  • GPIO 输入/输出/翻转
  • GPIO 中断(上升沿/下降沿/低电平/高电平)
  • GPIO 翻转输入逻辑/翻转输入逻辑/强制高/强制低
  • GPIO 上拉/下拉
  • GPIO 复用ALT功能

官方给出的几个例子都很简单,而且也用到了批量变更IO之类的功能,可以说功能覆盖来说比较完善了,这里重点讲下API,以及和GPIO配合实现时许的一些技巧.

主要IO函数:

  • gpio_set_function/gpio_get_function => 设置复用功能
  • gpio_set_pulls/gpio_disable_pulls => 设置/取消上下拉
  • gpio_set_outover/gpio_set_inover => 设置/取消强制输出高/低/翻转/正常,就比如写1,然后设置了翻转,则输出0.
  • gpio_set_inover/gpio_set_oeover => 设置/取消强制输入高/低/翻转/正常,就比如外面是1,然后设置了反转,则输入0.
  • gpio_set_input_enabled => 设置GPIO为输入模式
  • gpio_set_irq_enabled => 设置中断输入模式(支持OR运算)
  • gpio_set_irq_enabled_with_callback => 设置中断输入模式(支持OR运算),如果发生中断调用Callback.
  • gpio_set_dormant_irq_enabled => 设置中断发生时唤醒低功耗模式.
  • gpio_acknowledge_irq => 标记INT响应,即清中断标志位.
  • gpio_init/gpio_init_mask => (批量)初始化为普通IO
  • gpio_get/gpio_get_all => (批量)获取IO状态
  • gpio_set_mask/gpio_clr_mask/gpio_xor_mask => 批量设置高/设置低/翻转IO
  • gpio_put_masked/gpio_put_all/gpio_put => 批量/整体/单独改写IO状态
  • gpio_set_dir_out_masked/gpio_set_dir_in_masked/gpio_set_dir_masked => 批量改写IO方向
  • gpio_set_dir_all_bits/gpio_set_dir => 全部/单独改写IO方向
  • gpio_is_dir_out/gpio_get_dir => 获取IO当前是输入还是输出

用GPIO模拟时序最重要的就是两个函数.

sleep_us()
sleep_ms()

使用MASK功能翻转IO(其实是软件实现的)可以更方便,更高效率操作并口接口的外设,比如屏幕.

最后,有一条关于GPIO的勘误(RP2040-E6),在SDK中已经修复关于上电ADC引脚作为输入模式的问题.

发表评论

邮箱地址不会被公开。 必填项已用*标注