沁恒CH32V307的官方例子非常多,好好用心学习,一定会收获满满的。
有的同学觉得,C语言开发太南了,能不能有简单一点的呀?
有,micropython@CH32V307来了,新鲜出炉的,2022年5月6日刚发布的测试版本。
一、超级简单的点灯代码:
我们先来看看,点个灯的micropython代码,有多么的简单吧:
from machine import Pin
pa0=Pin(Pin.board.PA0, Pin.OUT)
pa0.on()
pa0.off()
是不是感觉,要比C例子里面,简单100万倍!!!
(有疑问?等会再说!)
二、烧录micropython
下面,我们就一步步来,让micropython在CH32V307上欢快的跑起来。
首先,我们要感谢Rakesh Peter,把micropython给移植到CH32V307,他的github地址为:r4d10n (Rakesh Peter) (github.com)
然后,这个移植,提供了编译后的micropython_CH32V307EVT.elf文件和烧录用的配置文件,使用沁恒提供的MounRiver Studio工具链中的openocd工具,即可烧录到开发板。
下载地址:micropython-wch-ch32v307-binary-v1.18-421-g3c615f487.tgz (github.com)
下载后,我们把其中的micropython_CH32V307EVT.elf文件和openocd-wch/bin/wch-riscv.cfg文件放到一起,方便操作。
要把提供的micropython_CH32V307EVT.elf烧录到开发板,需要在命令行进行操作。以下操作以Windows为例,Linux下使用的命令和参数,是完全相同的。
- 找到openocd,获取其路径:
- 设置openocd路径:
- 擦除开发板Flash现有内容:
- 下载micropython_CH32V307EVT.elf
- 重置重启
具体指令如下:
CD 切换到micropython_CH32V307EVT.elf和wch-riscv.cfg所在路径
SET
PATH=E:MounRiverMounRiver_StudiotoolchainOpenOCDbin;%PATH%
openocd -f wch-riscv.cfg -c init -c halt -c "flash erase_sector wch_riscv 0 last " -c exit
openocd -f wch-riscv.cfg -c init -c halt -c "program micropython_CH32V307EVT.elf" -c exit
openocd -f wch-riscv.cfg -c init -c wlink_reset_resume -c exit
上述openocd的路径,请大家根据自己电脑上MounRiver Studio安装的位置进行设置。
如果是在Linux系统上,使用export PATH=openocd路径:$PATH
进行设置。
三、Hello World
下载烧录完成后,我们就可以使用终端工具,来连接到micropython@CH32V307的REPL(交互终端)了,默认的波特率为115200
注意,不要用普通串口工具连接,必须要用串口终端工具连接,否则输入指令互动超级麻烦。可用的工具例如:mobaxterm、putty等。
连接成功后,回车,将会出现>>提示符,就可以输入python语句了:
如上图所示,Hello World就么简单的完成了。
四、最简单的点灯
然后,我们再把最前面展示的点灯语句,给测试一下。
测试前,请先使用杜邦线,把LED1和PA0连接起来。LED2和PA1也可以连接起来,方便后续使用。
具体语句如下:
from machine import Pin
pa0=Pin(Pin.board.PA0, Pin.OUT)
pa0.on()
pa0.off()
操作实际如下:
这里需要注意的是,LED1、LED2默认低电平点亮,所以调用pa0.off()的时候,LED1会点亮,而调用pa0,on()的时候,则会熄灭。
上述代码中:
from machine import Pin
:表示从machine模块中引入Pin子模块
pa0=Pin(Pin.board.PA0, Pin.OUT)
:表示初始化PA0引脚,设置为输出
pa0.on()
、pa0.off()
:表示输出高电平和低电平
是不是比C语言简单多了。
五、一闪一闪亮晶晶:
光点亮不够,我们还要让灯闪起来,具体代码如下:
from machine import Pin
import time
pa0=Pin(Pin.board.PA0, Pin.OUT)
for i in range(10):
print(i)
pa0.on()
time.sleep(1)
pa0.off()
time.sleep(1)
这次的代码,较之前多了time.sleep延时和循环操作(range表示生成从0到小于设定值的整数列表)。
实际操作如下:
执行上述代码后,LED1就会间隔1秒一闪一闪亮晶晶了。
六、点双灯
这个部分,我就不演示了,留给大家学习完成。
具体逻辑很简单,初始化PA0、PA1,然后输出高电平低电平即可。
七、按键:
上面演示的,都是输出,下面我演示一下输入。
开发板上,就有一个USR按键,将led2引脚下面的key引脚,和pc0连接后,就可以测试按键输入。
具体语句如下:
from machine import Pin
设置GPIO输入
pc0=Pin(Pin.board.PC0, Pin.IN)
读取输入的值:
pc0.value()
实际操作如下:
分别按住按键和释放按键,直接执行pc0.value()
即可获取当前的输入值。
小提醒:按上下方向键,可以调用之前输入过的指令。
与前面的点灯响应的,默认读取的按键状态输入值为1,表愚蠢高电平,按下后为低电平,输入值为0
八、期待:
micropython@CH32V307还在开发中,2022年5月6日刚刚发布,目前支持的功能还比较有限:
下一步Rakesh Peter会支持下面的功能:
有更新了,我也会及时同步过来,敬请期待吧!!!