完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
我用的官方的库文件,的hal函数
下面这个程序,在进入睡后,叫醒,触摸按键无法正常工作,但是弹性按键却可以继续循环进入睡眠模式。 while(1) { //判断 线性电容按键 与 睡眠开启按键(普通弹性按键)是否有一个被按下 MyLinRots[0].p_Data->Position = 0; MyLinRots[0].p_Data->StateId = TSL_STATEID_RELEASE; ButtonPressed = 0; tsl_status = tsl_user_Exec(); while((ButtonPressed == 0) && ((MyLinRots[0].p_Data->StateId != TSL_STATEID_DETECT) || (LINEAR_POSITION == 0)) && (!LINEAR_POSITION)) { tsl_status = tsl_user_Exec(); } //若线性电容按键被触发,则进入一下逻辑。 if(MyLinRots[0].p_Data->StateId == TSL_STATEID_DETECT) { /* Run mode menu ********************************************************/ if((LINEAR_POSITION >= 1 ) && (LINEAR_POSITION <= 64)) { } /* Sleep mode menu ******************************************************/ else if ((LINEAR_POSITION >= 65 ) && (LINEAR_POSITION <= 127)) { } /* LP Sleep menu ********************************************************/ else if ((LINEAR_POSITION >= 128 ) && (LINEAR_POSITION <= 191)) { } /* Stop menu ************************************************************/ else { } } //若普通弹性按键按下,则触发开启睡眠模式 else /* BUTTON_KEY != 0 */ { // IDD_SaveContext(); //从IDD库中找到的关闭IO和时钟的函数(检测睡眠模式 功耗电流时 用的函数) SystemPower_Config(); //官方sleep库中的关闭IO 和时钟的函数。 HAL_I2C_DeInit(&I2CxHandle); HAL_Delay(5000); BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_EXTI); HAL_SuspendTick(); HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); HAL_ResumeTick(); IDD_RestoreContext(); //从IDD库中找到的关闭IO和时钟的函数(检测睡眠模式 功耗电流时 用的函数) //苏醒后LED灯闪烁 BSP_LED_Init(LED3); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); HAL_Delay(500); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); HAL_Delay(500); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); } } |
|
相关推荐
13个回答
|
|
|
进入线性按键后,里面的具体逻辑,有所删减,要不程序太多了,不好分析问题
|
|
|
|
|
|
如果再次精炼一下程序,就好使了,大神们,可不可以帮忙分析一下错误点在那里?
|
|
|
|
|
|
while(1) { //判断 线性电容按键 与 睡眠开启按键(普通弹性按键)是否有一个被按下 MyLinRots[0].p_Data->Position = 0; MyLinRots[0].p_Data->StateId = TSL_STATEID_RELEASE; ButtonPressed = 0; tsl_status = tsl_user_Exec(); while((ButtonPressed == 0) && ((MyLinRots[0].p_Data->StateId != TSL_STATEID_DETECT) || (LINEAR_POSITION == 0)) && (!LINEAR_POSITION)) { tsl_status = tsl_user_Exec(); } // IDD_SaveContext(); //从IDD库中找到的关闭IO和时钟的函数(检测睡眠模式 功耗电流时 用的函数) SystemPower_Config(); //官方sleep库中的关闭IO 和时钟的函数。 HAL_I2C_DeInit(&I2CxHandle); HAL_Delay(5000); BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_EXTI); HAL_SuspendTick(); HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); HAL_ResumeTick(); IDD_RestoreContext(); //从IDD库中找到的关闭IO和时钟的函数(检测睡眠模式 功耗电流时 用的函数) //苏醒后LED灯闪烁 BSP_LED_Init(LED3); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); HAL_Delay(500); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); HAL_Delay(500); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); }
|
|
|
|
|
|
额乱码了,重发一遍
|
|
|
|
|
|
while(1)
{ //判断 线性电容按键 与 睡眠开启按键(普通弹性按键)是否有一个被按下 MyLinRots[0].p_Data->Position = 0; MyLinRots[0].p_Data->StateId = TSL_STATEID_RELEASE; ButtonPressed = 0; tsl_status = tsl_user_Exec(); while((ButtonPressed == 0) && ((MyLinRots[0].p_Data->StateId != TSL_STATEID_DETECT) || (LINEAR_POSITION == 0)) && (!LINEAR_POSITION)) { tsl_status = tsl_user_Exec(); } // IDD_SaveContext(); //从IDD库中找到的关闭IO和时钟的函数(检测睡眠模式 功耗电流时 用的函数) SystemPower_Config(); //官方sleep库中的关闭IO 和时钟的函数。 HAL_I2C_DeInit(&I2CxHandle); HAL_Delay(5000); BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_EXTI); HAL_SuspendTick(); HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); HAL_ResumeTick(); IDD_RestoreContext(); //从IDD库中找到的关闭IO和时钟的函数(检测睡眠模式 功耗电流时 用的函数) //苏醒后LED灯闪烁 BSP_LED_Init(LED3); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); HAL_Delay(500); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); HAL_Delay(500); BSP_LED_On(LED3); HAL_Delay(500); BSP_LED_Off(LED3); } |
|
|
|
|
|
发现,只要删除,判断是否弹性按键按下,这段判断句,则程序运行正常,加上这段话,出了睡眠,线性电容按键无法开启。
|
|
|
|
|
|
好高手,路过;
|
|
|
|
|
|
不是高手,我只是用官方库复制粘贴的程序……还出bug了……
|
|
|
|
|
|
|
|
|
|
|
|
自问自答吧,
睡醒后,虽然又外设都初始化了,但是开发板上的TSL按键模块并没有苏醒,开启了一半,由寄存器具体数值查到的,所以初始化程序后面又加了一句直接操作寄存器的语句, TSC->CR |= 0x02; //使 TSL开始工作, 然后就好使, 其实仍有疑问,就是初始化时的却置位了CR寄存器,但是没有起作用,手动置位却好使了, 疑惑没解开,好在运行没有错误了!!!!!!! |
|
|
|
|
|
这个代码 很难看!!!!
|
|
|
|
|
|
应该使用中断的方式唤醒,这种电容按键的方式应试是不支持唤醒有
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1328 浏览 1 评论
1070 浏览 0 评论
936 浏览 0 评论
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
5174 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
3974 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 04:44 , Processed in 1.001869 second(s), Total 95, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3480