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)
离线
下载的时候,模块是怎么选择的?请给个截图,另外给一下main.py的截图
离线
main.py里面需要有import machine,这样machine才会被加载到固件中
离线
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;
}
离线
@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
离线
直接用官网的预设值,没选其它的,
这是我main.py的载图
这是串口回传值
再麻烦看一下,谢谢。
最近编辑记录 ggkkggk (2023-04-20 11:08:01)
离线
@lyon1998
感谢,我再研究研究。
离线
先在下载固件的时候选全部擦除,把脚本区清一下,然后在 machine.GPIO() 之前,先 import machine 试试
离线
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)
离线
@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)
离线
@ggkkggk
time 已经独立出来了,直接import time然后使用即可
离线