Merge commit '7af10b61b99231962a27207d9ecb64d5725b0543'
This commit is contained in:
commit
f560d81c9a
161
MCU/WCH-南京沁恒/CH582F.md
Normal file
161
MCU/WCH-南京沁恒/CH582F.md
Normal file
@ -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的唤醒时间。
|
@ -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
|
Loading…
Reference in New Issue
Block a user