CH58X SWD坑,反人类设计:
1、购买的CH58X 必须先PB22和地短接,解锁才能让ISP 工具发现设备,然后手动使能SW仿真
2、MRS可以下载,不能调试,不知怎么回事缺省选择忽略全部断点,导致GDB报错说联系不上设备,去掉设置,一切调试正常,速度也可以,没有网上说的很慢。
3、另外USB连线,必须是低电阻高级连接线,而且不能里面内嵌芯片,否则系统找不到WCH-LINK仿真器。
WCH CH58X SDK
推拉模式输出,5mA驱动能力 GPIOA_ModeCfg(GPIO_Pin_X, GPIO_ModeOut_PP_5mA);
拉高引脚PAX电平 GPIOA_SetBits(GPIO_Pin_X);
拉低引脚PBX电平PBX GPIOB_ResetBits(GPIO_Pin_X);
反转引脚PBX电平 GPIOB_InverseBits(GPIO_X);
读GPIOA port GPIOA_ReadPort();
GPIOA_ReadPortPin的返回值并不是bool值,而是对应的port&pin的值
GPIOA_ReadPortPin(GPIO_X) );
SWD: PB14 PB15 对应的是ARM-SWD调试口
通过TMOS管理(RAM保持,rtc运行 休眠时候CH577/578/579=2uA,CH573/571=6uA,CH581/582/583=3uA,唤醒后芯片继续运行,可以做到蓝牙不断连 )由于CH57x/58x只有一个RTC且只有一个触发值中断可以设置,而用BLE等做休眠时候,协议栈会用到这个值去自行控制睡眠唤醒,这时候我们通常不能直接调用睡眠函数. CH57x/58x的BLE是通过其“TMOS”操作系统实现,需要休眠时候,每次协议栈需要睡多久TMOS都是知道的,比如下个event是什么时候(蓝牙事件也是tmos的event)然后把要睡多久传递给休眠函数,休眠函数去设置一个RTC的触发中断,然后就进行休眠了(RTC在跑,RAM保持),直到RTC或者其他中断唤醒MCU
全局宏里面加上HAL_SLEEP=TRUE
关机模式(唤醒会导致复位, 电流<1uA,rtc唤醒可选,开rtc要加上rtc的功耗,按键可唤醒,唤醒后重启)
这种方式,通常适用那些产品需要长时间保持极低的功耗, 比如几十分钟,甚至几天只工作几分钟,
直接调用下面函数,就会关掉ram 电源并休眠
LASH_ROM_ERASE(StartAddr,Length)
FLASH_ROM_WRITE(StartAddr,Buffer,Length)
EEPROM_READ(StartAddr,Buffer,Length)
EEPROM_ERASE(StartAddr,Length)
EEPROM_WRITE(StartAddr,Buffer,Length)