黑桃TV:不止是直播,是连接你我之间的璀璨星河

核心内容摘要

“BBB嗓”与“BBBB嗓”大比拼:解锁你的天籁之音!
窥见日常的风景:邻里之间,那些不曾言说的自由

探寻黄三色与黑三色:色彩的交响,生命的低语

one_channel_hub 移植到CH584M MCU平台移除WiFi/网络相关代码

移植前准备

核心背景CH584M特性沁恒微的低功耗MCU基于RISC-V架构内置BLE

0无WiFi外设需适配其裸机/轻量级RTOS开发环境MounRiver Studio 沁恒官方CH58x SDK。

原仓库核心模块LoRa射频驱动sx126x/llcc68/lr11xx、RALRadio Abstraction Layer、LoRaHub HAL层是核心WiFi/HTTP/UDP/Web/SNTP/BLE配网是需移除的网络相关模块。

环境搭建安装MounRiver StudioMRS导入CH584M官方SDK包含GPIO/SPI/定时器/中断等底层驱动。

从原仓库拉取代码git clone https://github.com/Lora-net/one_channel_hub。

代码裁剪移除网络相关模块

删除网络相关文件删除原仓库中以下文件/目录WiFi/HTTP/Web/配网相关# 核心删除项 one_channel_hub/lorahub/main/wifi.c one_channel_hub/lorahub/main/wifi.h one_channel_hub/lorahub/main/http_server.c/h 若有 one_channel_hub/lorahub/main/udp_client.c/h Packet Forwarder网络传输 one_channel_hub/components/wifi_provisioning/ BLE配网 one_channel_hub/doc/ 非代码可选删除 one_channel_hub/tests/ 测试脚本可选删除 one_channel_hub/tools/ 工具脚本可选删除

移除代码中网络相关引用1修改lorahub/main/main.c删除WiFi初始化、HTTP服务器、UDP客户端相关代码保留LoRa核心初始化逻辑// 原代码中需删除的片段示例#includewifi.h// 移除WiFi头文件#includehttp_server.h// 移除HTTP头文件// 删除WiFi初始化调用// wifi_sta_init(false);// http_server_start(); // 移除HTTP服务器启动// udp_client_init(); // 移除UDP客户端初始化// 保留LoRa核心初始化lgw_connect();lgw_radio_setup();2修改components/liblorahub/lorahub_hal.c移除ESP32网络/FreeRTOS相关依赖删除WiFi状态关联逻辑// 移除ESP32网络相关头文件#includeesp_netif.h// 删除#includefreertos/FreeRTOS.h// 删除#includefreertos/event_groups.h// 删除// 移除WiFi状态相关宏/变量如WIFI_CONNECTED_BIT等// 删除所有与WiFi状态联动的逻辑如原代码中依赖WiFi连接的Packet Forwarder发送3修改编译配置原仓库基于ESP-IDF的menuconfig配置需删除WiFi/网络相关配置项删除sdkconfig.defaults中CONFIG_WIFI_*、CONFIG_HTTP_*、CONFIG_UDP_*等宏。

若使用Makefile/CMake移除WiFi/网络相关的编译依赖如esp_wifi、esp_http_server等组件。

CH584M底层驱动适配核心步骤原有代码基于ESP32的底层GPIO/SPI/定时器/中断需替换为CH584M的SDK接口。

SPI驱动适配LoRa射频通信CH584M的SPI外设替代ESP32的SPI驱动示例如下适配SX1262// CH584M SPI初始化替代原esp32 spi_bus_initialize#includeCH58x_common.h#defineSPI_LORA_SCLK_PINGPIO_Pin_2// 自定义引脚需与硬件匹配#defineSPI_LORA_MOSI_PINGPIO_Pin_3#defineSPI_LORA_MISO_PINGPIO_Pin_4#defineSPI_LORA_NSS_PINGPIO_Pin_5#defineSPI_LORA_RESET_PINGPIO_Pin_6#defineSPI_LORA_DIO1_PINGPIO_Pin_7#defineSPI_LORA_BUSY_PINGPIO_Pin_8// SPI初始化函数voidlora_spi_init(void){// 配置SPI引脚为复用功能GPIO_SetFunc(SPI_LORA_SCLK_PIN,GPIO_FUN_SPI0_SCK);GPIO_SetFunc(SPI_LORA_MOSI_PIN,GPIO_FUN_SPI0_MOSI);GPIO_SetFunc(SPI_LORA_MISO_PIN,GPIO_FUN_SPI0_MISO);// 配置NSS为GPIO输出软件控制GPIO_ModeCfg(SPI_LORA_NSS_PIN,GPIO_ModeOut_PP_5mA);GPIO_SetBits(SPI_LORA_NSS_PIN);// 片选默认拉高// SPI0配置主机模式时钟极性0相位0速率1MHzSPI0_MasterDefInit();SPI0_SetClockDiv(SPI_CLK_DIV_

;// CH584M主频60MHz分频后

75MHz可调整}// SPI读写函数替代原ESP32 spi_device_transmituint8_tspi_write_read(uint8_ttx_data){while(SPI0_GetTxFIFOFreeNum()

;SPI0_SendData(tx_data);while(SPI0_GetRxFIFOCount()

;returnSPI0_RecvData();}// LoRa片选控制voidlora_nss_set(uint8_tstate){if(state)GPIO_SetBits(SPI_LORA_NSS_PIN);elseGPIO_ResetBits(SPI_LORA_NSS_PIN);}

GPIO/中断适配LoRa DIO1/BUSY/RESETCH584M的GPIO中断替代ESP32的中断逻辑以DIO1中断为例处理LoRa接收完成// GPIO初始化voidlora_gpio_init(void){// RESET引脚输出GPIO_ModeCfg(SPI_LORA_RESET_PIN,GPIO_ModeOut_PP_5mA);GPIO_SetBits(SPI_LORA_RESET_PIN);// 复位默认拉高// BUSY引脚输入GPIO_ModeCfg(SPI_LORA_BUSY_PIN,GPIO_ModeIN_PU);// DIO1引脚输入中断上升沿触发GPIO_ModeCfg(SPI_LORA_DIO1_PIN,GPIO_ModeIN_PU);GPIO_ITModeCfg(SPI_LORA_DIO1_PIN,GPIO_IT_RisingEdge);// 上升沿中断PFIC_EnableIRQ(GPIO_IRQn);// 使能GPIO中断}// GPIO中断服务函数__interrupt__attribute__((used))voidGPIO_IRQHandler(void){if(GPIO_GetITFlag(SPI_LORA_DIO1_PIN)){GPIO_ClearITFlag(SPI_LORA_DIO1_PIN);// 清除中断标志lora_rx_handler();// 调用LoRa接收处理函数需实现}}

定时器适配替代ESP32的esp_timerCH584M的通用定时器替代ESP32的高精度定时器用于LoRa时序控制// 定时器初始化1ms中断voidtimer_init(void){TMR_TimerCfg(TMR0,TMR_MODE_SYSCLK,TMR_CLK_DIV_

;// 60MHz/601MHzTMR_TimerCountCfg(TMR0,1000,TMR_COUNT_MODE_DOWN);// 1MHz计数1000次1msTMR_ITCfg(TMR0,ENABLE,TMR_IT_END_CNT);// 计数结束中断PFIC_EnableIRQ(TMR0_IRQn);// 使能定时器中断TMR_TimerRun(TMR0,ENABLE);// 启动定时器}// 定时器中断服务函数用于LoRa超时/轮询__interrupt__attribute__((used))voidTMR0_IRQHandler(void){if(TMR_GetITFlag(TMR0,TMR_IT_END_CNT)){TMR_ClearITFlag(TMR0,TMR_IT_END_CNT);// 此处添加LoRa定时处理逻辑如轮询BUSY状态、超时检测}}

RAL层适配Radio Abstraction Layer原RAL层基于ESP32的硬件抽象需修改为CH584M的接口// 修改 components/smtc_ral/ral_sx126x.c 中的硬件操作函数// 示例替换ESP32的SPI读写为CH584M的SPI函数ral_status_tral_sx126x_write(constral_t*ral,constuint16_taddr,constuint8_t*data,constuint16_tsize){lora_nss_set(

;// 拉低片选spi_write_read(0x

;// 写命令spi_write_read((addr

0xFF);// 地址高字节spi_write_read(addr0xFF);// 地址低字节for(uint16_ti0;isize;i){spi_write_read(data[i]);// 写数据}lora_nss_set(

;// 拉高片选returnRAL_STATUS_OK;}ral_status_tral_sx126x_read(constral_t*ral,constuint16_taddr,uint8_t*data,constuint16_tsize){lora_nss_set(

;// 拉低片选spi_write_read(0x

;// 读命令spi_write_read((addr

0xFF);// 地址高字节spi_write_read(addr0xFF);// 地址低字节for(uint16_ti0;isize;i){data[i]spi_write_read(0xFF);// 读数据}lora_nss_set(

;// 拉高片选returnRAL_STATUS_OK;}// 替换复位函数为CH584M的GPIO操作ral_status_tral_sx126x_reset(constral_t*ral){GPIO_ResetBits(SPI_LORA_RESET_PIN);DelayMs(

;// CH584M的延时函数GPIO_SetBits(SPI_LORA_RESET_PIN);DelayMs(

;returnRAL_STATUS_OK;}

LoRaHub核心逻辑适配

移除Packet Forwarder的网络传输原Packet Forwarder通过UDP将LoRa数据包发送到LNS网络服务器需删除该逻辑改为本地处理如串口打印数据包// 修改 components/liblorahub/lorahub_hal_rx.c 中的接收处理函数voidlgw_hal_rx_packet_process(void){structlgw_pkt_rx_srx_pkt;if(lgw_hal_rx_read(rx_pkt)LGW_HAL_SUCCESS){// 原逻辑通过UDP发送到LNS → 删除// 新逻辑串口打印数据包CH584M的UARTuart_printf(LoRa RX Packet: );for(uint16_ti0;irx_pkt.size;i){uart_printf(%02X ,rx_pkt.payload[i]);}uart_printf(\r\n);}}

移除FreeRTOS依赖原代码使用FreeRTOS的事件组、任务等CH584M若用裸机需替换为轮询/中断逻辑// 原FreeRTOS任务示例// xTaskCreate(lora_task, lora_task, 4096, NULL, 5, NULL);// 替换为裸机主循环intmain(void){// 初始化CH584M外设SystemInit();// 官方SDK初始化uart_init();// 串口初始化用于调试lora_spi_init();lora_gpio_init();timer_init();// 初始化LoRalgw_connect();lgw_radio_setup();lgw_hal_rx_config();// 配置LoRa接收参数频率、扩频因子等// 裸机主循环while(

{lgw_hal_rx_packet_process();// 处理接收的LoRa数据包DelayMs(

;// 短延时降低CPU占用}}

编译与调试

编译配置在MounRiver Studio中创建CH584M工程将裁剪后的核心代码LoRa驱动、RAL、HAL层加入工程。

配置编译选项编译器RISC-V GCCMRS内置。

宏定义添加CONFIG_RADIO_TYPE_SX1262根据实际使用的LoRa射频芯片、CH584M等。

链接脚本使用CH584M官方链接脚本适配内存布局。

调试

注意事项硬件接线确认CH584M与LoRa模块如SX1262的SPI、GPIO引脚连接正确。

射频参数根据实际硬件配置LoRa的频率、扩频因子、带宽等修改lorahub_hal.c中的rxrf_conf、rxif_conf。

串口调试通过CH584M的UART打印调试信息确认LoRa初始化、接收/发送是否正常。

关键注意点射频驱动兼容性CH584M的SPI速率需匹配LoRa芯片SX126x建议≤10MHz需调整SPI0_SetClockDiv。

中断优先级CH584M的GPIO中断、定时器中断优先级需合理配置避免冲突。

功耗优化CH584M支持低功耗模式可在LoRa休眠时进入MCU低功耗降低功耗。

代码裁剪彻底性需删除所有ESP32特有头文件如esp_log.h、freertos/*.h替换为CH584M的日志/调试方式如串口打印。

通过以上步骤可将one_channel_hub的核心LoRa功能移植到CH584M平台并彻底移除WiFi/网络相关代码实现裸机环境下的LoRa数据包接收/处理。

抖音二次元动漫-抖音二次元动漫应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123