1新建工程打开STM32cubeMX软件,点击New Project。选择对应开板MCU(STM32F103ZET6)。选择工程后进入工程界面,如下图所示。 2 配置外设。 RCC设置,选择HSE(外部高速时钟)为Crystal/Ceramic Resonator(晶振/陶瓷谐振器) GPIO口功能选择,PF6,PF7,PF8,PF9为LED1-LED4找到对应管脚设置为GPIO_Output模式。(**引脚为该功能的GPIO已被用作其他功能,可以忽略。绿色表示管脚已使用) 3 时钟配置时钟配置采用图形配置,直观简单。各个外设时钟一目了然。STM32最高时钟为72M,此处只有在HCLK处输入72,软件即可自动配置。(RCC选择外部高速时钟)。 4功能外设配置在配置框我们可以看到有几个区域,分别对应的功能设置如下 Multimedia(多媒体):音频视频、LCD Control(控制):定时器 Analog(模拟):DAC、ADC Connectivity(通讯连接):串口、SPI 、I2C、USB、ETH SYStem(系统):DMA(直接存储器存取)、GPIO、NVIC、RCC、看门狗 middlewares(中间件): FreeRTOS、FATFS、LwIP、USB 此工程中DMA没用的不用配置,NVIC(嵌套中断向量控制器(Nested Vectored Interrupt Controller))配置中断优先级。RCC不用配置。 GPIO Pin Level (管脚状态):低电平 GPIO mode (管脚模式 ):推挽输出 Maximum output speed (最大输出速度):低速 User Label (用户标签):LED1 更改用户标签,管脚配置图会显示管脚的标签。 4 功耗计算这个根据配置的外设计算功耗,不用理会。 5 生成工程报告
给你看看原子的外部时钟配置
//系统时钟初始化函数//pll:选择的倍频数,从2开始,最大值为16
//CHECK OK
//091209
void Stm32_Clock_Init(u8 PLL)
{
unsigned char temp=0;
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=0x00010000; //外部高速时钟使能HSEON
while(!(RCC->CR>>17));//等待外部时钟就绪
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=2;//抵消2个单位
RCC->CFGR|=PLL<<18; //设置PLL值 2~16
RCC->CFGR|=1<<16; //PLLSRC ON
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR|=0x01000000; //PLLON
while(!(RCC->CR>>25));//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
while(temp!=0x02) //等待PLL作为系统时钟设置成功
{
temp=RCC->CFGR>>2;
temp&=0x03;
}
}
周期性唤醒标志由 16 位可编程自动重载递减计数器生成。唤醒定时器范围可扩展至 17 位。
可通过 RTC_CR 寄存器中的 WUTE 位来使能此唤醒功能。
唤醒定时器的时钟输入可以是: 2、4、8 或 16 分频的 RTC 时钟 (RTCCLK)。
当 RTCCLK 为 LSE (32768 kHz) 时,可配置的唤醒中断周期介于 122 µs 和 32 s 之 间,且分辨率低至 61 µs。
· ck_spre(通常为 1 Hz 内部时钟)。
当 ck_spre 频率为 1 Hz 时,可得到的唤醒时间为 1s 到 36h 左右,分辨率为 1 秒。这 一较大的可编程时间范围分为两部分:
– WUCKSEL [2:1] = 10 时为 1s 到 18h
– WUCKSEL [2:1] = 11 时约为 18h 到 36h。在后一种情况下,会将 216 添加到 16 位计数器当前值。完成初始化序列后(请参见第 600 页的编程唤醒定时器),定时 器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有效。此外,当 计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使用其重载值(RTC_WUTR 寄存器值)动重载。 之后必须用软件清零 WUTF 标志。
通过将 RTC_CR2 寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,它会使器件退出低功耗模式。
如果已通过 RTC_CR 寄存器的位 OSEL[1:0] 使能周期性唤醒标志,则该标志可连接到RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 输出极性。
系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响。
二、配置周期唤醒
配置步骤如下:
1 禁用周期唤醒功能,复位RTC_CR2中WUTE位;
2 等待RTC_ISR1中WUTWF位置位,表示唤醒计数器可配置;
3 配置唤醒时钟,设置RTC_CR1中WUCKSEL[2:0]位:
- 000: RTCCLK/16
- 001: RTCCLK/8
- 010: RTCCLK/4
- 011: RTCCLK/2
- 10x: ck_spre(1Hz,WUT计数范围:0x0000~0xFFFF)
- 11x: ck_spre(1Hz,WUT计数范围:0x10000~0x1FFFF)
4 配置唤醒周期,装载寄存器RTC_WUTRH和RTC_WUTRL;
5 使能周期唤醒功能,置位RTC_CR2中WUTE位。(该中断会使MCU退出低功耗状态,进入运行状态。)
RTCCLK,预分频2,4,8或16。如果RTCCLK为LSE,即32768Hz,则可配置唤醒周期为:(61us ~ 32s)
ck_spre, 1Hz时钟,则可配置唤醒周期为:(1s ~ 36h)
三、RTC时钟配置
1、时钟源选择:RTC时钟源可选HSE,LSE,HSI或LSI。
为确保RTC精确工作,要求系统时钟(SYSCLK)必须等于或大于4RTCCLK值。如果系统时钟(SYSCLK)为LSE或LSI,则RTC时钟必须等于系统时钟(SYSCLK),并且禁用RTC同步机制(置位RTC_CR1寄存器RATIO位)。
2、配置RTC时钟源:配置RTC时钟源为LSE,1分频,即32768Hz。
3、配置ck_spre时钟; ck_spre时钟,默认1Hz时钟。
(1) 设置7位异步预分频,RTC_APREG:PREDIVA,默认127;
(2) 设置13(Medium)或15位同步预分频,RTC_SPRERx:PREDIV_S,默认255。
即:1Hz=32768/((127+1)(255+1))
ck_spre时钟可用于日历和定时唤醒时钟。
代码参考
//参数time 秒
void APP_EnterLP(uint32_t time )
{
MX_GPIO_Init_stop();
/ Enable Ultra low power mode /
HAL_PWREx_EnableUltraLowPower(); //使能超低功耗
/ Enable Fast WakeUP /
HAL_PWREx_EnableFastWakeUp(); //使能快速唤醒
/ Disable Wakeup Counter /
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
/ Clear Wake Up Flag /
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
// HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, (uint32_t)(time 2048), RTC_WAKEUPCLOCK_RTCCLK_DIV16);//rtc LSE=32768k 2048Hz 488us-- 32秒
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time-1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); //wangxl@20190814 时钟选择1Hz 65535/60/60 ~18 可得到的唤醒时间为 1s 到 18h 左右
printf("进入停止模式\r\n");
/ Select MSI as system clock source after Wake Up from Stop mode /
__HAL_RCC_WAKEUPSTOP_CLK_CONFIG (RCC_STOP_WAKEUPCLOCK_HSI);
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON , PWR_STOPENTRY_WFI);
MX_GPIO_Init();
HAL_Delay(5); //wangxl@20190814 稳定时钟 必免串口打印乱码
printf("wake up\r\n");
}
打开CSDN,阅读体验更佳
STM32---RTC实时时钟,随机数发生器和待机唤醒_码字但很菜的博客-CSDN博
void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm, uint32_t RTC_AlarmSubSecondValue,uint32_t RTC_AlarmSubSecondMask) uint32_t RTC_GetAlarmSubSecond(uint32_t RTC_Alarm); RTC周期唤醒相关函数 void RTC_WakeUpClockConfig(
继续访问
STM32L051低功耗STOP模式下RTC唤醒_TonyIOT的博客_stm32l05
很多MCU都有低功耗模式,以满足对功耗要求苛刻的应用场景。STM32系列MCU的低功耗模式根据其内核与类型的不同也各不相同,网上有很多文章介绍。本文总结下STM32L051的STOP模式,通过RTC唤醒。
继续访问
最新发布 GD32F4—RTC闹钟及自动唤醒中断配置详解
GD32F4RTC闹钟及自动唤醒中断配置
继续访问
STM32RTC休眠唤醒(停机模式)、独立看门狗开启状态下
本文章基于STM32F103RC; 在开启独立看门狗的状态下,进入停机模式,由RTC定时闹钟唤醒系统。 直接上代码: #include "mainh" static void RTC_NVIC_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructureNVIC_IRQChannel = RTCAlarm_IRQn;
继续访问
stm32f103 RTC周期性待机唤醒(一)_luck_horse的博客
我的RTC初始化部分有个“保存在备份寄存器的RTC标志是否已经被配置过的判断”,如果已经配置过,则进入else部分,但是这个else部分没有“要使能电源时钟,使能备份时钟,取消后备区的写保护”这些配置语句,而待机唤醒后程序从主函数执行,会执行
继续访问
RTC实时时钟_基尔霍夫原来是码农的博客_stm32 rtc 时间
RTC简介 STM32F4的RTC,是一个独立的BCD 定时器/计数器。STM32F4的RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A和ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理低功耗模式
继续访问
STM32L031低功耗深度睡眠RTC唤醒注意事项
1 发现进入睡眠后,电流12uA,满足要求。结果唤醒后,第二次进入睡眠后,电流跳到了19uA,且一直保持下去。结果看了>
在使用STM32微控制器时,需要通过配置系统时钟来确保微控制器的正常工作。一般情况下,配置系统时钟是非常重要的,因为它决定了微控制器的主频、计时器、外设和各种时序等参数,以及系统整体性能的稳定性和准确性。
然而,在一些特定的情况下,STM32微控制器可以不用手动配置系统时钟。例如,在某些开发板或参考设计中,已经默认配置好了系统时钟,并将其作为一个预定义的硬件选项。这种情况下,用户只需按照开发板或参考设计的说明书进行连接和调试,系统时钟就不需要再次进行手动配置。
此外,STM32微控制器的一些型号还提供了内部低速晶振,它们可以自动启动并提供一些基本时钟信号 (例如LSI、LSE、HSI和HSE) ,从而避免了手动配置系统时钟的麻烦。这些内部低速晶振的优点在于延长电池寿命、减小电路占用面积、减少成本等方面都有所帮助。
总之,虽然STM32微控制器通常需要手动配置系统时钟,但在某些特殊情况下,可以不用手动配置系统时钟。该决定是否需要手动配置系统时钟,还取决于具体的硬件设计和应用需求。
不会的,这两句用的是位或的方式,前面那句 PLL<<18位,因为 PLL最小是2,所以
这句执行的结果是 影响 CFGR 的第 19位以上,因为 2<<18 相当于 1<<19,所以影响的最小位是19位,后面那句 1<<16,只影响到CFGR的第16位, 两者不在同一区域,所以互不影响
而且,后面的 1<<16位,只能第16位是1,其他位全是 0,跟前面的位或,不会影响其他位
以上就是关于STM32CUBEMX怎么写程序让小灯一开始就是不亮的全部的内容,包括:STM32CUBEMX怎么写程序让小灯一开始就是不亮的、【求助】STM32大神,关于时钟配置函数导致程序跑飞问题。、rtc唤醒日期每天唤醒写什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)