用RT-Thread Studio向ch32v307vct6烧录程序,有个前置条件要完成。
1坑中坑(这部分可以看看,不要跟着操作)
要先用沁恒的烧录工具WCHISPStudio将ch32v307vct6的ROM改为224K,RAM改为96K,
参考数据手册可以发现ch32v307的FLASH和RAM是可以自己配置大小的,第一次见。
用WCH-LINK配置是不行的,要先把板子BOOT脚拨到从系统存储器启动,
然后可以通过芯片的USB或串口1用WCHISPStudio下载程序,我们仅仅修改下FLASH为224K,RAM为96K。之后就可以用RT-Thread Studio烧写程序了。将BOOT设置好,再将板子USB或者串口1连到电脑,点击WCHISPStudio搜索,就可以发现设备和查看FLASH了,如图
2踩坑顿悟
经历了前面的坑中坑,我发现用RT-Thread Studio向ch32v307烧录程序其实很简单,只要避开一个点就行。
我们先用RT-Thread Studio新建一个ch32v307的模板工程
这是模板main线程
int main(void)
{
rt_kprintf("MCU: CH32V307\n");
rt_kprintf("SysClk: %dHz\n",SystemCoreClock);
rt_kprintf("www.wch.cn\n");
LED1_BLINK_INIT();
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
rt_thread_mdelay(500);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
rt_thread_mdelay(500);
}
}
然后打开链接脚本link.lds看看FLASH和RAM大小
可以看到FLASH:224K RAM:96K,这里是根据自己手里的ch32v307修改的,因为ch32v307有好几种存储分配方式。
这个链接脚本没有任何问题,我们先编译下程序,再点击下载,会跳出一个界面
我们可以在这里用Get和Set按钮查看和修改芯片的存储分配,可以看到我的芯片现在存储分配实际256K ROM+64K RAM,和链接脚本里的224K ROM+96K RAM,所以你刚刚在RT-Thread Studio编译程序得到的镜像(bin,hex等)无论通过那种途径烧录到了芯片都是无效的!
我们想要程序起作用,要么按芯片实际存储分配修改链接脚本link.lds,要么根据link.lds设置芯片存储分配,我这里就直接修改link.lds了,
想修改芯片配置的直接在刚刚跳出的下载界面通过下拉框选择,在点击Set就好,非常简单。
然后我们再次编译程序点击下载界面的下载按钮,
有意思的来了,你会发现控制台输出空空如也!无论再怎么狂按复位间它都无动于衷。
没错,这就是我最开始说的那个BUG,这时候就要上WCH-LinkUtility了,可以到沁恒的官网下载,我们打开它,轻轻点击一下Get或者其它按钮,总之让WCH-LinkUtility与芯片进行一次通讯就行,程序就正常运转了,控制台有了输出,复位键也正常了,皆大欢喜!
控制台输出:
但当我们再次通过RT-Thread Studio下载程序后,芯片又没反应了。
所以,BUG确定了,是RT-Thread Studio那个下载工具的问题,如果通过WCH-LinkUtility或者其它工具下载,都是一切正常。
3 总结与吐槽
总结就是用RT-Thread Studio编译得到镜像文件,再通过其它烧录工具(WCH-LinkUtility/WCHISPStudio)下载程序,或者换IDE比如MounRiver Studio。这个问题仅限ch32。
希望有人能早日解决这个问题吧,还有能不能不要下载程序的时候跳出一个下载界面让用户二次操作吗,太反人类了,直接给一个进度条就好啦。
原作者:初级踩坑仔