The CH32V307 is an industrial-grade RISC-V MCU:
#include "ch32v30x_eth.h"
void ETH_Gigabit_Init() {
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Enable RGMII pins
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC, ENABLE);
// Configure RGMII pins (PA0-PA3, PC1-PC5)
// ... (see reference manual for pin mapping)
ETH_InitTypeDef ETH_InitStruct = {0};
ETH_InitStruct.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
ETH_InitStruct.ETH_Speed = ETH_Speed_1000M;
ETH_InitStruct.ETH_Mode = ETH_Mode_TxRx;
ETH_Init(&ETH_InitStruct);
}
void CAN1_Init() {
CAN_InitTypeDef CAN_InitStruct = {0};
CAN_InitStruct.CAN_TTCM = DISABLE;
CAN_InitStruct.CAN_ABOM = ENABLE;
CAN_InitStruct.CAN_Mode = CAN_Mode_Normal;
CAN_InitStruct.CAN_SJW = CAN_SJW_1tq;
CAN_InitStruct.CAN_BS1 = CAN_BS1_5tq;
CAN_InitStruct.CAN_BS2 = CAN_BS2_3tq;
CAN_InitStruct.CAN_Prescaler = 4;
CAN_Init(CAN1, &CAN_InitStruct);
// Filter: accept all
CAN_FilterInitTypeDef filter = {0};
filter.CAN_FilterNumber = 0;
filter.CAN_FilterMode = CAN_FilterMode_IdMask;
filter.CAN_FilterScale = CAN_FilterScale_32bit;
filter.CAN_FilterIdHigh = 0x0000;
filter.CAN_FilterIdLow = 0x0000;
filter.CAN_FilterMaskIdHigh = 0x0000;
filter.CAN_FilterMaskIdLow = 0x0000;
filter.CAN_FilterFIFOAssignment = CAN_FIFO0;
filter.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&filter);
}
void CAN_Send(uint32_t id, uint8_t *data, uint8_t len) {
CanTxMsg msg = {0};
msg.StdId = id;
msg.IDE = CAN_Id_Standard;
msg.RTR = CAN_RTR_Data;
msg.DLC = len;
for (int i = 0; i < len; i++) msg.Data[i] = data[i];
CAN_Transmit(CAN1, &msg);
}
#include "ch32v30x_usbhs.h"
// USB CDC (virtual serial port) at 480 Mbps
void USBHS_CDC_Init() {
USBHS_InitTypeDef init = {0};
init.USBHS_Speed = USBHS_SPEED_HIGH;
init.USBHS_Mode = USBHS_MODE_DEVICE;
USBHS_Init(&init);
// Configure CDC endpoints
USBHS_ConfigEP(1, USBHS_EP_BULK, 512, USBHS_EP_TX);
USBHS_ConfigEP(2, USBHS_EP_BULK, 512, USBHS_EP_RX);
}
CAN Bus 1 ──┐
├── CH32V307 ── Gigabit Ethernet ── Cloud
CAN Bus 2 ──┤ │
│ ├── USB HS ── Local PC
RS485 ──────┘ │
├── UART ── Modbus RTU
└── DVP ── Camera