71|0

502

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【嘉楠K230开发板】基础功能汇总调测 [复制链接]

 

      本篇讲述可开发板基本外设功能如按键、定时器、ADC、UART和线程与文件读写的基础功能体验。

一.硬件原理

      这部分功能硬件上主要在开发板扇出引脚和已经有的硬件接口。

      按键原理如下,可以看到是低电平触发:

      K230内部包含一个ADC硬件模块,有6个通道,采样分辨率为12bit(0-4095),采样速率为1M。开发板引出0~3共4个通道。其中通道0、1量程为0-3.6V,通道2、3量程为0-1.8V。这里使用可调电阻100K,使用通道0,排针的32脚,电压使用3.3V,在通道量程耐受范围内。接好后硬件如下:

      CanMV K230系统内置了文件系统,上电后可看到CanMV盘符。打开后可以看到里面又有2个盘符,分别是sdcard和data。这里文件读写在sdcard下

      K230内部包含五个UART硬件模块,其中UART0被小核终端占用,UART3被大核终端占用,剩余UART1,UART2,UART4。K230开发板通过排针引出了UART1和UART2共2个UART供用户使用。UART1 TX1(GPIO3), RX1(GPIO4);UART2:TX2(GPIO11), RX2(GPIO12)。这里使用带有端子的UART2。

 

      当我们需要分时完成不同任务时候,线程编程就派上用场了。这有点像RTOS(实时操作系统)。下面代码包含有编程实现多线程同时运行任务。

 

二.程序代码准备

      程序实现按键控灯取反,定时器5s间隔回调,串口2打印与接收,线程调度,文件读写。代码如下

'''
#1.按键.通过按键改变LED的亮灭状态
#2.ADC(电压测量).ADC共4个通道,其中通道0、1实际量程为0-3.6V,通道2、3量程为0-1.8V。(请勿超出测量量程,可能导致主控芯片烧坏!)
#3.定时器. 5s间隔
#4.多线程使用.5s调度
#5.文件读写
'''

from machine import Pin
from machine import FPIOA
#导入串口模块
from machine import UART
#导入定时器模块
from machine import Timer
#导入adc模块
from machine import ADC

#导入线程模块
import _thread

import time

Counter = 0
adc_cnt =0

def timer_fun(tim):
    global Counter
    Counter = Counter + 1
    print(Counter)

#将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引脚状态



#使用软件定时器,编号-1
tim = Timer(-1)
tim.init(period=5000, mode=Timer.PERIODIC,callback=timer_fun) #周期为5000ms

'''
# UART1代码
fpioa.set_function(3,FPIOA.UART1_TXD)
fpioa.set_function(4,FPIOA.UART1_RXD)

uart=UART(UART.UART1,115200) #设置串口号1和波特率
'''

# UART2代码
fpioa.set_function(11,FPIOA.UART2_TXD)
fpioa.set_function(12,FPIOA.UART2_RXD)

uart=UART(UART.UART2,115200) #设置串口号2和波特率


uart.write('Hello EEWord & 01Studio. \r\nWelcome to Use K230 Board!\r\n')#发送一条数据

#线程函数
def func(name):
    while True:
        print("hello {}".format(name))
        time.sleep(5)

_thread.start_new_thread(func,("EEWord",)) #开启线程1,参数必须是元组
_thread.start_new_thread(func,("K230",)) #开启线程2,参数必须是元组

'''文件读写,先写再读'''
#写文件
f = open('/sdcard/1.txt', 'w') #以写的方式打开一个文件,没有该文件就自动新建
f.write('Today is a Good Day\r\n') #写入数据
f.write('2025年,你好\r\n') #写入数据
f.close() #每次操作完记得关闭文件

# 读文件
f = open('/sdcard/1.txt', 'r') #以读方式打开一个文件
text = f.read()
print(text) #读取数据并在终端打印
f.close() #每次操作完记得关闭文件


adc = ADC(0) #通道0

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
    '''串口接收数据并原样输出打印'''
    text=uart.read(128) #接收128个字符
    if text != None:
        print(text) #通过REPL打印串口3接收的数据

    adc_cnt+=1
    if adc_cnt==10:
        adc_cnt=0;
        print(adc.read_u16()) # 获取ADC通道采样值
        # 获取ADC通道电压值,保留2为小数。通道0、1实际量程为0-3.6V,返回值x2。
        print('%.2f'%(adc.read_uv()/1000000*2), "V")

    time.sleep(0.1) #100ms




 

三.调试测验

      运行可看到UART2串口输出,文件读写,按按键可以看到LED灯亮/灭,调可调电阻采集电压有变化,定时器计数,线程运行。日志如下

 

视频如下

基础功能视频

 

      至此,选择的基础功能调试测验完成,得出相应结果/效果,后面继续探索。

点赞 关注
个人签名

保持热爱

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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