前些日子做了stm32 RTC时钟的程序,现在把它记录下来。
首先配置RTC,,使用外部时钟32.768KHz。其中配置了秒中断。
RTCFirstConfigure()程序是第一次配置RTC,如果配置后以后上电不需要重新配置,如果RTC时钟快了,可内部校准。
void RTCFirstConfigure() //first ini
{
RCC_BackupResetCmd(ENABLE);
RCC_BackupResetCmd(DISABLE);
RCC_LSEConfig(RCC_LSE_ON); //enable LSE clock 32.768K
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{}
// Select LSE as RTC Clock Source
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
//Enable RTC Clock /
RCC_RTCCLKCmd(ENABLE);
// Wait for RTC registers synchronization /
RTC_WaitForSynchro();
// Wait until last write operation on RTC registers has finished /
RTC_WaitForLastTask();
// Enable the RTC Second Interrupt/
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
RTC_SetPrescaler(32767); // RTC period = RTCCLK/RTC_PR = (32.768KHz)/(32767+1)/
RTC_WaitForLastTask();
// BKP_SetRTCCalibrationValue(120); //RTC Calibration
RCC_ClearFlag();
}
RTCNorConfigure()程序配置完后每次上电都运行的程序
void RTCNorConfigure() //normal ini
{
RTC_WaitForSynchro();
RTC_WaitForLastTask();
RTC_SetPrescaler(32767);
BKP_SetRTCCalibrationValue(0); //RTC Calibration
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
RCC_ClearFlag();
}
int main(void)
{
/* System Clocks Configuration */
RCC_Configuration();
/* NVIC configuration */
NVIC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
UART_Configuration();
if (BKP_ReadBackupRegister(BKP_DR1) != 0xA4A4) //
//if(GPIO_ReadInputBit(GPIOA,GPIO_Pin_5)==0x01)
{
RTCFirstConfigure();
Time_Adjust(2011,5,20,18,12,0);
BKP_WriteBackupRegister(BKP_DR1, 0xA4A4);
}
else
{
RTCNorConfigure() ;
}
// BKP_WriteBackupRegister(BKP_DR2, 0x1234);
while (1)
{
}
}
关键字:stm32 RTC 时钟程序
引用地址:
stm32 的RTC 时钟程序
推荐阅读最新更新时间:2024-03-16 15:03
STM32 系统时钟和SysTick定时器
1.STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL (1)HSI是高速内部时钟,RC振荡器,频率为8MHz; (2)HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz – 16MHz; (3)LSI是低速内部时钟,RC振荡器,频率为40KHz; (4)LSE是低速外部时钟,接频率为32.768KHz的石英晶体; (5)PLL为锁相环倍频输出,严格的来说并不算一个独立的时钟源,PLL的输入可以接HSI/2、HSE或者HSE/2。倍频可选择为2 – 16倍,但是其输出频率最大不得超过72MHz。 其中,40kHz的LSI供独
[单片机]
STM32单片机为什么要中断
STM32中断主题: 1什么是中断 暂停原先的程序或事情,执行另外一些程序或事情,执行完成后返回原来的程序。 2为什么要中断 因为另一些程序或事情比你原先正在做的事情要重要,或者这些突发事情你是无法控制它的来临的。 3 中断的分类 按不同方法进行分类 3.1 内部中断,外部中断 (向量表中灰色为内部) 3.2 可设置中断,固化中断 3.3 中断向量表 (cl级别的芯片有10个内部 ,0~67个外部,一些没用到,其中通用化 中断编号0~17,个性化中断编号18~67) 3.4 优先级别 (由主优先级和从优先级组成,主从优先级可以通过4个位进行设置) 4 中断的组成 具体中断的名称 中断的地址 用来保存一条跳转指令,跳到哪里去
[单片机]
STM32-HAL
为了使用STM32 cubeMX工具快速完成设计,打算从StdPeriph_Lib换成HAL_Driver。初使用cubeMX,感觉就像从DOS时代迈入图形界面时代,而且对STM的所有系列有最好的支持。 在HAL库中: 常用功能: HAL_Delay() //毫秒延时,精度还是可以的。 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);//GPIO_PIN_RESET而不是RESET了。 时钟配置: 如果懂得STM32的架构,配置起来简直不能太简单,但好像有个bug就是配置为HSI时钟无法DEBUG调试。 串口中断: 通过HA
[单片机]
STM32的位操作的方法
STM32 之位带操作 Cortex-M3 支持了位操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。 在 CM3 支持的位带中,有两个区中实现了位带。 其中一个是 SRAM 区的最低 1MB 范围, 0x20000000 ‐ 0x200FFFFF(SRAM 区中的最低 1MB); 第二个则是片内外设区的最低 1MB范围, 0x40000000 ‐ 0x400FFFFF(片上外设区中的最低 1MB)。 这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。 C
[单片机]
STM32实现单麦克风实时神经网络降噪
本文是基于NNoM神经网络框架实现的。NNoM是一个为单片机定制的神经网络框架,可以实现TensorFlow 模型的量化和部署到单片机上,可以在Cortex M4/7/33等ARM内核的单片机上实现加速(STM32,LPC,Nordic nRF 等等)。 NNoM和本文代码可以在后台回复:“麦克风降噪”领取。 STM32实现单麦克风实时神经网络(RNN)降噪演示 硬声创作者:麻博士在科研 这个例子是根据著名的 RNNoise (https://jmvalin.ca/demo/rnnoise/) 的降噪方法进行设计的。整体进行了一些简化和定点化的一些修改。 本例与RNNoise主要的区别如下: 此例子并非从RNN
[单片机]
调试STM32 time遇到的问题小结
程序中增加新的time,在初始化中不能进行写入寄存器。原因是没有进行相关的初始化,有个寄存器没有进行使能操作。 程序如下: void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { //GPIO_InitTypeDef GPIO_InitStruct; if(htim_base- Instance==TIM7) { __TIM7_CLK_ENABLE(); HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM7_IRQn); } else if(htim_base- In
[单片机]
STM32 时钟RCC相关配置参考stm32f10x_rcc.h
1. 时钟使能配置: RCC_LSEConfig()、RCC_HSEConfig()、 RCC_HSICmd()、RCC_LSICmd()、RCC_PLLCmd()...... 2. 时钟源相关配置: RCC_PLLConfig()、RCC_SYSCLKConfig()、 RCC_RTCCLKConf()..... 3. 分频系数选择配置: RCC_HCLKConfig()、RCC_PCLK1Config()、RCC_PCLK2Config()...... 4. 外设时钟使能: RCC_APB1PeriphClockCmd(); // APB1线上外设时钟使能 RCC_APB2PeriphC
[单片机]
STM32单片机FSMC的使用解析
在做项目的过程中遇到了这个问题,感觉文章写得不错,共享给对FSMC的使用怀有疑惑的同伴们! LCD有如下控制线: CS:Chip Select片选,低电平有效 RS:Register Select寄存器选择 WR:Write写信号,低电平有效 RD:Read读信号,低电平有效 RESET:重启信号,低电平有效 DB0-DB15:数据线 假如这些线,全部用普通IO口控制。根据LCD控制芯片手册(大部分控制芯片时序差不多): 如果情况如下: DB0-DB15的IO全部为1(表示数据0xff),也可以为其他任意值,这里以0xff为例。 CS为0(表示选上芯片,CS拉低时,芯片对传入的数据才会有效) RS为1(表示DB0-15上传
[单片机]