CH32V307以太网(芯片内部10M)
用过WCH的CH579M或者CH563的话,就会发现CH32V307这个自带的10M以太网代码编写与前两颗芯片流程十分相似。部分区别就在于初始化方面。
代码流程依旧按照
初始化--->等待PHY连接成功--->创建Socket---->while(1)循环处理以太网中断函数(PHY,Socket等中断)。
初始化的区别在于,因为CH32V307还可以连接外部的PHY芯片实现100Mbps、1000Mbps的数据传输,所以在使用芯片内部的10MPHY时,需要进行一些设置。这些在CH32V307的芯片手册中都有详细的介绍。代码的表现如下。
相对于WCH官方的CH579的10M以太网代码,CH32V307的以太网程序,在使用内部PHY时,需要先配置内部PHY的时钟,在CH32V307的手册中,我们可以知道,需要60MHz的时钟。
WCH官方评估版在使用8MHz晶振的情况下,只需要先两分频再15倍频即可。定时器二是用于产生一个10ms的时基用于协议栈的处理,对应的中断服务函数,只需要调用以太网协议栈的时钟中断服务函数即可。
这个定时器并不是一定需求使用定时器2,CH32V307的其它定时器也是可以用来当作这个时基。只需要定时10ms,并且在中断服务函数里面调用这个函数即可。
关于网口灯的配置,CH579对于IO是由限制的。在CH32V307上,任意空闲IO都可以当作Link,ACT灯的控制。只需要在接口函数里面做好对应GPIO的初始化,以及控灯程序里面做好对应GPIO的修改即可。但是因为协议栈里面进行了调用,所以切记控灯的函数名不能修改,否则编译会报错。
最后关注一下WCHNET.h函数,官方程序,默认Socket最多开8个,TCP连接个数为4个等。如果想要实现更多Socket连接,只需要在这个头文件里面进行设置即可。
常见问题:
1. 使用CH32V307EVT里面的网络例程下载进去,网络无法跑,汇报硬件的HardFault中断
解答:这个需要使用ISP工具选择RAMX 128KB + ROM 192KB,然后选择一个V307的Hex下载之后,即可正常使用网络例程。