555|0

12

帖子

0

TA的资源

一粒金砂(中级)

嘉楠K230 AI开发板测评2--GPIO、LED、按键、定时器 [复制链接]

  1. GPIO介绍
            K230开发板总共引出了46个引脚,有常见的通用GPIO口、4路PWM、2路串口、1路SPI、I2C、I2S和4路的ADC,提供5V和3.3V的电源输出引脚对外供电,用常见的type-c引脚对开发板供电,方便简洁,GPIO引脚图如图1所示。
    wd_161040id420wfjndndh604.png
                                        图 1 K230 GPIO引脚图
  2. 点亮第一个LED
          CanMV K230有一个与GPIO直接连接的可控制LED蓝灯,其连接到GPIO52,其原理图如图2所示,从电路图可以看出,当GPIO口为高电平时,蓝灯被点亮。
    wd_161040z50uuir35h07bhzi.png
                                              图 2 LED灯原理图
          由于K230功能多,在引脚有限的情况下,会复用引脚功能,通过FPIO库(也叫现场可编程IO阵列,库介绍网址2.8 FPIOA 模块API手册 — K230 CanMV (canaan-creative.com))实现对引脚的不同功能的选择。
          代码编写流程如下:
    wd_161040kggmpipmp6w2anvw.png
            首先引入FPIO模块,对GPIO52引脚的功能设置为IO口功能。引入Pin对象设置IO口,通过Pin(id, mode, pull) 设置IO口的引脚,模式与电阻配置,value([X])设置输出电平。
            完整代码如下:
    '''
    实验名称:点亮LED蓝灯
    版本:v1.0
    作者:01Studio
    实验平台:01Studio CanMV K230
    教程:wiki.01studio.cc
    '''
    from machine import Pin #导入Pin模块
    from machine import FPIOA
    import time
    #将GPIO52配置为普通GPIO
    fpioa = FPIOA()
    fpioa.set_function(52,FPIOA.GPIO52)
    LED=Pin(52,Pin.OUT) #构建led对象,GPIO52,输出
    LED.value(1) #点亮LED,也可以使用led.on()
         实验结果如图3所示:
    wd_161041waaaqg0z7koop020.png
                          图 3 点亮led灯
  3. 按键
           按键是最常见的输入设备,通过检测按键被按下之后,改变LED灯的亮灭状态。按键对应的IO口引脚原理图如下图4所示,按键的一段接到GPIO21,另一端接到GND,所以按键在没按下的时候输入高电平1,按下的时候输入低电平0。
    wd_161041l7pz6h9877th38hd.png
                                    图 4 按键原理图
            按键按下时的电平变化如下图5所示,会发生抖动,有可能会造成误判,因此需要延时函数来进行消抖。常见的方法就是当检测到按键值为0时,延时一段时间,大约10ms,再次判断按键引脚至仍然是0,是的话说明按键被按下,延时使用time模块(time – time related functions — MicroPython latest documentation)。
    wd_161041a9nmu5z1sjnmn2nm.png
                         图 5 按键一次出现的电平变化
               首先将IO21配置为GPIO功能(使用FPIO模块),需要将按键的GPIO21引脚配置为输入模式(使用pin模块),当K230检测到按键被按下时led灯点亮,松开时led灯熄灭,代码编写流程图如图6所示。
    wd_161041zd0mjryp1s31g0jc.png
                  图 6 按键代码流程图
           完整代码如下所示:
    '''
    实验名称:按键
    版本:v1.0
    作者:01Studio
    实验平台:01Studio CanMV K230
    说明:通过按键改变LED的亮灭状态
    '''
    from machine import Pin
    from machine import FPIOA
    import time
    #将GPIO52、GPIO21配置为普通GPIO模式
    fpioa = FPIOA()
    fpioa.set_function(52,FPIOA.GPIO52)
    fpioa.set_function(21,FPIOA.GPIO21)
    LED=Pin(52,Pin.OUT) #构建LED对象,开始熄灭
    KEY=Pin(21,Pin.IN,Pin.PULL_UP) #构建KEY对象
    state=0 #LED引脚状态
    while True:
    if KEY.value()==0: #按键被按下
    time.sleep_ms(10) #消除抖动
    if KEY.value()==0: #确认按键被按下
    state=not state #使用not语句而非~语句
    LED.value(state) #LED状态翻转
    print('KEY')
    while not KEY.value(): #检测按键是否松开
    pass
         实验结果如图7所示,当按键KEY每次被按下时,LED灯的亮灭状态发生反转。
    wd_161041rzizpfiffupeuxpu.png
                       图 7 按键控制LED灯结果图
  4. 定时器
           定时器常常用来计时,通过定时器来周期性的执行各种任务。
          引用machine的Timer模块(2.11 Timer 模块API手册 — K230 CanMV (canaan-creative.com))用定时器让LED灯周期性每秒闪烁一次。
          首先构造函数tim = machine.Timer(id),接着初始化tim.init(mode, freq, period, callback)就可以轻松调用定时器模块。
          代码编写流程如图8所示,定时器到达预定设计时间后,产生中断,跟外部中断的编程方式类似。
    wd_161041qqd9mka1zz88bz4u.png
                                  图 8 定时器调用代码流程图
         完整代码如下:
    '''
    实验名称:定时器
    版本:v1.0
    作者:01Studio
    实验平台:01Studio CanMV K230
    说明:通过定时器让LED周期性每秒闪烁1次。
    '''
    from machine import Pin,Timer
    import time
    led=Pin(52,Pin.OUT)
    Counter = 0
    Fun_Num = 0
    def fun(tim):
    global Counter
    Counter = Counter + 1
    print(Counter)
    led.value(Counter%2)
    #使用软件定时器,编号-1
    tim = Timer(-1)
    tim.init(period=1000, mode=Timer.PERIODIC,callback=fun) #周期为1000ms
    while True:
    time.sleep(0.01) #避免CPU满跑
        实验结果:可以看到LED灯每隔一秒闪烁一次

测评报告2.docx

2.98 MB, 下载次数: 1


回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表