江科大IIC读取MPU6050hal库实现

article/2025/6/13 22:40:37

hal库相关函数

初始化结构体 

typedef struct
{uint32_t ClockSpeed;       /*通讯速度*/uint32_t DutyCycle;        /*快速模式下的占空比*/uint32_t OwnAddress1;      /*设备地址1*/uint32_t AddressingMode;   /*设备地址模式*/uint32_t DualAddressMode;  /*双地址模式 */uint32_t OwnAddress2;      /*设备地址2*/uint32_t GeneralCallMode;  /*呼叫模式*/uint32_t NoStretchMode;    /*时钟延长模式*/} I2C_InitTypeDef;

句柄

#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
typedef struct __I2C_HandleTypeDef
#else
typedef struct
#endif  /* USE_HAL_I2C_REGISTER_CALLBACKS */
{I2C_TypeDef                *Instance;      /外设基地址*/I2C_InitTypeDef            Init;           /*初始化结构体*/uint8_t                    *pBuffPtr;      /*传输缓存区*/uint16_t                   XferSize;       /*传输数据大小             */__IO uint16_t              XferCount;      /*剩余传输数量     */__IO uint32_t              XferOptions;    /*传输选项*/__IO uint32_t              PreviousState;  /*通讯机上一个状态*/DMA_HandleTypeDef          *hdmatx;        /*IIC发送DMA句柄*/DMA_HandleTypeDef          *hdmarx;        /*IIC接收DMA句柄   */HAL_LockTypeDef            Lock;           /*状态锁存*/__IO HAL_I2C_StateTypeDef  State;          /*当前通讯状态*/__IO HAL_I2C_ModeTypeDef   Mode;           /*当前通讯模式*/__IO uint32_t              ErrorCode;      /*错误类型  */__IO uint32_t              Devaddress;     /*存储 I2C 目标设备的地址*/__IO uint32_t              Memaddress;     /*存放 I2C 目标设备内部的内存地址或寄存器地址*/__IO uint32_t              MemaddSize;     /*目标设备地址大小 */__IO uint32_t              EventCount;     /*记录 I2C 通信过程中发生的特定事件的次数 */#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)void (* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);           /*!< I2C Master Tx Transfer completed callback */void (* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);           /*!< I2C Master Rx Transfer completed callback */void (* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);            /*!< I2C Slave Tx Transfer completed callback  */void (* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);            /*!< I2C Slave Rx Transfer completed callback  */void (* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c);             /*!< I2C Listen Complete callback              */void (* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);              /*!< I2C Memory Tx Transfer completed callback */void (* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c);              /*!< I2C Memory Rx Transfer completed callback */void (* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c);                  /*!< I2C Error callback                        */void (* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c);              /*!< I2C Abort callback                        */void (* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode);  /*!< I2C Slave Address Match callback */void (* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c);                /*!< I2C Msp Init callback                     */void (* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c);              /*!< I2C Msp DeInit callback                   */#endif  /* USE_HAL_I2C_REGISTER_CALLBACKS */
} I2C_HandleTypeDef;

 获取标志位

__HAL_I2C_GET_FLAG()

初始化函数

HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);
HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c);
void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);
void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c);

收发函数

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout);

 主模式发送,接受,从模式发送接收,向存储器写入读取,校验设备状态

中断收发函数

HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c);
HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c);
HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress);

HAL_I2C_Master_Seq_Transmit_IT:支持序列传输,可以分阶段发送数据,中间可插入重启条件(Re-START)或停止条件(STOP)。通过XferOptions参数控制传输阶段(如首次传输、中间传输、最后传输),适用于复杂的 I2C 通信协议(如多部分数据传输、寄存器寻址后的数据写入)。

HAL_I2C_Master_Transmit_IT:只能进行单次完整传输,发送数据后自动发送停止条件。适用于简单的一次性数据传输场景。

DMA收发函数

HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);

hal库实现江科大

 我们按照江科大的I2C来配置

江科大的I2C1用到了OLED显示屏上面,所以我们要使用的是I2C2来进行通讯。

速度模式为快速模式。时钟为50KHz,占空比为2,从地址为七位,地址为0x00(这部分没啥用),全部默认值就可以了。

     IIC通讯的重点就是把标准库的函数转换成hal库的,软件模拟方式就是修改GPIO的输入输出,这个就不演示了,这里主要完成硬件IIC部分代码转换。

    首先看江科大的代码,主要就是由读写IIC两个核心代码为主,其他的代码都是在这个基础上完成的,所以我们只需要对读写IIC进行修改。

    /*** 函    数:MPU6050写寄存器* 参    数:RegAddress 寄存器地址,范围:参考MPU6050手册的寄存器描述* 参    数:Data 要写入寄存器的数据,范围:0x00~0xFF* 返 回 值:无*/
    void MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data)
    {   uint8_t temp[2];temp[0] = RegAddress;temp[1] = Data;HAL_I2C_Master_Transmit(&hi2c2,MPU6050_ADDRESS,temp,2,500);
    //	I2C_GenerateSTART(I2C2, ENABLE);										//硬件I2C生成起始条件
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);					//等待EV5
    //	
    //	I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Transmitter);	//硬件I2C发送从机地址,方向为发送
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);	//等待EV6
    //	
    //	I2C_SendData(I2C2, RegAddress);											//硬件I2C发送寄存器地址
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTING);			//等待EV8
    //	
    //	I2C_SendData(I2C2, Data);												//硬件I2C发送数据
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED);				//等待EV8_2
    //	
    //	I2C_GenerateSTOP(I2C2, ENABLE);											//硬件I2C生成终止条件
    }/*** 函    数:MPU6050读寄存器* 参    数:RegAddress 寄存器地址,范围:参考MPU6050手册的寄存器描述* 返 回 值:读取寄存器的数据,范围:0x00~0xFF*/
    uint8_t MPU6050_ReadReg(uint8_t RegAddress)
    {uint8_t Data;uint8_t temp = RegAddress;HAL_I2C_Master_Transmit(&hi2c2,MPU6050_ADDRESS,&temp,1,500);//硬件I2C发送寄存器地址HAL_I2C_Master_Receive(&hi2c2,MPU6050_ADDRESS,&Data,1,500);
    //	I2C_GenerateSTART(I2C2, ENABLE);										//硬件I2C生成起始条件
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);					//等待EV5
    //	
    //	I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Transmitter);	//硬件I2C发送从机地址,方向为发送
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);	//等待EV6
    //	
    //	I2C_SendData(I2C2, RegAddress);											//硬件I2C发送寄存器地址
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED);				//等待EV8_2
    //	
    //	I2C_GenerateSTART(I2C2, ENABLE);										//硬件I2C生成重复起始条件
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);					//等待EV5
    //	
    //	I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Receiver);		//硬件I2C发送从机地址,方向为接收
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED);		//等待EV6
    //	
    //	I2C_AcknowledgeConfig(I2C2, DISABLE);									//在接收最后一个字节之前提前将应答失能
    //	I2C_GenerateSTOP(I2C2, ENABLE);											//在接收最后一个字节之前提前申请停止条件
    //	
    //	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED);				//等待EV7
    //	Data = I2C_ReceiveData(I2C2);											//接收数据寄存器
    //	
    //	I2C_AcknowledgeConfig(I2C2, ENABLE);									//将应答恢复为使能,为了不影响后续可能产生的读取多字节操作return Data;
    }

    我们用hal库的IIC通讯方式修改标准库的通讯方式就行了,这么一看hal库的更为简单,只需要调用函数即可,而标准库得我们对事件进行等待,检测,hal库的函数功能更加齐全。

    void MPU6050_Init(void)
    {/*MPU6050寄存器初始化,需要对照MPU6050手册的寄存器描述配置,此处仅配置了部分重要的寄存器*/MPU6050_WriteReg(MPU6050_PWR_MGMT_1, 0x01);				//电源管理寄存器1,取消睡眠模式,选择时钟源为X轴陀螺仪MPU6050_WriteReg(MPU6050_PWR_MGMT_2, 0x00);				//电源管理寄存器2,保持默认值0,所有轴均不待机MPU6050_WriteReg(MPU6050_SMPLRT_DIV, 0x09);				//采样率分频寄存器,配置采样率MPU6050_WriteReg(MPU6050_CONFIG, 0x06);					//配置寄存器,配置DLPFMPU6050_WriteReg(MPU6050_GYRO_CONFIG, 0x18);			//陀螺仪配置寄存器,选择满量程为±2000°/sMPU6050_WriteReg(MPU6050_ACCEL_CONFIG, 0x18);			//加速度计配置寄存器,选择满量程为±16g
    }

     初始化函数里面的对MPU6050的校准这个也得加进去。


    http://www.hkcw.cn/article/xOPshfqcDj.shtml

    相关文章

    CTFHub-RCE 命令注入-过滤运算符

    观察源代码 代码里面可以发现过滤了运算符&#xff0c;我们可以尝试分号&#xff1b; 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1;ls 打开flag文件 cat这个php文件 127.0.0.1;cat flag_257413168915334.php 可是发现 文本内容显示…

    基带传输实验-码型变换

    基带传输实验 码型变换 因图片过多且显示失败&#xff0c;故提供源文件共大家按需自行下载&#xff1a;我用夸克网盘分享了「实验报告1.docx」&#xff0c;点击链接即可保存。打开「夸克APP」在线查看&#xff0c;支持多种文档格式转换。 链接&#xff1a;https://pan.quark.c…

    中交四航局三公司被罚没7769万元 违规售石料受重罚

    5月31日,中交四航局第三工程有限公司因在广连高速TJ02标从化段施工过程中与他人合谋私自出售合法施工产生的石料,被广州市规划和自然资源局处以两项行政处罚,合计罚没金额达77697872元。两项处罚决定日期均为2025年5月23日。根据行政处罚决定书文号穗规划资源从资罚﹝2025﹞…

    不必到处扣“恒大”的帽子 无端指责需叫停

    恒大或许没想到,多年后会以一种奇特的方式登上热搜。上周,某车企大佬的一番言论引发广泛关注。他提到“汽车产业里的恒大已经出现,只不过还没爆。”这句话在汽车消费市场和金融二级市场中引起巨大反响。这一言论之所以引起热议,一方面是因为恒大暴雷事件给人们留下了深刻印…

    Ubuntu 22.04 安装 IsaacLab 2.1.0

    安装流程参考 IsaacLab 官方文档 Quickstart Guide — Isaac Lab Documentation 1. 创建虚拟环境 conda create -n isaaclab python3.10 conda activate isaaclab 2. 安装 pytorch&#xff0c;按照官方说明&#xff0c;没什么特殊需求直接用 cuda 11.8 即可 pip install to…

    演员贾冰减肥成功瘦到脱相 与妻同框似父女

    许久没有同框的贾冰夫妇,在端午节晒出了恩爱合照。5月31日,贾冰太太胡凡凡分享了两人的照片庆祝节日,许久不见的贾冰瘦了许多,妻子写道,从此家中多了一个瘦子。由于贾冰长相显老,与妻子同框时看起来像父女。贾冰在评论区与老婆互动,他开玩笑说:“一次少做点米饭,人家吃…

    印度多地因暴雨灾害造成18死 数千人受灾

    近日,印度东北部和南部多个地区遭遇强降雨引发的山体滑坡和洪水。过去两天内,至少18人在灾害中丧生,数千人受到影响。阿萨姆邦灾害管理局表示,持续的洪水已经影响了六个地区的超过一万居民。为了应对灾情,当局设立了两个救援营地和一个物资配送中心。根据天气预报,未来两…

    天河五山花园楼下拟开网吧引争议 学校家长忧心忡忡

    晨光透过榕树叶洒下斑驳光影,空气清新的早晨,五山小学的孩子们背着书包结伴涌入学校。这条绿树成荫的上学路本是让学校和家长都放心的路,但近期由于路过的五山新天地商场拟新开一个“网吧”,变得让人忧心:网吧往往人员流动性大、成分复杂,社区和学生的安全如何保障?青少…

    今年端午节粽子刮起低卡风 健康轻食成新宠

    临近端午,粽子成为餐桌上的主角。除了传统的咸甜口味之争,“低卡”“低脂”也成为今年粽子市场的新卖点。在沈阳市铁西区的一家生鲜超市内,各式粽子的促销柜台前排满了前来选购的顾客。十色糙米粽子、粗粮低脂无糖粽子等主打“低糖”“低卡”的粽子受到消费者欢迎。销售人员…

    [项目亮点(待结合自行设计的组件)]Vue中自定义设计——扩展性原则并以开源的vuedraggable为例

    在 Vue 中设计具有良好扩展性的自定义组件&#xff0c;需要遵循一系列设计原则&#xff0c;以确保组件在不同场景下的适应性和可维护性。以下是关键原则及一个示例&#xff0c;帮助您理解如何实现这一目标。 &#x1f9ed; Vue 组件扩展性设计原则 开闭原则&#xff08;Open/Cl…

    【AcWing】899. 编辑距离

    文章目录 一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 一、题目 1、原题链接 902. 最短编辑距离 2、题目描述 二、解题报告 1、思路分析 思路参考来源y总 dp[i][j]表示将a[1~i]变为b[1~j]中所有方案的操作次数最少的一个&#xff1b;按…

    Linux基本指令/下

    目录 1.echo、cat与printf 2. > 操作符 与 >> 操作符 3. < 操作符 4.消息传送 linux文件深入 5.文件类型 6.mv命令 7.时间相关指令 8.查找命令 9.grep命令 10.zip/unzip/tar命令 11.scp命令 12.bc命令 13.uname 指令 14.快捷键大全 15.关机/重启/睡…

    从gitee仓库中恢复IDEA项目某一版本

    神奇的功能&#xff01;&#xff01;&#xff01;代码改乱了&#xff0c;但是还有救&#xff01; 打开终端&#xff0c;输入git log 复制想要恢复版本的提交哈希值&#xff0c;打开终端输入git reset --hard <哈希值> &#xff0c;就能修复到那时的提交版本了

    排污许可证原始数据(1989-2025.5)

    1156 排污许可证原始数据&#xff08;1989-2025.5&#xff09; “污染”年度发文数及主题分布 数据来源 本数据来源于全国排污许可证管理信息平台&#xff0c;由数据皮皮侠团队人工整理&#xff0c;全部内容真实有效。 时间跨度 1989-2025.5 数据范围 省、地级市企业 数…

    华为云Flexus+DeepSeek征文|华为云 Flexus X 加速 Dify 平台落地:高性能、低成本、强可靠性的云上选择

    目录 前言 1 一键部署 Dify 平台的完整步骤 1.1 选择模板 1.2 参数配置 1.3 资源栈设置 1.4 配置确认与部署 2 Flexus X 服务器的技术优势 2.1 柔性算力随心配 2.2 一直加速一直快 2.3 越用越省降本多 2.4 安全可靠更放心 3 Flexus X 在 Dify 解决方案中的性能体验…

    【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列

    题目&#xff1a;P9422 [蓝桥杯 2023 国 B] 合并数列 题目描述 小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案&#xff0c;分别将他们列为两个数组 { a 1 , a 2 , ⋯ a n } \{a_1, a_2, \cdots a_n\} {a1​,a2​,⋯an​} 和 { b 1 , …

    在Windows本地部署Dify详细操作

    Dify官网文档&#xff1a;产品简介 - Dify Docs 1.硬件要求 2.部署方式选择 本次我选择Docker Compose 部署&#xff0c;接下来我将根据官方文档指引&#xff0c;在windows电脑上完成dify本地部署 3.DockerCompose本地部署Dify 3.1 安装WSL2 官方安装WSL2的操作说明入口&…

    《彩云追月》音乐会尽展民乐柔美 传统与现代交融

    5月30日晚,北京演艺集团旗下北京民族乐团在北京艺术中心上演了民族音乐会《彩云追月》。作为北京演艺集团第十一届“五月演出季”的收官项目,本场音乐会在著名指挥家张冰冰的执棒下,为观众呈现了一场融合传统与现代、柔美与激情的民乐之旅。音乐会以北京民族乐团原创作品《长…

    深入理解交叉熵损失函数——全面推演各种形式

    带你从不一样的视角综合认识交叉熵损失&#xff0c;阅读这篇文章&#xff0c;帮你建立其分类问题&#xff0c;对比学习&#xff0c;行人重识别&#xff0c;人脸识别等问题的联系&#xff0c;阅读这篇文章相信对你阅读各种底层深度学习论文有帮助。 引言 1. 重新理解全连接层&…

    Java 异常

    文章目录 异常异常和错误 异常的处理JVM处理异常和自己处理异常finally面试题异常的处理流程 自定义异常类 异常 异常&#xff1a;将程序执行过程中发生的不正常行为&#xff0c;异常也是一个类程序出现异常后将不会继续执行异常的分类&#xff1a;算术异常&#xff0c;空指针…