CH32V208与CH582芯片的区别
CH32V208和CH582都是沁恒的支持BLE5.0+的MCU,下面介绍两者的区别。
选型方面:
①CH32V208比CH582的ram和零等待flash更多。使用CH582,对速度有要求的代码,需要放到ram中运行;使用V208,对速度有要求的代码可以放到零等待flash中,不会占用ram的资源,V208的零等待falsh和ram都跑主频。
②CH32V208的主频更高,CH582的ram一般跑在60MHz,可以跑到80MHz;V208可以跑到144MHz。
②低功耗方面,BLE代码中启用HAL_SLEEP宏后休眠底电流有区别:V208用的stop休眠,功耗在 250uA+;CH582用的是sleep休眠,功耗在几个uA。
③V208相比CH582,少一个32位的记录天数的RTC寄存器,做低功耗万年历时没有CH582方便。
④V208的接口种类比CH582多了CAN总线和有线以太网接口。
⑤V208使用脱机烧录器,支持UART、USB、SWD烧录三种烧录方式;CH582使用脱机烧录器烧录,仅支持UART和USB两种烧录方式。
硬件方面:
①进原厂bootloader方式:
CH5Xx系列蓝牙MCU,将PB22接到GND或者PB11走10K上拉电阻接到V33(二选一,下载时由ISP工具配置),再重新上电冷启动。
V208将boot1下拉10K电阻就不再管它了(如果有boot1脚的话);将boot0也下拉10K电阻到GND,然后boot0脚接V33+复位(重新上电复位或者外部按键复位均可)。
②关于外部低频晶振:
CH5Xx系列蓝牙MCU在内部集成有负载电容,可以在一定范围内微调。
V208没有集成针对外部32K晶振的负载电容,一定要留起振电容焊盘。
代码使用方面:
①CH582的代码风格和CH32V208的代码风格不同。V208的代码风格更偏向于32系列,熟悉STM32的用户会上手更方便;CH582的代码对GPIO初始化等代码做了精简,上手也很简单。
②V208的BLE+ADC同时运行时,在TMOS事件中需要重新初始化ADC;如果不需要休眠,BLE协议栈的温度校准需要对ADC模块重新配置,可能会影响用户期望的ADC采样配置,如有冲突,需要在HAL_GetInterTempValue函数尾部重新初始化ADC。CH582的BLE+ADC同时运行,启用休眠唤醒后,需要在TMOS事件中重新选择ADC信道。
③RF_PHY代码中,V208的RF_2G4StatusCallBack回调函数,是在中断中调用的,关键变量注意加volatile修饰,另要有tx_end_flag帮助判断发包已完成,这一点和CH592一样;CH582的RF_2G4StatusCallBack函数没有在中断中调用,不用考虑volatile修饰变量。
④RF_PHY_HOP代码中(包括V208EVT中的RF_PHY_AUTO代码),V208的TMOS系统时钟,实际使用的频率是16K,而其他沁恒蓝牙系列MCU代码使用的是内部/外部晶振的32K。如此一来在启用了AUTO模式后,V208与其他蓝牙系列MCU比如CH582进行RF通信时,会出现超时丢包占比很高的情况。修改V208RF代码中的主频配置为32K,与CH582保持一致即可。具体修改位置为MCU.c源文件中,WCHBLE_Init()函数中的cfg.ClockFrequency = CAB_LSIFQ/2;去掉除以2,改为cfg.ClockFrequency = CAB_LSIFQ;。如果还要启用休眠的话,SLEEP.c开头的US_TO_TICK宏也要做同样的处理,去掉除以二。注意此项修改涉及到了公共文件,可能会对同一EVT文件夹下的BLE工程产生影响,建议重新解压一份EVT包来调试2.4GRF的AUTO功能。