#申请原创#
CH32V307开发板是去年买的,买了很长一段时间了,最近才想到拿出来测试一下子.
首先还是上图吧. 板子还是很威武的,全黑.
个人比较禧欢这个板子的, 因为符合本人对开发板的期待: 一就是自带调试器,省去了很多插线的工夫, 二就是资源开放度高. 基本上所有引脚都有排针排母.
最近几年买了很多开发板子, 当初买这块板子的原因就是想看看RISCV内核的一些特点, 但是一直也没有打开包装测试. 最近终於下决心测试了一把. 下面就是一些测试的过程记录.
首先这个芯片是WCH自己根据开源项目打造的RISCV内核的MCU. 比较难得的是还带上了FPU, 对标ARM的话大约Cortex M4F的水平了.
第一步就是下载开发工具:
有一个正式版本有一个社区版,暂时没有发现两者区别. 估计是正式版本商用的话要收费吧. 不过本人只是用来学习研究, 所以就直接正式版本了. 一路Next安装即可, 这是个Eclipse改来的IDE,大多数软件开发者很快就可以上手.
第二步就是下载开发板子相应的例程, 都在WCH官网上有.
第三步就是打开一个基础工程,如LED,串口之类.测试一下子工程构建/下载的过程.
基本上不用什么配置,体验过程很顺畅.
下面就开始基于其中一个例子开始修改.
使用的例子是MQTT的客户端工程.
顺便说一句,CH32V307芯片上除了自带ETHMAC,还带一个10Mbps速率的PHY.在大多数工控场景,其实10Mbps够用了.
MQTT是一个IoT/工控场景常见的协议. 该协议有两个脚色: 1. Broker 类似于服务器, 作为一个中间人转发客户端之间的通信, 一般设定于车间或者边缘云端. 本文测试环境中使用开发机搭建了一个broker
2. Client Client可以收可以发, 可以订阅. 本文测试环境中, 开发板作为一个Client,另外还有一个软件测试Client.
下面来安装测试的Broker:
这个页面中根据自己系统选择相应的软件.
本文的开发机器是Windows11, 基本上也是一路next.
准备一个简单的broker配置文件,因为想简单测试一下子,所以把认证关闭了.
listener 1883
allow_anonymous true
存为mosquitto_anonymous.conf
启动broker: PS D:\Program Files\mosquitto> .\mosquitto.exe -c .\mosquitto_anonymous.conf -v
1694850426: mosquitto version 2.0.17 starting
1694850426: Config loaded from .\mosquitto_anonymous.conf.
1694850426: Opening ipv6 listen socket on port 1883.
1694850426: Opening ipv4 listen socket on port 1883.
1694850426: mosquitto version 2.0.17 running
起一个软件测试的订阅者Client: PS D:\Program Files\mosquitto> .\mosquitto_sub -h localhost -t "topic/1"
再起一个测试的发布者Client发送一条消息: PS D:\Program Files\mosquitto> .\mosquitto_pub -h 127.0.0.1 -t "topic/1" -m "abcd"
订阅者Client即可收到消息: PS D:\Program Files\mosquitto> .\mosquitto_sub -h localhost -t "topic/1"
abcd
至此软件Broker,订阅者都已经配置好了.接下来就是连接开发板,配置固定的IP. 其中板子的IP为: u8 IPAddr[4] = { 192, 168, 1, 10 }; //IP address
因此把开发机的IP也固定到这个网段: 主要代码都是使用官方例程中的MQTT代码,主循环里改了一点点: while(1) {
/*Ethernet library main task function,
* which needs to be called cyclically*/
WCHNET_MainTask();
/*Query the Ethernet global interrupt,
* if there is an interrupt, call the global interrupt handler*/
if(WCHNET_QueryGlobalInt()) {
WCHNET_HandleGlobalInt();
}
if (publishValid == 1) {
if(con_flag) {
sprintf(payload_buffer, "%d 'C, %d mV, %d mV\n",
TempSensor_Volt_To_Temper(VoltTemp),
VoltRef,
VoltAin2);
MQTT_Publish(pub_topic, pub_qos, payload_buffer);
}
// if(con_flag) MQTT_Pingreq(); //heartbeat packet
publishValid = 0;
}
if(0 != g_sample_flag) {
RawSampleValTemp = Get_ADC_Average(ADC_Channel_TempSensor, 4);
RawSampleValTemp = Get_ConversionVal(RawSampleValTemp);
VoltTemp = (RawSampleValTemp*3300/4096);
RawSampleValRef = Get_ADC_Average(ADC_Channel_Vrefint, 4);
RawSampleValRef = Get_ConversionVal(RawSampleValRef);
VoltRef = (RawSampleValRef*3300/4096);
RawSampleValAin2 = Get_ADC_Average(ADC_Channel_2, 4);
RawSampleValAin2 = Get_ConversionVal(RawSampleValAin2);
VoltAin2 = (RawSampleValAin2*3300/4096);
printf( "Raw Sample:%04d %04d %04d\r\n", RawSampleValTemp, RawSampleValRef, RawSampleValAin2);
g_sample_flag = 0;
}
}
另外要提的一点就是官方例程中的TCPIP协议栈没有开源,是通过静态库的形式提供的.
实验效果:
开发版端打印: MQTT Test
SystemClk:96000000
ChipID:30700518
net version:18
mac addr:38 3b 26 62 30 1
WCHNET_LibInit Success
CalibrattionValue:7
PHY Link Success
34 bytes uploaded!
TCP Connect Success
CONNACK
14 bytes uploaded!
SUBACK
Raw Sample:1741 1491 0007
Raw Sample:1741 1491 0007
Raw Sample:1741 1491 0007
Raw Sample:1741 1491 0007
32 bytes uploaded!
Raw Sample:1740 1491 0007
payload len: 21
服务端Broker打印: PS D:\Program Files\mosquitto> .\mosquitto_sub -h localhost -t "topic/1"
abcd
22 'C, 1201 mV, 5 mV
22 'C, 1201 mV, 5 mV
23 'C, 1201 mV, 5 mV
23 'C, 1201 mV, 5 mV
测试代码都在这个仓库:
谢谢阅读.
|