CH573F-AHT10

目录

一、裸机实现温度检测

 二、RCT---定时唤醒


一、裸机实现温度检测

参考:

【沁恒RISC-V内核 CH582】AHT10 - 国产芯片交流 - 电子工程世界-论坛

头文件改成57系列即可:

 CH573F调试笔记 一 之初尝 | (gitee.io)

CH573 CH582 CH579外设UART例程讲解(更改打印串口) - WCH蓝牙应用分享 - 博客园 (cnblogs.com)

 二、RCT---定时唤醒

        采用3个纽扣电池供电,开启内部DC-DC,开始睡眠模式,8秒RTC唤醒LLED闪烁一次指示在工作AHT10检测20次,不超过报警温度再次睡眠,超设定温度值LED闪烁,待温度恢复。

#include "CH57x_common.h"
#include "AHT10.h"

#define  TEST_DEBUG (0)
#define  CHECK_NUM (20)
#define  ALARM_TEMP (40)

/*********************************************************************
 * @fn      DebugInit
 *
 * @brief   调试初始化
 *
 * @return  none
 */
void DebugInit(void)
{
    GPIOPinRemap(ENABLE, RB_PIN_UART0);
    GPIOA_SetBits(GPIO_Pin_14);
    GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA);
    UART0_DefInit();
}
/*********************************************************************
 * @fn      RTCInit
 *
 * @brief   RTC设置
 *
 * @return  none
 */
void RTCInit(void)
{

    RTC_InitTime(0, 0, 0, 0, 0, 0);
    RTC_TMRFunCfg(Period_8_S);
    PFIC_EnableIRQ(RTC_IRQn);
    PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_RTC_WAKE, Edge_LongDelay);

    LowPower_Sleep(RB_PWR_RAM16K | RB_PWR_RAM2K); //只保留14+2K SRAM 供电
    HSECFG_Current(HSE_RCur_100);                 // 降为额定电流(低功耗函数中提升了HSE偏置电流)

}

/*********************************************************************
 * @fn      GPIOInit
 *
 * @brief   GPIO设置
 *
 * @return  none
 */
void GPIOInit(void)
{
    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA);    //LED
    GPIOB_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA);    //POWER
    GPIOB_SetBits(GPIO_Pin_12);


    GPIOA_ResetBits(GPIO_Pin_12);
    DelayMs(100);
    GPIOA_SetBits(GPIO_Pin_12);
}
/*********************************************************************
 * @fn      main
 *
 * @brief   主函数
 *
 * @return  none
 */
__attribute__((section(".highcode")))
int main()
{

    float temperate;
    uint8_t humidity;
    uint8_t var;
    SetSysClock(CLK_SOURCE_PLL_48MHz);
    PWR_DCDCCfg(ENABLE);
    /* 配置串口调试 */
    LClk32K_Select(Clk32K_LSI);//启用内部32K
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
    R8_CK32K_CONFIG |= RB_CLK_INT32K_PON;
    R8_SAFE_ACCESS_SIG = 0;

    //LED
    GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA);
    GPIOA_ResetBits(GPIO_Pin_12);
    DelayMs(100);
    GPIOA_SetBits(GPIO_Pin_12);
    DelayMs(100);
    GPIOA_ResetBits(GPIO_Pin_12);
    DelayMs(100);
    GPIOA_SetBits(GPIO_Pin_12);

    while(1){
        GPIOInit();
        AHT10Init();
#if ( TEST_DEBUG == 1 )
        DebugInit();
        PRINT("wake\n");
#endif
        for (var = 0; var < CHECK_NUM; ++var)
        {
            AHT10ReadData(&temperate,&humidity);
            while(temperate > ALARM_TEMP){
            AHT10ReadData(&temperate,&humidity);
            DelayMs(100);
            GPIOA_InverseBits(GPIO_Pin_12);
#if ( TEST_DEBUG == 1 )
            PRINT("temperate:%.1f\n",temperate);
#endif
            }
#if ( TEST_DEBUG == 1 )
            PRINT("temperate:%.1f\n",temperate);
#endif
        }
        GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
        GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
        RTCInit();
    }
}

/*********************************************************************
 * @fn      RTC_IRQHandler
 *
 * @brief   RTC中断函数
 *
 * @return  none
 */
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void RTC_IRQHandler(void)
{

    if(RTC_GetITFlag(RTC_TMR_EVENT)){
        RTC_ClearITFlag(RTC_TMR_EVENT);
#if ( TEST_DEBUG == 1 )
        UINT16 py; UINT16 pmon; UINT16 pd; UINT16 ph; UINT16 pm; UINT16 ps;
        RTC_GetTime(&py,&pmon,&pd,&ph,&pm,&ps);
        printf("%dS\r\n",ps);
#endif
    }
}

8秒唤醒检测

超温闪烁

参考文章:

CH579 CH573 CH582 RTC唤醒唤醒操作 - debugdabiaoge - 博客园 (cnblogs.com)

沁恒CH582F sleep模式RTC唤醒_做了不一定能实现但不做一定不会实现的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值