From a75ab8ce527c10a4fd16601c45a325c6fbf711bd Mon Sep 17 00:00:00 2001 From: murmur-CSSC Date: Fri, 26 Apr 2024 06:39:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=861=E4=B8=AA?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MCU/WCH-南京沁恒/MounRiver配置.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MCU/WCH-南京沁恒/MounRiver配置.md b/MCU/WCH-南京沁恒/MounRiver配置.md index 1fb6509..c5a8c2e 100644 --- a/MCU/WCH-南京沁恒/MounRiver配置.md +++ b/MCU/WCH-南京沁恒/MounRiver配置.md @@ -1,3 +1,7 @@ # 添加bin输出功能: -`riscv-none-embed-objcopy -O binary "${ProjName}.elf" "${ProjName}.bin"` +~~`riscv-none-embed-objcopy -O binary "${ProjName}.elf" "${ProjName}.bin"`~~ + +菜单位置: +`C/C++ Build -> Settings -> Tool Settings ->GNU RISC-V Cross Create Flash Image -> General` +`Output file format (-O)`选项选择`Intel HEX (.hex) & Raw binary (.bin)`即可同时输出.bin和.Hex \ No newline at end of file From 7af10b61b99231962a27207d9ecb64d5725b0543 Mon Sep 17 00:00:00 2001 From: murmur-CSSC Date: Fri, 26 Apr 2024 08:27:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=861=E4=B8=AA?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MCU/WCH-南京沁恒/CH582F.md | 161 +++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 MCU/WCH-南京沁恒/CH582F.md diff --git a/MCU/WCH-南京沁恒/CH582F.md b/MCU/WCH-南京沁恒/CH582F.md new file mode 100644 index 0000000..00a7b07 --- /dev/null +++ b/MCU/WCH-南京沁恒/CH582F.md @@ -0,0 +1,161 @@ +--- +created: 2024-04-26 +tags: + - 代码块 + - "#RTC" + - RISC_V + - ldo + - dcdc + - 电源 + - 国产化 + - mcu +--- +CH58x与[[CH57x]]部分封装兼容,从已够的评估板可知,CH571F、CH573F及CH582F封装兼容。 +# 低功耗 +从手册看CH58x低功耗模式功耗更低,实测睡眠模式电流3.7uA,与手册差距不大。代码如下: +```c +/********************************** (C) COPYRIGHT ******************************* + * File Name : Main.c + * Author : WCH + * Version : V1.0 + * Date : 2020/08/06 + * Description : 系统睡眠模式并唤醒演示:GPIOA_5作为唤醒源,共4种睡眠等级 + ********************************************************************************* + * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. + * Attention: This software (modified or not) and binary are used for + * microcontroller manufactured by Nanjing Qinheng Microelectronics. + *******************************************************************************/ + +/* + 注意:切换到HSE时钟源,所需等待稳定时间和选择的外置晶体参数有关,选择一款新的晶体最好阅读厂家提供的晶体及其 + 负载电容参数值。通过配置R8_XT32M_TUNE寄存器,可以配置不同的负载电容和偏置电流,调整晶体稳定时间。 + */ + +#include "CH58x_common.h" + +/********************************************************************* + * @fn DebugInit + * + * @brief 调试初始化 + * + * @return none + */ +void DebugInit(void) +{ + GPIOA_SetBits(GPIO_Pin_9); + GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); + UART1_DefInit(); +} + +/********************************************************************* + * @fn main + * + * @brief 主函数 + * + * @return none + */ +int main() +{ + SetSysClock(CLK_SOURCE_PLL_60MHz); + + GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU); + GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU); + + /* 配置串口调试 */ + DebugInit(); + PRINT("Start @ChipID=%02x\n", R8_CHIP_ID); + DelayMs(200); + +#if 1 + /* 配置唤醒源为 GPIO - PA5 */ + GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_PU); + GPIOA_ITModeCfg(GPIO_Pin_5, GPIO_ITMode_FallEdge); // 下降沿唤醒 + PFIC_EnableIRQ(GPIO_A_IRQn); + PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Long_Delay); +#endif + +#if 0 + RTC_TMRFunCfg(Period_1_S);//定时1s的RTC闹钟 */ + PFIC_EnableIRQ(RTC_IRQn);//使能RTC中断 */ + PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_RTC_WAKE, Short_Delay );//使能RTC中断唤醒源 */ +#endif + + +#if 0 + PRINT("IDLE mode sleep \n"); + DelayMs(1); + LowPower_Idle(); + PRINT("wake.. \n"); + DelayMs(500); +#endif + +#if 0 + PRINT("Halt mode sleep \n"); + DelayMs(2); + LowPower_Halt(); + HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流) + DelayMs(2); + PRINT("wake.. \n"); + DelayMs(500); +#endif + +#if 1 + PRINT("sleep mode sleep \n"); + DelayMs(2); + // 注意当主频为80M时,Sleep睡眠唤醒中断不可调用flash内代码。 + LowPower_Sleep(RB_PWR_RAM30K | RB_PWR_RAM2K); //只保留30+2K SRAM 供电 + HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流) + DelayMs(2); +// PRINT("wake.. \n"); +// DelayMs(200); +#endif + +#if 0 + PRINT("shut down mode sleep \n"); + DelayMs(2); + LowPower_Shutdown(0); //全部断电,唤醒后复位 + /* + 此模式唤醒后会执行复位,所以下面代码不会运行, + 注意要确保系统睡下去再唤醒才是唤醒复位,否则有可能变成IDLE等级唤醒 + */ + HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流) + PRINT("wake.. \n"); + DelayMs(500); +#endif + + while(1) + ; +} + +/********************************************************************* + * @fn GPIOA_IRQHandler + * + * @brief GPIOA中断函数 + * + * @return none + */ +__INTERRUPT +__HIGH_CODE +void GPIOA_IRQHandler(void) +{ + GPIOA_ClearITFlagBit(GPIO_Pin_6 | GPIO_Pin_5); +} + + + +/*RTC闹钟唤醒中断*/ +__INTERRUPT +__HIGH_CODE +void RTC_IRQHandler(void) +{ + if (RTC_GetITFlag(RTC_TMR_EVENT)) + { + RTC_ClearITFlag(RTC_TMR_EVENT); + } +} +``` +以上代码基本与官方样例一致。 +参考文章:[CH582开启睡眠模式下低功耗测试](https://www.cnblogs.com/azou/p/16851017.html "发布于 2022-11-02 14:51") +## 注意事项 +测试低功耗时首先要排除LDO的影响,上述低功耗模式用LDO供电功耗约35uA,也即LDO的静态功耗约30uA。 +测试响应时间时不能接板载LDO或DCDC,需要采用受负载牵引影响小的长电电源供电,因为电源转换器有自身的响应时间。上述低功耗测试中采用LDO供电时无法观测到RTC的唤醒时间。 \ No newline at end of file