完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,
我是STM8的新用户。在我的项目中,我使用的是Active / halt模式,它可以通过RTC Wakeup操作唤醒。我的问题是,它总是在同一时间醒来。它等于3ms。我想要更新自动唤醒时间。 我正在尝试更改RTC_SetWakeUpCounter(30000),但它没有设置唤醒时间。怎么能改变唤醒时间。 谢谢您的意见。 这是示例代码; ////////////////////////////////////////////////// ///////////////// #include''stm8l15x.h'' #include''stm8l151f3.h'' #define ENABLE 1 #define DISABLE 0 void RTC_Config(void) { RTC_WriteProtectionCmd(DISABLE); CLK_RTCClockConfig(CLK_RTCCLKSource_LSI,CLK_RTCCLKDiv_1); while(CLK_GetFlagStatus(CLK_FLAG_LSIRDY)== RESET); CLK_PeripheralClockConfig(CLK_Peripheral_RTC,ENABLE); RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div2); RTC_ITConfig(RTC_IT_WUT,ENABLE); enableInterrupts(); } void GPIO_LowPower_Config(void) { GPIO_Init(GPIOA,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7,GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOB,GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5,GPIO_Mode_Out_PP_High_Slow); GPIO_Init(GPIOC,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6,GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOD,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOE,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOF,GPIO_Pin_All,GPIO_Mode_Out_PP_Low_Slow); } void Halt_Init(void) { PWR_PVDCmd(DISABLE); / *切换到LSI作为系统时钟源* / / *系统时钟预分频器:1 * / CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI); CLK_SYSCLKSourceSwitchCmd(ENABLE); while(CLK_GetFlagStatus(CLK_FLAG_LSIRDY)== 0); CLK_HSICmd(DISABLE); CLK_HSEConfig(CLK_HSE_OFF); / *以低功率设置STM8 * / PWR_UltraLowPowerCmd(ENABLE); / *将GPIO设置为低功耗* / GPIO_LowPower_Config(); / *停止RTC源时钟* / RTC_WriteProtectionCmd(DISABLE); RTC_Config(); RTC_WriteProtectionCmd(DISABLE); CFG_GCR&安培; = 0xFD; RTC_SetWakeUpCounter(30000); RTC_WakeUpCmd(ENABLE); CLK_PeripheralClockConfig(CLK_Peripheral_LCD,DISABLE); } void main(void) { Halt_Init(); 停(); 而(1) { // GPIO_ToggleBits(GPIOB,GPIO_Pin_0); } } ////////////////////////////////////////////////// /////////// 以上来自于谷歌翻译 以下为原文 Hi , I am a new user of STM8. In my project I am using Active/halt mode an it wakes up with RTC Wakeup operation. My problem is, it is always waking up same times. it's equal to 3ms. I want update auto wake up times. I am trying to change RTC_SetWakeUpCounter(30000) but it is not setting wake up times. How can ı change wake up times. Thank you for your comments. Here is the example code; /////////////////////////////////////////////////////////////////// #include ''stm8l15x.h'' #include ''stm8l151f3.h'' #define ENABLE 1 #define DISABLE 0 void RTC_Config(void) { RTC_WriteProtectionCmd(DISABLE); CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1); while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET); CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div2); RTC_ITConfig(RTC_IT_WUT, ENABLE); enableInterrupts(); } void GPIO_LowPower_Config(void) { GPIO_Init(GPIOA, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOB, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_7, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOB, GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5, GPIO_Mode_Out_PP_High_Slow); GPIO_Init(GPIOC, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOE, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOF, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); } void Halt_Init(void) { PWR_PVDCmd(DISABLE); /* Switch to LSI as system clock source */ /* system clock prescaler: 1*/ CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI); CLK_SYSCLKSourceSwitchCmd(ENABLE); while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == 0); CLK_HSICmd(DISABLE); CLK_HSEConfig(CLK_HSE_OFF); /* Set STM8 in low power */ PWR_UltraLowPowerCmd(ENABLE); /* Set GPIO in low power*/ GPIO_LowPower_Config(); /* Stop RTC Source clock */ RTC_WriteProtectionCmd(DISABLE); RTC_Config(); RTC_WriteProtectionCmd(DISABLE); CFG_GCR&=0xFD; RTC_SetWakeUpCounter(30000); RTC_WakeUpCmd(ENABLE); CLK_PeripheralClockConfig(CLK_Peripheral_LCD, DISABLE); } void main(void) { Halt_Init(); halt(); while(1) { //GPIO_ToggleBits(GPIOB,GPIO_Pin_0); } } ///////////////////////////////////////////////////////////// |
|
相关推荐
2个回答
|
|
while(CLK_GetFlagStatus(CLK_FLAG_LSERDY)== RESET);
/ *等待1秒钟进行LSE稳定* / 我不等待1秒钟等待它太重要了吗? 以上来自于谷歌翻译 以下为原文 while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET); /* wait for 1 second for the LSE Stabilisation */ I dont wait 1 sencond is it too important to wait it? |
|
|
|
1.你的系统时钟和rtc时钟是LSI。我认为你不需要等待LSE时钟稳定。
2.在您的代码中,RTC唤醒步长为2 / 38KHz = 0.0526ms。你可以改变唤醒计数器来设置唤醒时间。 我使用LSE时钟源作为RTC时钟。它运作良好。 以上来自于谷歌翻译 以下为原文 1. your system clock and rtc clock is LSI. I think you don't need to wait LSE clock stable. 2. In your code, RTC wakeup step is 2/38KHz = 0.0526ms. you can change wake up counter to set wakeup time. I uses LSE clock source as RTC clock. it works well. |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
1595 浏览 1 评论
2277 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1518 浏览 1 评论
2896 浏览 6 评论
5395 浏览 21 评论
395浏览 4评论
665浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
295浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
744浏览 3评论
622浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-13 04:10 , Processed in 0.818235 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号