当前位置: 首页 > news >正文

百度搜索不到我的网站外贸建站优化

百度搜索不到我的网站,外贸建站优化,北京鸿讯泰德网站建设,计算机毕业论文及毕业设计RTC:实时时钟 1、实时时钟2、闹钟中断3、秒中断4、输出功能5、BKP的读写6、BKP的侵入事件 1、实时时钟 ①RTC.c #include "RTC.h"/*** brief:RTC初始化函数*/ RCC_PeriphCLKInitTypeDef RTCPeriphClkInit; //RTC时钟配置结构体 RTC_HandleT…

RTC:实时时钟

  • 1、实时时钟
  • 2、闹钟中断
  • 3、秒中断
  • 4、输出功能
  • 5、BKP的读写
  • 6、BKP的侵入事件

1、实时时钟

①RTC.c

#include "RTC.h"/*** @brief:RTC初始化函数*/
RCC_PeriphCLKInitTypeDef RTCPeriphClkInit;  //RTC时钟配置结构体
RTC_HandleTypeDef hrtc;                     //RTC配置结构体
void RTC_Init(void)
{/* 配置RTC的时钟源 */RTCPeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC; //需要配置的外设:RTCRTCPeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; //RTC时钟源:LSE(外部低速时钟)HAL_RCCEx_PeriphCLKConfig(&RTCPeriphClkInit);/* RTC的初始化配置 */__HAL_RCC_RTC_ENABLE();                     //使能RTC的时钟__HAL_RCC_PWR_CLK_ENABLE();                 //使能PWR的时钟__HAL_RCC_BKP_CLK_ENABLE();                 //使能BKP的时钟hrtc.Instance = RTC;                        //选择RTChrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; //时钟源的分频值,1Hzhrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;   //无输出HAL_RTC_Init(&hrtc);
}/*** @brief:HAL_RTC_Init()调用函数*/
void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc)
{/* 其他的配置 */
}/*** @brief:日期转换为时间戳秒函数*/
void Time_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec)
{struct tm DayData;              //定义结构体变量DayDataDayData.tm_year = Year - 1900;  //设置为2025年DayData.tm_mon = Mon;           //设置为1月DayData.tm_mday = Day;          //设置为2号DayData.tm_hour = Hour;         //设置为20时DayData.tm_min = Min;           //设置为04分DayData.tm_sec = Sec;           //设置为40秒time_t temp = mktime(&DayData);                     //将设置的日期转换为时间挫数据__HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);           //关闭RTC写保护WRITE_REG(hrtc.Instance->CNTH,(temp >> 16));        //将转换好的时间挫写入RTC计数寄存器高16位WRITE_REG(hrtc.Instance->CNTL,temp & 0x0000FFFF);   //将转换好的时间挫写入RTC计数寄存器低16位__HAL_RTC_WRITEPROTECTION_ENABLE(&hrtc);            //开启RTC写保护
}/*** @brief:将RTC中的计数器寄存器值转换为日期*/
struct tm* Time_Get(void)
{/* 读取数据寄存器的值 */time_t temp = (READ_REG(hrtc.Instance->CNTH) << 16) | READ_REG(hrtc.Instance->CNTL);/* 将计数器的值转换为日期 */return localtime(&temp);//将时间戳转换为本地的年月日时分秒
}

②RTC.h

#ifndef __RTC_H
#define __RTC_H#include "stm32f1xx_hal.h"
#include <time.h>
extern RTC_HandleTypeDef hrtc;  //RTC配置结构体
void RTC_Init(void);
void Time_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec);
struct tm* Time_Get(void);#endif

③main.c

#include "stm32f1xx_hal.h"
#include "STM32_RCC_Init.h"
#include "RTC.h"
#include "UART.h"struct tm* Day; 
int main(void){HAL_Init();HSE_RCC_Init(); UART1_Init(115200);RTC_Init();printf("代码测试\r\n");Time_Set(2025,1,2,21,8,30);//2025-01-02 20:55:30while(1){Day = Time_Get();printf("%d-%d-%d %d:%d:%d\r\n",Day->tm_year + 1900,Day->tm_mon,Day->tm_mday,Day->tm_hour,Day->tm_min,Day->tm_sec);HAL_Delay(1000);}	
}

在这里插入图片描述

2、闹钟中断

①RTC.c

#include "RTC.h"/*** @brief:RTC初始化函数*/
RCC_PeriphCLKInitTypeDef RTCPeriphClkInit;  //RTC时钟配置结构体
RTC_HandleTypeDef hrtc;                     //RTC配置结构体
void RTC_Init(void)
{/* 配置RTC的时钟源 */RTCPeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC; //需要配置的外设:RTCRTCPeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; //RTC时钟源:LSE(外部低速时钟)HAL_RCCEx_PeriphCLKConfig(&RTCPeriphClkInit);/* RTC的初始化配置 */__HAL_RCC_RTC_ENABLE();                     //使能RTC的时钟__HAL_RCC_PWR_CLK_ENABLE();                 //使能PWR的时钟__HAL_RCC_BKP_CLK_ENABLE();                 //使能BKP的时钟hrtc.Instance = RTC;                        //选择RTChrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; //时钟源的分频值,1Hzhrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;   //无输出HAL_RTC_Init(&hrtc);/* 开启闹钟中断 */__HAL_RTC_ALARM_CLEAR_FLAG(&hrtc, RTC_FLAG_ALRAF);  //清除闹钟标志__HAL_RTC_ALARM_ENABLE_IT(&hrtc, RTC_IT_ALRA);      //开启闹钟中断__HAL_RTC_ALARM_EXTI_ENABLE_IT();                   //开启闹钟外部中断线,EXTI17为闹钟事件__HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE();          //上升沿触发HAL_NVIC_SetPriority(RTC_Alarm_IRQn,3,0);HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
}/*** @brief:HAL_RTC_Init()调用函数*/
void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc)
{/* 其他的配置 */
}/*** @brief:日期转换为时间挫函数*/
void Time_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec)
{struct tm DayData;              //定义结构体变量DayDataDayData.tm_year = Year - 1900;  //设置为2025年DayData.tm_mon = Mon;           //设置为1月DayData.tm_mday = Day;          //设置为2号DayData.tm_hour = Hour;         //设置为20时DayData.tm_min = Min;           //设置为04分DayData.tm_sec = Sec;           //设置为40秒time_t temp = mktime(&DayData);                     //将设置的日期转换为时间挫数据__HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);           //关闭RTC写保护WRITE_REG(hrtc.Instance->CNTH,(temp >> 16));        //将转换好的时间挫写入RTC计数寄存器高16位WRITE_REG(hrtc.Instance->CNTL,temp & 0x0000FFFF);   //将转换好的时间挫写入RTC计数寄存器低16位__HAL_RTC_WRITEPROTECTION_ENABLE(&hrtc);            //开启RTC写保护HAL_Delay(20);                                      //等待写保护成功,必须要有
}/*** @brief:闹钟时间转换为时间挫函数*/
void AlarmTime_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec)
{struct tm DayData;              //定义结构体变量DayDataDayData.tm_year = Year - 1900;  //设置为2025年DayData.tm_mon = Mon;           //设置为1月DayData.tm_mday = Day;          //设置为2号DayData.tm_hour = Hour;         //设置为20时DayData.tm_min = Min;           //设置为04分DayData.tm_sec = Sec;           //设置为40秒time_t temp = mktime(&DayData);                     //将设置的日期转换为时间挫数据__HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);           //关闭RTC写保护WRITE_REG(hrtc.Instance->ALRH,(temp >> 16));        //将转换好的时间挫写入RTC闹钟寄存器高16位WRITE_REG(hrtc.Instance->ALRL,temp & 0x0000FFFF);   //将转换好的时间挫写入RTC闹钟寄存器低16位__HAL_RTC_WRITEPROTECTION_ENABLE(&hrtc);            //开启RTC写保护HAL_Delay(20);                                      //等待写保护成功,必须要有
}/*** @brief:将RTC中的计数器寄存器值转换为日期*/
struct tm* Time_Get(void)
{/* 读取数据寄存器的值 */time_t temp = (READ_REG(hrtc.Instance->CNTH) << 16) | READ_REG(hrtc.Instance->CNTL);/* 将计数器的值转换为日期 */return localtime(&temp);//将时间戳转换为本地的年月日时分秒
}

②RTC.h

#ifndef __RTC_H
#define __RTC_H#include "stm32f1xx_hal.h"
#include <time.h>
extern RTC_HandleTypeDef hrtc;  //RTC配置结构体
void RTC_Init(void);
void Time_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec);
void AlarmTime_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec);
struct tm* Time_Get(void);#endif

③main.c

#include "stm32f1xx_hal.h"
#include "STM32_RCC_Init.h"
#include "RTC.h"
#include "UART.h"struct tm* Day; 
int main(void){HAL_Init();HSE_RCC_Init(); UART1_Init(115200);RTC_Init();printf("代码测试\r\n");Time_Set(2025,1,2,21,8,30);         //2025-01-02 20:55:30AlarmTime_Set(2025,1,2,21,8,35);    //闹钟时钟为2025-01-02 20:55:35while(1){Day = Time_Get();printf("%d-%d-%d %d:%d:%d\r\n",Day->tm_year + 1900,Day->tm_mon,Day->tm_mday,Day->tm_hour,Day->tm_min,Day->tm_sec);HAL_Delay(1000);}	
}

④stm32f1xx_it.c

#include "stm32f1xx_hal.h"   
#include "stm32f1xx_it.h" 
#include "RTC.h" 
#include "UART.h"/*** @brief:RTC闹钟中断服务函数*/
void RTC_Alarm_IRQHandler(void)
{HAL_RTC_AlarmIRQHandler(&hrtc);
}
/******************* 下面的中断的回调函数 ***************************/
/*** @brief:RTC闹钟中断回调函数函数*/
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{printf("起床啦!\r\n");
}

在这里插入图片描述

3、秒中断

①RTC.c

#include "RTC.h"/*** @brief:RTC初始化函数*/
RCC_PeriphCLKInitTypeDef RTCPeriphClkInit;  //RTC时钟配置结构体
RTC_HandleTypeDef hrtc;                     //RTC配置结构体
void RTC_Init(void)
{/* 配置RTC的时钟源 */RTCPeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC; //需要配置的外设:RTCRTCPeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; //RTC时钟源:LSE(外部低速时钟)HAL_RCCEx_PeriphCLKConfig(&RTCPeriphClkInit);/* RTC的初始化配置 */__HAL_RCC_RTC_ENABLE();                     //使能RTC的时钟__HAL_RCC_PWR_CLK_ENABLE();                 //使能PWR的时钟__HAL_RCC_BKP_CLK_ENABLE();                 //使能BKP的时钟hrtc.Instance = RTC;                        //选择RTChrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; //时钟源的分频值,1Hzhrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;   //无输出HAL_RTC_Init(&hrtc);/* 开启秒中断 */HAL_RTCEx_SetSecond_IT(&hrtc);              //开启秒中断HAL_NVIC_SetPriority(RTC_IRQn,3,0);HAL_NVIC_EnableIRQ(RTC_IRQn);
}/*** @brief:HAL_RTC_Init()调用函数*/
void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc)
{/* 其他的配置 */
}/*** @brief:日期转换为时间挫函数*/
void Time_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec)
{struct tm DayData;              //定义结构体变量DayDataDayData.tm_year = Year - 1900;  //设置为2025年DayData.tm_mon = Mon;           //设置为1月DayData.tm_mday = Day;          //设置为2号DayData.tm_hour = Hour;         //设置为20时DayData.tm_min = Min;           //设置为04分DayData.tm_sec = Sec;           //设置为40秒time_t temp = mktime(&DayData);                     //将设置的日期转换为时间挫数据__HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);           //关闭RTC写保护WRITE_REG(hrtc.Instance->CNTH,(temp >> 16));        //将转换好的时间挫写入RTC计数寄存器高16位WRITE_REG(hrtc.Instance->CNTL,temp & 0x0000FFFF);   //将转换好的时间挫写入RTC计数寄存器低16位__HAL_RTC_WRITEPROTECTION_ENABLE(&hrtc);            //开启RTC写保护HAL_Delay(20);                                      //等待写保护成功,必须要有
}/*** @brief:闹钟时间转换为时间挫函数*/
void AlarmTime_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec)
{struct tm DayData;              //定义结构体变量DayDataDayData.tm_year = Year - 1900;  //设置为2025年DayData.tm_mon = Mon;           //设置为1月DayData.tm_mday = Day;          //设置为2号DayData.tm_hour = Hour;         //设置为20时DayData.tm_min = Min;           //设置为04分DayData.tm_sec = Sec;           //设置为40秒time_t temp = mktime(&DayData);                     //将设置的日期转换为时间挫数据__HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);           //关闭RTC写保护WRITE_REG(hrtc.Instance->ALRH,(temp >> 16));        //将转换好的时间挫写入RTC闹钟寄存器高16位WRITE_REG(hrtc.Instance->ALRL,temp & 0x0000FFFF);   //将转换好的时间挫写入RTC闹钟寄存器低16位__HAL_RTC_WRITEPROTECTION_ENABLE(&hrtc);            //开启RTC写保护HAL_Delay(20);                                      //等待写保护成功,必须要有
}/*** @brief:将RTC中的计数器寄存器值转换为日期*/
struct tm* Time_Get(void)
{/* 读取数据寄存器的值 */time_t temp = (READ_REG(hrtc.Instance->CNTH) << 16) | READ_REG(hrtc.Instance->CNTL);/* 将计数器的值转换为日期 */return localtime(&temp);//将时间戳转换为本地的年月日时分秒
}

②RTC.h

#ifndef __RTC_H
#define __RTC_H#include "stm32f1xx_hal.h"
#include <time.h>
extern RTC_HandleTypeDef hrtc;  //RTC配置结构体
void RTC_Init(void);
void Time_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec);
void AlarmTime_Set(int Year,int Mon,int Day,int Hour,int Min,int Sec);
struct tm* Time_Get(void);#endif

③main.c

#include "stm32f1xx_hal.h"
#include "STM32_RCC_Init.h"
#include "RTC.h"
#include "UART.h"
#include "LED.h"struct tm* Day; 
int main(void){HAL_Init();HSE_RCC_Init(); UART1_Init(115200);LED_GPIO_Init();RTC_Init();printf("代码测试\r\n");Time_Set(2025,1,2,21,8,30);         //2025-01-02 20:55:30while(1){Day = Time_Get();printf("%d-%d-%d %d:%d:%d\r\n",Day->tm_year + 1900,Day->tm_mon,Day->tm_mday,Day->tm_hour,Day->tm_min,Day->tm_sec);HAL_Delay(1000);}	
}

④stm32f1xx_it.c

#include "stm32f1xx_hal.h"   
#include "stm32f1xx_it.h" 
#include "RTC.h" 
#include "UART.h"
#include "LED.h"/*** @brief:RTC秒中断服务函数*/
void RTC_IRQHandler(void)
{HAL_RTCEx_RTCIRQHandler(&hrtc);
}/******************* 下面的中断的回调函数 ***************************/
/*** @brief:RTC秒中断回调函数*/
void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc)
{LED_Turn();
}

4、输出功能

①RTC.c文件需要修改的代码如下

hrtc.Init.OutPut = RTC_OUTPUTSOURCE_SECOND; //输出:秒脉冲
hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM ; //输出:闹钟脉冲
hrtc.Init.OutPut = RTC_OUTPUTSOURCE_CALIBCLOCK; //输出:32768Hz/64后的脉冲

输出引脚是PC13,但是不用配置它。其他的代码不用修改

5、BKP的读写

BKP的读写需要RTC的配置,但是不需要开启LSE的时钟源。只需要打开RTC时钟+配置RTC总控结构体
①RTC.c文件的代码如下

#include "RTC.h"/*** @brief:RTC初始化函数*/
RTC_HandleTypeDef hrtc;                     //RTC配置结构体
void RTC_Init(void)
{    /* RTC的初始化配置 */__HAL_RCC_RTC_ENABLE();                     //使能RTC的时钟__HAL_RCC_PWR_CLK_ENABLE();                 //使能PWR的时钟__HAL_RCC_BKP_CLK_ENABLE();                 //使能BKP的时钟hrtc.Instance = RTC;                        //选择RTCHAL_RTC_Init(&hrtc);
}/*** @brief:HAL_RTC_Init()调用函数*/
void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc)
{/* 其他的配置 */
}

②main.c文件的代码如下

#include "stm32f1xx_hal.h"
#include "STM32_RCC_Init.h"
#include "RTC.h"
#include "UART.h"uint16_t Data = 0x1234;
int main(void){HAL_Init();HSE_RCC_Init(); UART1_Init(115200);RTC_Init();										//初始化BKPprintf("代码测试\r\n");HAL_RTCEx_BKUPWrite(&hrtc, 1, Data);            //向BKP的第一个数据寄存器写入数据printf("%x\r\n",HAL_RTCEx_BKUPRead(&hrtc, 1));  //读取BKP的第一个数据寄存器的数据while(1){}	
}

在这里插入图片描述

6、BKP的侵入事件

若发生了侵入事件,会将BKP中的数据清除(主电源断电,侵入事件也有效)。侵入事件检测引脚为PC13且检测电平。但是我们不用配置PC13。
在这里插入图片描述当侵入事件产生后,应该先关闭侵入检测。需要侵入检测则重新调用API函数开启侵入检测。
①RTC.c文件的代码如下

#include "RTC.h"/*** @brief:RTC初始化函数*/
RTC_HandleTypeDef hrtc;                     //RTC配置结构体
RTC_TamperTypeDef Tamper;                   //侵入事件配置结构体
void RTC_Init(void)
{    /* RTC的初始化配置 */__HAL_RCC_RTC_ENABLE();                     //使能RTC的时钟__HAL_RCC_PWR_CLK_ENABLE();                 //使能PWR的时钟__HAL_RCC_BKP_CLK_ENABLE();                 //使能BKP的时钟hrtc.Instance = RTC;                        //选择RTCHAL_RTC_Init(&hrtc);/* 侵入事件配置 */Tamper.Tamper = RTC_TAMPER_1;                   //指定引脚:PC13Tamper.Trigger = RTC_TAMPERTRIGGER_HIGHLEVEL;   //高电平触发HAL_RTCEx_SetTamper_IT(&hrtc,&Tamper);          //配置侵入事件,开启中断HAL_NVIC_SetPriority(TAMPER_IRQn,3,0);HAL_NVIC_EnableIRQ(TAMPER_IRQn);
}

②main.c文件的代码如下

#include "stm32f1xx_hal.h"
#include "STM32_RCC_Init.h"
#include "RTC.h"
#include "UART.h"uint16_t Data = 0x1234;
int main(void){HAL_Init();HSE_RCC_Init(); UART1_Init(115200);RTC_Init();										//初始化BKP,初始化侵入事件printf("代码测试\r\n");HAL_RTCEx_BKUPWrite(&hrtc, 1, Data);            //向BKP的第一个数据寄存器写入数据printf("%x\r\n",HAL_RTCEx_BKUPRead(&hrtc, 1));  //读取BKP的第一个数据寄存器的数据while(1){}	
}

③stm32f1xx_it.c文件的代码如下

#include "stm32f1xx_hal.h"   
#include "stm32f1xx_it.h" 
#include "RTC.h" 
#include "UART.h"/*** @brief:RTC侵入事件中断服务函数*/
void TAMPER_IRQHandler(void)
{HAL_RTCEx_TamperIRQHandler(&hrtc);
}/******************* 下面的中断的回调函数 ***************************/
/*** @brief:RTC侵入中断回调函数*/
void HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc)
{printf("发生侵入事件了\r\n");HAL_RTCEx_DeactivateTamper(hrtc, RTC_TAMPER_1);//关闭侵入事件
}
http://www.dinnco.com/news/30839.html

相关文章:

  • 自己做的网站服务器开了进不去制作网站模板
  • 内蒙古城乡和住房建设厅网站seo的名词解释
  • 如何使网站做的更好企业宣传网站
  • 中英文网站切换自动点击关键词软件
  • app网站开发报价2022千锋教育培训收费一览表
  • 导航特效网站视频号视频下载助手app
  • 做门户网站需要注册公司吗电子商务营销策略有哪些
  • 国外做ui的网站j百度官网认证价格
  • 做中介开什么网站企业营销网站建设系统
  • 水平b2电子商务网站谷歌浏览器 安卓下载
  • 外贸网站外包网络营销服务外包
  • 网站建设 保障接单 计划seo北京优化
  • 网站改成自适应html网站模板免费
  • 网站后台发文章图片链接怎么做360推广客服电话是多少
  • c 做网站怎么插入id公司网络营销策划书
  • windows8 网站建站命令百度上海分公司
  • 苹果网站上物体阴影怎么做的网页搜索
  • 做网站主流用什么语言重庆网络seo公司
  • 腾讯广告一级代理名单seo网站设计
  • 中企动力做网站怎么样如何自建网站?
  • 包牛牛网站怎么做百度投诉电话客服24小时
  • 西安哪个公司可以做网站制作网页的步骤
  • 实创装饰官网seo技术
  • 世界购物网站排名营销 推广
  • 湖南做网站360o2023免费b站推广大全
  • 网站开发公司基础产品百度权重划分等级
  • 英语培训学校网站建设多少钱西安疫情最新数据
  • 网站如何管理网站免费推广软件
  • 管理系统登录优化网站视频
  • 娄底网站设计搜盘网