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

STM32G474RE之RTC

STM32G474RE之RTC使用HAL库实现RTC时间配置,以及报警配置,支持双路报警。

1、STM32G474RE的RTC晶振引脚:

OSC32_IN为PC14,OSC32_OUT为PC15;

2、Vbat引脚

Vbat引脚是用来给外部晶振LSE和备份寄存器提供电源。当没有“外部电池”连接到Vbat引脚,RTC会使用VDD供电。因此Vbat也可以不接“外部电池”。1.55V<Vbat<3.6V

通过上图,连接到Vbat的外部电池,需要设计充电电路给它充电

3、RTC_OUT映射

RTC报警输出RTC_OUT1和RTC_OUT2
RTC_OUT1为PC13,RTC_OUT2为PB2;

RTC_CR寄存器的bit22:21(OSEL[1:0])
OSEL[1:0]=00b,输出不使能
OSEL[1:0]=01b,RTC报警器A输出使能
OSEL[1:0]=10b,RTC报警器B输出使能
OSEL[1:0]=11b,RTC唤醒输出使能

RTC_CR寄存器的bit31(OUT2EN)
OUT2EN=0,RTC_OUT2输出不使能;
OUT2EN=1,RTC_OUT2输出使能;

RTC_CR寄存器的bit23(COE)
COE=0校准输出不使能
COE=1校准输出使能

RTC_CR寄存器的bit19(COSEL)
COE=1且COSEL=0,CALIB输出为512Hz
COE=1且COSEL=1,CALIB输出为1Hz

 4、测试程序

RTC.c程序

RTC_HandleTypeDef hrtc;void RTC_Init(void);
void RTC_Display(void);void TEST_Hal_RTC_Set_Alarm_A(void);
void TEST_Hal_RTC_Set_Alarm_B(void);void RTC_Init(void)
{RCC_OscInitTypeDef        RCC_OscInitStruct;  //配置LSE/LSI时钟RCC_PeriphCLKInitTypeDef  PeriphClkInitStruct;//用来为RTC选择时钟源__HAL_RCC_PWR_CLK_ENABLE();//Enable write accessHAL_PWR_EnableBkUpAccess();//Enable the power clock#ifdef RTC_CLOCK_SOURCE_LSERCC_OscInitStruct.OscillatorType =  RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;RCC_OscInitStruct.LSEState = RCC_LSE_ON;RCC_OscInitStruct.LSIState = RCC_LSI_OFF;HAL_RCC_OscConfig(&RCC_OscInitStruct);//配置LSE时钟,关闭LSI时钟PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);//选择LSE时钟为RTC时钟源#elif defined (RTC_CLOCK_SOURCE_LSI)RCC_OscInitStruct.OscillatorType =  RCC_OSCILLATORTYPE_LSI;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;RCC_OscInitStruct.LSIState = RCC_LSI_ON;HAL_RCC_OscConfig(&RCC_OscInitStruct);//配置LSI时钟PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);//选择LSI时钟为RTC时钟源
#endif /*RTC_CLOCK_SOURCE_LSE*/__HAL_RCC_RTCAPB_CLK_ENABLE();//使能RTC APB外部设备时钟,Enable RTC peripheral Clocks__HAL_RCC_RTC_ENABLE();//使能RTC时钟,Enable RTC Clockhrtc.Instance = RTC;                       //选择RTChrtc.Init.HourFormat = RTC_HOURFORMAT_24;  //指定RTC小时的格式hrtc.Init.AsynchPrediv = RTC_ASYNCH_PREDIV;//指定RTC异步预分法器的值。hrtc.Init.SynchPrediv = RTC_SYNCH_PREDIV;  //指定RTC同步预分配器的值。hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;HAL_RTC_Init(&hrtc);if (HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){//读TAMP_BKPxR寄存器,因为RTC_BKP_DR0=0,所以是读TAMP_BKP0R寄存器Test_RTC_Set_Date_And_Time();//设置时间为24年2月29日星期四23:59:50:00HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0, 0x32F2);//写TAMP_BKPxR寄存器,因为RTC_BKP_DR0=0,所以是写TAMP_BKPxR寄存器//将0x32F2写入TAMP_BKP0R寄存器//Writes a data in a RTC Backup data Register0}TEST_Hal_RTC_Set_Alarm_A();TEST_Hal_RTC_Set_Alarm_B();
}//函数功能:显示“年月日和星期几”以及“时分秒”
void RTC_Display(void)
{RTC_DateTypeDef sdatestructureget;//用来保存“年月日和星期几”RTC_TimeTypeDef stimestructureget;//用来保存“时分秒”printf("RTC_IT_SEC\r\n");HAL_RTC_GetTime(NULL, &stimestructureget, RTC_FORMAT_BIN);//读取"RTC时间"//读RTC_TR寄存器bit21:20(HT[1:0]),HT[1:0]表示小时的十位数值//读RTC_TR寄存器bit19:16(HU[3:0]),HU[3:0]表示小时的个位数值//读RTC_TR寄存器bit14:12(MNT[2:0]),MNT[2:0]表示分钟的十位数值//读RTC_TR寄存器bit11:8(MNU[3:0]),MNU[3:0]表示分钟的个位数值//读RTC_TR寄存器bit6:4(ST[2:0]),ST[2:0]表示秒的十位数值//读RTC_TR寄存器bit3:0(SU[3:0]),SU[3:0]表示秒的个位数值//HAL库耍牛氓,我也耍牛氓HAL_RTC_GetDate(NULL, &sdatestructureget, RTC_FORMAT_BIN);//读取"RTC日期"//读RTC_DR寄存器bit23:20(YT[3:0]),YT[3:0]表示年的十位数值//读RTC_DR寄存器bit19:16(YU[3:0]),YU[3:0]表示年的个位数值//读RTC_DR寄存器bit15:13(WDU[2:0]),WDU[2:0]=001b表示星期1;WDU[2:0]=010b表示星期2......WDU[2:0]=111b表示星期日//读RTC_DR寄存器bit12(MT),MT表示月的十位数值//读RTC_DR寄存器bit11:8(MU[3:0]),MU[3:0]表示月的个位数值//读RTC_DR寄存器bit5:4(DT[1:0]),DT[1:0]表示日的十位数值//读RTC_DR寄存器bit3:0(DU[3:0]),DU[3:0]表示日的个位数值//HAL库耍牛氓,我也耍牛氓printf("%02d-%02d-%02d  day:%02d  ", sdatestructureget.Year,sdatestructureget.Month,sdatestructureget.Date,sdatestructureget.WeekDay);printf("%02d:%02d:%02d\r\n", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);//显示时间格式为 : YY-MM-DD hh:mm:ss
}//设置时间为24年2月29日星期四23:59:50:00
void Test_RTC_Set_Date_And_Time(void)
{RTC_TimeTypeDef sTime = {0};  //用来设置时间“时分秒”RTC_DateTypeDef sDate = {0};  //用来设置日期“年月日和星期几”sTime.Hours = 0x23;      //这里是BCD码,0x23表示23小时sTime.Minutes = 0x59;    //这里是BCD码,0x59表示59分钟sTime.Seconds = 0x50;    //这里是BCD码,0x50表示50秒种sTime.SubSeconds = 0x00;//RTC_SSR寄存器bit15:0(SS[15:0])是只读的,这里设置为0x00没有意义sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;//RTC_CR寄存器bit16(ADD1H),ADD1H=0,当前时间不增加1小时//若使用“夏令时”,ADD1H=1,表示当前时间增加1小时sTime.StoreOperation = RTC_STOREOPERATION_RESET;//RTC_CR寄存器bit18(BKP),BKP=0,不使用“夏令时”//现在已经废除了“夏令时”,不要去了解。HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD);//设置“时分秒”sDate.WeekDay = RTC_WEEKDAY_THURSDAY;//这里是BCD码,RTC_WEEKDAY_THURSDAY表示0x04,星期四sDate.Date = 0x29; //这里是BCD码,0x29表示29日sDate.Month = RTC_MONTH_FEBRUARY;//这里是BCD码,RTC_MONTH_FEBRUARY表示0x02,2月sDate.Year = 0x24; //这里是BCD码,0x24表示24年HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD);//设置“年月日”
}//使用HAL设置报警,有点呆板
void TEST_Hal_RTC_Set_Alarm_A(void)
{RTC_AlarmTypeDef sAlarm = {0};//用来设置报警时间HAL_RTC_DeactivateAlarm(&hrtc,RTC_ALARM_A);//选择RTC_ALARM_A时,表示停用AlarmA报警://不使能“Alarm A报警”和“Alarm A报警中断”,同时不选择“RTC报警事件”作为触发源//必须先停用AlarmA报警,才能配置AlarmA报警时间sAlarm.Alarm = RTC_ALARM_A; //指定配置RTC报警A寄存器(RTC_ALRMAR)sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT_24;  //指定RTC报警小时的格式sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;//指定RTC警报是按照日期报警sAlarm.AlarmDateWeekDay = 0x01;//每月1号报警//  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_WEEKDAY;//指定RTC警报是按照星期报警
//  sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_FRIDAY;//每个星期五报警sAlarm.AlarmTime.Hours = 0x00;    //这里是BCD码,0x00表示00小时sAlarm.AlarmTime.Minutes = 0x00;  //这里是BCD码,0x00表示00分钟sAlarm.AlarmTime.Seconds = 0x20;  //这里是BCD码,0x20表示20秒种sAlarm.AlarmTime.SubSeconds = 0x30;//RTC_ALRMASSR寄存器bit27:24(MASKSS[3:0]),bit14:0(SS[14:0])//当选择“RTC_ALARM_A”时,时间写入RTC_ALRMAR//当选择“RTC_ALARM_B”时,时间写入RTC_ALRMBR//  sAlarm.AlarmMask = RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES|RTC_ALARMMASK_DATEWEEKDAY;//RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES|RTC_ALARMMASK_DATEWEEKDAY不关注日期小时和分钟,则每分钟报警一次sAlarm.AlarmMask = RTC_ALARMMASK_ALL;//RTC_ALARMMASK_ALL不关注日期,小时,分钟和秒,则每秒种报警一次sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;//需要匹配“子秒”HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD);HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 5, 0);//设置NVIC中断分组4:4位抢占优先级,0位响应优先级//选择中断优先级组4,即抢占优先级为4位,取值为0~15,响应优先级组为0位,取值为0HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
}//使用HAL设置报警,有点呆板
void TEST_Hal_RTC_Set_Alarm_B(void)
{RTC_AlarmTypeDef sAlarm = {0};//用来设置报警时间HAL_RTC_DeactivateAlarm(&hrtc,RTC_ALARM_B);//选择RTC_ALARM_A时,表示停用AlarmB报警://不使能“Alarm B报警”和“Alarm B报警中断”,同时不选择“RTC报警事件”作为触发源//必须先停用AlarmB报警,才能配置AlarmB报警时间sAlarm.Alarm = RTC_ALARM_B; //指定配置RTC报警B寄存器(RTC_ALRMBR)sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT_24;  //指定RTC报警小时的格式sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;//指定RTC警报是按照日期报警sAlarm.AlarmDateWeekDay = 0x01;//每月1号报警//  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_WEEKDAY;//指定RTC警报是按照星期报警
//  sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_FRIDAY;//每个星期五报警sAlarm.AlarmTime.Hours = 0x00;    //这里是BCD码,0x00表示00小时sAlarm.AlarmTime.Minutes = 0x00;  //这里是BCD码,0x00表示00分钟sAlarm.AlarmTime.Seconds = 0x20;  //这里是BCD码,0x20表示20秒种sAlarm.AlarmTime.SubSeconds = 0x30;//RTC_ALRMASSR寄存器bit27:24(MASKSS[3:0]),bit14:0(SS[14:0])//当选择“RTC_ALARM_A”时,时间写入RTC_ALRMAR//当选择“RTC_ALARM_B”时,时间写入RTC_ALRMBR//  sAlarm.AlarmMask = RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES|RTC_ALARMMASK_DATEWEEKDAY;//RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES|RTC_ALARMMASK_DATEWEEKDAY不关注日期小时和分钟,则每分钟报警一次sAlarm.AlarmMask = RTC_ALARMMASK_ALL;//RTC_ALARMMASK_ALL不关注日期,小时,分钟和秒,则每秒种报警一次sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;//需要匹配“子秒”HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD);HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 5, 0);//设置NVIC中断分组4:4位抢占优先级,0位响应优先级//选择中断优先级组4,即抢占优先级为4位,取值为0~15,响应优先级组为0位,取值为0HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
}void RTC_Alarm_IRQHandler(void)
{
//  HAL_RTC_AlarmIRQHandler(&hrtc);uint32_t tmp = READ_REG(RTC->MISR);//Get interrupt statusif ((tmp & RTC_MISR_ALRAMF) != 0U)//RTC ALARM A报警{//当选择“RTC_ALARM_A”时,时间与RTC_ALRMAR相同时报警WRITE_REG(RTC->SCR, RTC_SCR_CALRAF);//Clear the AlarmA interrupt pending bit
//    __HAL_RTC_ALARM_EXTI_CLEAR_IT();
//		LED1_On();//报警时,LED亮LED1_Toggle();}if ((tmp & RTC_MISR_ALRBMF) != 0U)//RTC ALARM A报警{//当选择“RTC_ALARM_B”时,时间与RTC_ALRMBR相同时报警WRITE_REG(RTC->SCR, RTC_SCR_CALRBF);//Clear the AlarmB interrupt pending bit
//    __HAL_RTC_ALARM_EXTI_CLEAR_IT();LED2_Toggle();}__HAL_RTC_ALARM_EXTI_CLEAR_IT();
}

RTC.h程序

#ifndef __RTC_H__
#define __RTC_H__#include "stm32g4xx_hal.h"
//使能int8_t,int16_t,int32_t,int64_t
//使能uint8_t,uint16_t,uint32_t,uint64_t//#define RTC_CLOCK_SOURCE_LSI    //RTC使用CPU内部LSI作为时钟源
#define RTC_CLOCK_SOURCE_LSE#ifdef RTC_CLOCK_SOURCE_LSI
#define RTC_ASYNCH_PREDIV    0x7C
#define RTC_SYNCH_PREDIV     0xF9
#endif#ifdef RTC_CLOCK_SOURCE_LSE
#define RTC_ASYNCH_PREDIV  0x7F
#define RTC_SYNCH_PREDIV   0xFF
#endifextern void RTC_Init(void);
extern void RTC_Display(void);#endif /*__ RTC_H__ */

5、测试结果

6、配置RTC_OUT引脚输出

//在调用HAL_RTC_Init()之前调用RTC_OUTx_Init()
//RTC_OUTx_Init(&hrtc,RTC_OUTPUT_ALARMA,1);//RTC报警器A从RTC_OUT1引脚输出
//RTC_OUTx_Init(&hrtc,RTC_OUTPUT_ALARMB,1);//RTC报警器B从RTC_OUT1引脚输出
//RTC_OUTx_Init(&hrtc,RTC_OUTPUT_ALARMA,2);//RTC报警器A从RTC_OUT2引脚输出
//RTC_OUTx_Init(&hrtc,RTC_OUTPUT_ALARMB,2);//RTC报警器B从RTC_OUT2引脚输出

注意:
配置RTC_OUT1输出“RTC报警器A的报警标志”,RTC_OUT1输出的电平时间和ALRAF的保持时间有关;
配置RTC_OUT2输出“RTC报警器A的报警标志”,RTC_OUT2输出的电平时间和ALRAF的保持时间有关;

配置RTC_OUT1输出“RTC报警器B的报警标志”,RTC_OUT1输出的电平时间和ALRBF的保持时间有关;
配置RTC_OUT2输出“RTC报警器B的报警标志”,RTC_OUT2输出的电平时间和ALRBF的保持时间有关

 

 调用举例:

 中断函数添加一个延时,否则,示波器差,会看不到波形

 

这里是为了演示RTC_OUT1和RTC_OUT2输出。 

相关文章:

STM32G474RE之RTC

STM32G474RE之RTC使用HAL库实现RTC时间配置&#xff0c;以及报警配置&#xff0c;支持双路报警。 1、STM32G474RE的RTC晶振引脚&#xff1a; OSC32_IN为PC14&#xff0c;OSC32_OUT为PC15&#xff1b; 2、Vbat引脚 Vbat引脚是用来给外部晶振LSE和备份寄存器提供电源。当没有“…...

TwinCAT3 实时核中ADS实现C++ server、clinet数据传输

一、基本概念 ADS &#xff1a;Automation Device Specification&#xff0c;ADS设备间进行通信的协议规范。协议定义了ADS device之间如何寻址对方、ADS device之间可以执行哪些操作、执行这些操作需要哪些参数&#xff0c;以及操作完成后如何返回结果等。从编程角度看&#…...

apt:Debian 高级包管理器

​apt​ 是 Advanced Package Tool 的缩写。 ​apt​ 是一个在 Debian 及其衍生版本&#xff08;如 Ubuntu&#xff09;上管理软件包的工具。以下是一些常见的 apt​ 命令和用法&#xff1a; 1. 更新软件包列表 sudo apt update2. 安装软件包 sudo apt install package_nam…...

基于React+JsonServer+Antddesign的读书笔记关联系统

文章目录 涉及技术系统功能JsonServer介绍JsonServer安装JsonServer使用创建React项目我的书架显示效果关键代码笔记显示效果关键代码人物关系显示效果关键代码个人中心显示效果关键代码完整代码和数据下载地址项目启动步骤启动json-server启动react项目涉及技术 React Antddes…...

【win工具】win安装flameshot并设置截图快捷键

1.下载flameshot软件2.windows端配置flameshot快捷键3.取消win自带截图快捷键 1.下载flameshot软件 https://flameshot.org/#download installer版本为安装包 portable版本为免安装版 2.windows端配置flameshot快捷键 https://cloud.tencent.com/developer/article/2114952 W…...

react 安装使用 antd+国际化+定制化主题+样式兼容

安装antd 现在从 yarn 或 npm 或 pnpm 安装并引入 antd。 yarn add antd修改 src/App.js&#xff0c;引入 antd 的按钮组件。 import React from react; import { Button } from antd;const App: React.FC () > (<div className"App"><Button type&q…...

【Kubernetes】常见面试题汇总(十六)

目录 48.简述 Kubernetes PodsecurityPolicy 机制能实现哪些安全策略&#xff1f; 49.简述 Kubernetes 网络模型&#xff1f; 50.简述 Kubernetes CNl 模型&#xff1f; 48.简述 Kubernetes PodsecurityPolicy 机制能实现哪些安全策略&#xff1f; 在 PodSecurityPolicy 对象…...

【mysql】mysql之优化

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…...

Django REST framework 实现缓存机制以优化性能

Django REST framework 实现缓存机制以优化性能 页面首页中&#xff0c;导航菜单或轮播广告在项目中每一个页面都会被用户频繁访问到&#xff0c;所以我们可以实现缓存&#xff0c;减少MySQL数据库的查询压力&#xff0c;使用内存缓存可以加快数据查询速度。 cache_page 装饰…...

快速了解高并发解决方案

对《高并发的哲学原理》的个人总结&#xff0c;原书地址如下 https://pphc.lvwenhan.com/ 本书的核心思想就是拆分&#xff0c;服务细化拆分多资源并行。 通用设计方法 例子&#xff1a;每秒100万次http请求 通过架构解决性能问题&#xff0c;在面对并发需求时&#xff…...

SpringBoot框架下的房产销售系统设计与实现

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统&#xff0c;它彻底改变了过去传统的…...

基于RFID的门禁系统的设计(论文+源码)

1系统方案设计 通过需求分析&#xff0c;基于RFID的门禁系统总体设计框图。系统采用STM32单片机作为系统主控核心&#xff0c;利用独立按键与RFID识别模块能够实现门禁系统密码与IC卡开门功能。WiFi模块实现系统与手机APP的通信&#xff0c;用户可以通过手机APP进行门禁开关操…...

湖仓一体-Paimon篇-简介

什么是Paimon&#xff1f; 2021年末&#xff0c;Flink官方提出打造一个全新的存储 Flink Table Store&#xff0c;一个 Flink 完全内置的存储。 为了让 Flink Table Store 能够有更大的发展&#xff0c;Flink PMC经过讨论决定将其捐赠Apache进行独立孵化。 2023 年 3 月 12 日…...

React Native 0.76版本发布

关于 React Native 的 New Architecture 概念&#xff0c;最早应该是从 2018 年 RN 团队决定重写大量底层实现开始&#xff0c;因为那时候 React Native 面临各种结构问题和性能瓶颈&#xff0c;最终迫使 RN 团队开始进行重构。 而从 React Native 0.68 开始&#xff0c;New A…...

yolo自动化项目实例解析(一)日志格式输出、并发异步多线程、websocket、循环截图、yolo推理、3d寻路

本系列是为了学习自动化操作相关知识点&#xff0c;对开源项目原神ai的技术理解&#xff0c;开源地址如下&#xff0c;拉取版本号为1.78 https://gitee.com/LanRenZhiNeng/lanren-genshin-impact-ai 一、main入口主要函数说明 vi main.py 封装的函数较多&#xff0c;我们拆分…...

获取无人机经纬度是否在指定禁飞区内

1. 计算公式: (AB X AE ) * (CD X CE) >= 0 && (DA X DE ) * (BC X BE) >= 0 参考: 判断点是否在矩形框(多边形)内_qt opencv 判断一点是否在矩形内-CSDN博客 2.测试结果: 3.实现完整代码: #include<cstd...

解读:以RTC为基,AI为脑的“超拟人”AI实时互动解决方案

我们打造了一款满足想象与应用的智能体——AI实时互动。 谈谈AI智能体 当AI变得足够聪明时&#xff0c;用户与AI的交互将变得真实自然。于是&#xff0c;构建高拟真AI与用户的实时交互&#xff0c;已经成为企业提升数智化生产力的新思路。 在这个交互过程中&#xff0c;存在一…...

软件测试学习笔记丨Postman基础使用

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32096 一、Postman基础使用 1.1 简介 Postman是一款流行的API测试工具和开发环境&#xff0c;旨在简化API开发过程、测试和文档编制。优势&#xff1a; Postman可以快速构建请求&#xff0c…...

HTML5+CSS3面试题:(第一天)

目录 1.HTML5有哪些新特性,移除了那些元素&#xff1f;如何处理HTML5新标签的浏览器兼容问题&#xff1f;如何区分HTML和HTML5&#xff1f; 2.谈谈iframe标签的优缺点? iframe的优点&#xff1a; iframe的缺点&#xff1a; 3.CSS3有哪些新特性? 4.让chrome支持小于12px的…...

微信小程序中的模块化、组件化开发:完整指南

文章目录 前言一、模块化与组件化开发的优势1.1模块化开发的优势1.2 组件化开发的优势 二、组件的抽离标准及规范2.1 抽离组件的标准2.2 组件化开发规范 三、模块化规范的种类及优劣比较3.1 CommonJS3.2 ES6 Modules3.3 优劣对比 四、组件封装&#xff1a;全局组件、分包组件、…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...