[STM32F1] STM32F103---标准库函数之驱动RTC

[复制链接]
871|13
 楼主| 工程师犹饿死 发表于 2022-8-23 14:12 | 显示全部楼层 |阅读模式

要想驱动RTC很简单,查看stm32f10x参考手册找到以下图片内容,就有思路了。

90a5e150c60d4c9d8afa864b33af5ecb.png


c23b573fcd764528a0defb9088c4dc37.png



经过参考手册介绍

LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供
一个低功耗且精确的时钟源。

我们选用LSE时钟源。


评论

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/longjintao1/article/details/124530740 ———————————————— 版权声明:本文为CSDN博主「龙大龙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/longjintao1/article/details/  发表于 2022-8-23 14:36
 楼主| 工程师犹饿死 发表于 2022-8-23 14:14 | 显示全部楼层


根据以上图片作者的思路是:

    1.首先使能对应位 进行访问RTC

    2.选择对应时钟源

    3.配置RTC

   4 .选择中断
 楼主| 工程师犹饿死 发表于 2022-8-23 14:15 | 显示全部楼层
参考如下图便可以写代码了。

4315363047095916e8.png
 楼主| 工程师犹饿死 发表于 2022-8-23 14:16 | 显示全部楼层
最后得出代码 便可驱动RTC(代码有注释):
  1. void rtc_init(void)
  2. {
  3.         NVIC_InitTypeDef NVIC_InitStruct;
  4.        
  5.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);  //使能BKPEN位
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);  //使能PWREN位
  7.         PWR_BackupAccessCmd(ENABLE); //使能PWR_CR的DBP位  
  8.        
  9.         RCC_LSEConfig(RCC_LSE_ON); //配置LSE时钟源开
  10.         RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //RTCCLK时钟源配置为LSE
  11.         RCC_RTCCLKCmd(ENABLE); //使能RTCCLK配置生效
  12.        
  13.         RTC_WaitForLastTask();  //等待RTOFF位为1
  14.         RTC_EnterConfigMode(); //进入配置模式
  15.        
  16.         RTC_WaitForLastTask(); //根据配置RTC寄存器得 每次写RTC的寄存器都要等待RTOFF位为1
  17.         RTC_SetCounter(1672502392); //RTC从这个数开始计时 这是时间戳 可以上网查时间戳转换
  18.        
  19.         RTC_WaitForLastTask(); //再次等待写入完成
  20.         RTC_SetPrescaler(0x7fff); //预分频设定为0x7fff = 32.767 LSE为32.768Khz分频后约得 1KHZ
  21.        
  22.         RTC_WaitForLastTask(); //再次等待写入完成
  23.         RTC_ITConfig(RTC_IT_SEC,ENABLE);//RTC中断配置,让秒中断使能
  24.        
  25.         RTC_WaitForLastTask();//再次等待写入完成
  26.         RTC_ExitConfigMode(); //离开配置模式
  27.        
  28.         RTC_WaitForLastTask();//再次等待写入完成
  29.        
  30.         NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn; //NVIC是总中断配置 选择RTC这个中断通道
  31.         NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //中断使能
  32.         NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2; //中断优先级2
  33.         NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; //同等优先级下 这个中断优先级3
  34.        
  35.         NVIC_Init(&NVIC_InitStruct);  //让上面配置生效
  36. }
 楼主| 工程师犹饿死 发表于 2022-8-23 14:19 | 显示全部楼层
----------------------------------虚线为止已经驱动好RTC了--------------
 楼主| 工程师犹饿死 发表于 2022-8-23 14:19 | 显示全部楼层
下面读取RTC里面的值:
519526304718cde143.png
 楼主| 工程师犹饿死 发表于 2022-8-23 14:21 | 显示全部楼层
  1. /*
  2. 函数功能:RTC读取
  3. 函数参数:无
  4. 函数返回值:无
  5. 函数描述:无
  6. */
  7. void Rtc_Read(void)
  8. {
  9.         RTC_WaitForSynchro(); //软件等待RTC_CRL中的RSF位置1
  10.         TIME = RTC_GetCounter();//正式读取
  11.         timeinfo = localtime(&TIME); //用time.h头文件里面的函数进行 数据处理
  12. }
 楼主| 工程师犹饿死 发表于 2022-8-23 14:25 | 显示全部楼层
--------------------读取内容完毕-----------------------------
 楼主| 工程师犹饿死 发表于 2022-8-23 14:31 | 显示全部楼层
读内容说明

        在主函数文件里面定义了如下变量

                  uint32_t TIME;
                  struct tm* timeinfo;
 楼主| 工程师犹饿死 发表于 2022-8-23 14:32 | 显示全部楼层
 楼主| 工程师犹饿死 发表于 2022-8-23 14:33 | 显示全部楼层
读取到的内容 经过数据处理后 可用 结构体指针 取得想要的年月日时分秒。

图里面的内容不是定义的 是time.h文件自带的 。
redone 发表于 2022-10-1 09:43 | 显示全部楼层
RTC能不能用内部时钟
Pulitzer 发表于 2023-1-20 07:05 | 显示全部楼层

图像由前景和背景组成,在灰度直方图上,前景和背景会形成高峰,在双峰之间的最低谷处就是阈值。
公羊子丹 发表于 2023-1-20 08:08 | 显示全部楼层

要将多余空间去除。对于第一个字符从第一行开始向下扫描,把那些一行中所有的点的灰度值全为0的点去掉,直到扫描到有一行不全为0时为止。
公羊子丹 发表于 2023-1-20 09:01 | 显示全部楼层

通过OV7670摄像头进行图像采集
Wordsworth 发表于 2023-1-20 10:04 | 显示全部楼层

根据色彩的变化记录每一行的颜色跳变点,由此识别出车牌区域。
Clyde011 发表于 2023-1-20 11:07 | 显示全部楼层

切割完了第四个字符之后,再依次扫描剩下的空间,直到所扫描的这一竖上的所有点的灰度值不全为0时,认为是字符的开始并依次扫描直到所扫描的这一竖上的所有点的灰度值全为0时认为是字符的结束。
万图 发表于 2023-1-20 13:03 | 显示全部楼层

计算量小,计算快。缺点也严重:在不同的图像中,颜色分布差别大,处理效果也不会很好。
Uriah 发表于 2023-1-20 14:06 | 显示全部楼层

在内存中开辟七个长为车牌长的七分之一和宽为车牌宽的区域
帛灿灿 发表于 2023-1-20 16:02 | 显示全部楼层

需要设定一个阈值来对像素点进行设置
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

967

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部