#申请原创#
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
测试代码都在这个仓库:
谢谢阅读.
|