CH573F-AHT10
一、裸机实现温度检测
参考:
【沁恒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); //LEDGPIOB_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); //POWERGPIOB_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);//启用内部32KR8_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;//LEDGPIOA_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");
#endiffor (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博客
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
