打印
[STM32F1]

STM32F103---标准库函数之驱动RTC

[复制链接]
593|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

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




经过参考手册介绍

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

我们选用LSE时钟源。


使用特权

评论回复
评论
工程师犹饿死 2022-8-23 14:36 回复TA
版权声明:本文为博主原创文章,遵循 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/124530740 
沙发
工程师犹饿死|  楼主 | 2022-8-23 14:14 | 只看该作者


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

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

    2.选择对应时钟源

    3.配置RTC

   4 .选择中断

使用特权

评论回复
板凳
工程师犹饿死|  楼主 | 2022-8-23 14:15 | 只看该作者
参考如下图便可以写代码了。

使用特权

评论回复
地板
工程师犹饿死|  楼主 | 2022-8-23 14:16 | 只看该作者
最后得出代码 便可驱动RTC(代码有注释):
void rtc_init(void)
{
        NVIC_InitTypeDef NVIC_InitStruct;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);  //使能BKPEN位
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);  //使能PWREN位
        PWR_BackupAccessCmd(ENABLE); //使能PWR_CR的DBP位  
       
        RCC_LSEConfig(RCC_LSE_ON); //配置LSE时钟源开
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //RTCCLK时钟源配置为LSE
        RCC_RTCCLKCmd(ENABLE); //使能RTCCLK配置生效
       
        RTC_WaitForLastTask();  //等待RTOFF位为1
        RTC_EnterConfigMode(); //进入配置模式
       
        RTC_WaitForLastTask(); //根据配置RTC寄存器得 每次写RTC的寄存器都要等待RTOFF位为1
        RTC_SetCounter(1672502392); //RTC从这个数开始计时 这是时间戳 可以上网查时间戳转换
       
        RTC_WaitForLastTask(); //再次等待写入完成
        RTC_SetPrescaler(0x7fff); //预分频设定为0x7fff = 32.767 LSE为32.768Khz分频后约得 1KHZ
       
        RTC_WaitForLastTask(); //再次等待写入完成
        RTC_ITConfig(RTC_IT_SEC,ENABLE);//RTC中断配置,让秒中断使能
       
        RTC_WaitForLastTask();//再次等待写入完成
        RTC_ExitConfigMode(); //离开配置模式
       
        RTC_WaitForLastTask();//再次等待写入完成
       
        NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn; //NVIC是总中断配置 选择RTC这个中断通道
        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //中断使能
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2; //中断优先级2
        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; //同等优先级下 这个中断优先级3
       
        NVIC_Init(&NVIC_InitStruct);  //让上面配置生效
}

使用特权

评论回复
5
工程师犹饿死|  楼主 | 2022-8-23 14:19 | 只看该作者
----------------------------------虚线为止已经驱动好RTC了--------------

使用特权

评论回复
6
工程师犹饿死|  楼主 | 2022-8-23 14:19 | 只看该作者
下面读取RTC里面的值:

使用特权

评论回复
7
工程师犹饿死|  楼主 | 2022-8-23 14:21 | 只看该作者
/*
函数功能:RTC读取
函数参数:无
函数返回值:无
函数描述:无
*/
void Rtc_Read(void)
{
        RTC_WaitForSynchro(); //软件等待RTC_CRL中的RSF位置1
        TIME = RTC_GetCounter();//正式读取
        timeinfo = localtime(&TIME); //用time.h头文件里面的函数进行 数据处理
}

使用特权

评论回复
8
工程师犹饿死|  楼主 | 2022-8-23 14:25 | 只看该作者
--------------------读取内容完毕-----------------------------

使用特权

评论回复
9
工程师犹饿死|  楼主 | 2022-8-23 14:31 | 只看该作者
读内容说明

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

                  uint32_t TIME;
                  struct tm* timeinfo;

使用特权

评论回复
10
工程师犹饿死|  楼主 | 2022-8-23 14:32 | 只看该作者

使用特权

评论回复
11
工程师犹饿死|  楼主 | 2022-8-23 14:33 | 只看该作者
读取到的内容 经过数据处理后 可用 结构体指针 取得想要的年月日时分秒。

图里面的内容不是定义的 是time.h文件自带的 。

使用特权

评论回复
12
redone| | 2022-10-1 09:43 | 只看该作者
RTC能不能用内部时钟

使用特权

评论回复
13
Pulitzer| | 2023-1-20 07:05 | 只看该作者

图像由前景和背景组成,在灰度直方图上,前景和背景会形成高峰,在双峰之间的最低谷处就是阈值。

使用特权

评论回复
14
公羊子丹| | 2023-1-20 08:08 | 只看该作者

要将多余空间去除。对于第一个字符从第一行开始向下扫描,把那些一行中所有的点的灰度值全为0的点去掉,直到扫描到有一行不全为0时为止。

使用特权

评论回复
15
公羊子丹| | 2023-1-20 09:01 | 只看该作者

通过OV7670摄像头进行图像采集

使用特权

评论回复
16
Wordsworth| | 2023-1-20 10:04 | 只看该作者

根据色彩的变化记录每一行的颜色跳变点,由此识别出车牌区域。

使用特权

评论回复
17
Clyde011| | 2023-1-20 11:07 | 只看该作者

切割完了第四个字符之后,再依次扫描剩下的空间,直到所扫描的这一竖上的所有点的灰度值不全为0时,认为是字符的开始并依次扫描直到所扫描的这一竖上的所有点的灰度值全为0时认为是字符的结束。

使用特权

评论回复
18
万图| | 2023-1-20 13:03 | 只看该作者

计算量小,计算快。缺点也严重:在不同的图像中,颜色分布差别大,处理效果也不会很好。

使用特权

评论回复
19
Uriah| | 2023-1-20 14:06 | 只看该作者

在内存中开辟七个长为车牌长的七分之一和宽为车牌宽的区域

使用特权

评论回复
20
帛灿灿| | 2023-1-20 16:02 | 只看该作者

需要设定一个阈值来对像素点进行设置

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

886

帖子

1

粉丝