您尚未登录。

楼主 # 2023-04-19 19:07:23

ggkkggk
会员
注册时间: 2022-12-16
已发帖子: 5
积分: 16

[问题]使用最新版本下载后IO无法使用。

import PikaStdLib
import machine

mem = PikaStdLib.MemChecker()
io1 = machine.GPIO()
time = machine.Time()

io1.setPin('PB15')
io1.setMode('out')
io1.enable()
io1.low()

print('hello pikascript')
print('mem.max :')
mem.max()
print('mem.now :')
mem.now()

while True:
    mem.now()
    io1.low()
    time.sleep_ms(500)
    io1.high()
    time.sleep_ms(500)

使用http://pikascript.com/ 生成STM32G070最新版本,下载后,发送上列文件提示错误

[info]: boot from Script.
NameError: name 'machine.GPIO' is not defined
-> RUN machine.GPIO         (#46)

请问是什麽问题呢?

最近编辑记录 ggkkggk (2023-04-19 19:08:15)

离线

#1 2023-04-19 21:33:28

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 108
积分: 55

Re: [问题]使用最新版本下载后IO无法使用。

下载的时候,模块是怎么选择的?请给个截图,另外给一下main.py的截图

离线

#2 2023-04-19 22:26:28

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 108
积分: 55

Re: [问题]使用最新版本下载后IO无法使用。

main.py里面需要有import machine,这样machine才会被加载到固件中

离线

#3 2023-04-20 08:37:39

fxyc87
会员
注册时间: 2023-03-15
已发帖子: 22
积分: 38

Re: [问题]使用最新版本下载后IO无法使用。

lyon1998 说:

main.py里面需要有import machine,这样machine才会被加载到固件中

顺道问个问题,
我想移值GD32F303,我下载了STM32G070的示例,有点没看懂,就是 pika_hal_STM32G0_GPIO.C 中【pika_hal_platform_GPIO_write】函数怎么与脚本关联起来的?我搜了整个工程,都没有发现这个函数有其它地方引用。
还有其它很多类似的地方,

int pika_hal_platform_GPIO_write(pika_dev* dev, void* buf, size_t count) {
    platform_data_GPIO* data = dev->platform_data;
    uint32_t level = 0;
    memcpy(&level, buf, count);
    if (level == 0) {
        LL_GPIO_ResetOutputPin(data->gpioPort, data->gpioPin);
        return 0;
    }
    if (level == 1) {
        LL_GPIO_SetOutputPin(data->gpioPort, data->gpioPin);
        return 0;
    }
    return -1;
}

离线

#4 2023-04-20 09:36:22

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 108
积分: 55

Re: [问题]使用最新版本下载后IO无法使用。

@fxyc87

这些函数是用##拼接出的的weak函数,例如

PIKA_WEAK int pika_hal_platform_##dev_name##_open(pika_dev* dev,        
                                                      char* name) {                                     
        WEAK_FUNCTION_NEED_OVERRIDE_ERROR()                                    
        return -1;                                                                                         
    }                                           

用户写了这些函数之后就会覆盖这些weak,然后被调用了,源码在:https://gitee.com/Lyon1998/pikapython/blob/master/package/PikaStdDevice/pika_hal_table_rule.h#L4

更多的信息可以参考这个文档:http://pikapython.com/doc/PikaStdDevice%20%E6%A0%87%E5%87%86%E8%AE%BE%E5%A4%87.html#id13

离线

楼主 #5 2023-04-20 11:00:40

ggkkggk
会员
注册时间: 2022-12-16
已发帖子: 5
积分: 16

Re: [问题]使用最新版本下载后IO无法使用。

6440ac590d04a.png
直接用官网的预设值,没选其它的,

6440ac5848ff1.png

这是我main.py的载图



6440ac56e33b8.png
这是串口回传值




再麻烦看一下,谢谢。

最近编辑记录 ggkkggk (2023-04-20 11:08:01)

离线

#6 2023-04-20 14:26:44

fxyc87
会员
注册时间: 2023-03-15
已发帖子: 22
积分: 38

Re: [问题]使用最新版本下载后IO无法使用。

@lyon1998

感谢,我再研究研究。

离线

#7 2023-04-21 00:06:30

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 108
积分: 55

Re: [问题]使用最新版本下载后IO无法使用。

先在下载固件的时候选全部擦除,把脚本区清一下,然后在 machine.GPIO() 之前,先 import machine 试试

离线

楼主 #8 2023-04-21 10:25:55

ggkkggk
会员
注册时间: 2022-12-16
已发帖子: 5
积分: 16

Re: [问题]使用最新版本下载后IO无法使用。

 
import PikaStdLib
import machine

mem = PikaStdLib.MemChecker()
import machine
io1 = machine.GPIO()
time = machine.Time()

io1.setPin('PB15')
io1.setMode('out')
io1.enable()
io1.low()

print('hello pikascript')
print('mem.max :')
mem.max()
print('mem.now :')
mem.now()

while True:
    mem.now()
    io1.low()
    time.sleep_ms(500)
    io1.high()
    time.sleep_ms(500)
    

 

全部擦除后,修改如上述code,还是出现
NameError: name 'machine.GPIO' is not defined
-> RUN machine.GPIO         (#46)

离线

楼主 #9 2023-04-21 11:05:22

ggkkggk
会员
注册时间: 2022-12-16
已发帖子: 5
积分: 16

Re: [问题]使用最新版本下载后IO无法使用。

@lyon1998 您好
参考网站,我将code修改成

  
import PikaStdLib
import STM32G0

mem = PikaStdLib.MemChecker()
io1 = STM32G0.GPIO()
time = STM32G0.Time()

io1.setPin('PB15')
io1.setMode('out')
io1.enable()
io1.low()

print('hello pikapython')
print('mem.max :')
mem.max()
print('mem.now :')
mem.now()

while True:
    io1.low()
    time.sleep_ms(500)
    io1.high()
    time.sleep_ms(500)
	


  

串口回传如下

[info]: boot from Script.
NameError: name 'STM32G0.Time' is not defined
 -> RUN STM32G0.Time 		(#63)
>>> 

但我把time拿掉,修改如下code

import PikaStdLib
import STM32G0

mem = PikaStdLib.MemChecker()
io1 = STM32G0.GPIO()


io1.setPin('PB15')
io1.setMode('out')
io1.enable()
io1.low()

print('hello pikapython')
print('mem.max :')
mem.max()
print('mem.now :')
mem.now()

while True:
    io1.low()

便执行正常,硬体电路的PB15也有动作。

目前引用的版本如下

pikascript-core==v1.12.0
PikaStdLib==v1.12.0
PikaStdDevice==v2.3.0
STM32G0==v2.1.0
PikaPiZero==v1.4.0
time==v0.1.0


另外,我发现在mdk里python目录里的STM32G0.pyi  并没有time的定义,跟这有关吗?

# api
from PikaObj import *
import PikaStdDevice
import PikaStdTask


class GPIO(PikaStdDevice.GPIO):
    ...


class ADC(PikaStdDevice.ADC):
    ...


class UART(PikaStdDevice.UART):
    ...


class PWM(PikaStdDevice.PWM):
    ...


class Task(PikaStdTask.Task):
    ...

最近编辑记录 ggkkggk (2023-04-21 11:07:08)

离线

#10 2023-04-21 14:37:47

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 108
积分: 55

Re: [问题]使用最新版本下载后IO无法使用。

@ggkkggk
time 已经独立出来了,直接import time然后使用即可

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn