江协科技STM32学习- P32 MPU6050

        🚀write in front🚀  
🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 

💬本系列哔哩哔哩江科大STM32的视频为主以及自己的总结梳理📚 

🚀Projeet source code🚀   

💾工程代码放在了本人的Gitee仓库:iPickCan (iPickCan) - Gitee.com

引用:

STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

Keil5 MDK版 下载与安装教程(STM32单片机编程软件)_mdk528-CSDN博客

STM32之Keil5 MDK的安装与下载_keil5下载程序到单片机stm32-CSDN博客

0. 江协科技/江科大-STM32入门教程-各章节详细笔记-查阅传送门-STM32标准库开发_江协科技stm32笔记-CSDN博客

【STM32】江科大STM32学习笔记汇总(已完结)_stm32江科大笔记-CSDN博客

江科大STM32学习笔记(上)_stm32博客-CSDN博客

STM32学习笔记一(基于标准库学习)_电平输出推免-CSDN博客

STM32 MCU学习资源-CSDN博客

stm32学习笔记-作者: Vera工程师养成记

stem32江科大自学笔记-CSDN博客

术语:

英文缩写描述
GPIO:General Purpose Input Onuput通用输入输出
AFIO:Alternate Function Input Output复用输入输出
AO:Analog Output模拟输出
DO:Digital Output数字输出
内部时钟源 CK_INT:Clock Internal内部时钟源
外部时钟源 ETR:External Trigger 时钟源 External 触发
外部时钟源 ETR:External Trigger mode 1外部时钟源 External 触发 时钟模式1
外部时钟源 ETR:External Trigger mode 2外部时钟源 External 触发 时钟模式2
外部时钟源 ITRx:Internal Trigger inputs外部时钟源,ITRx (Internal trigger inputs)内部触发输入
外部时钟源 TIx:exTernal Input pin 外部时钟源 TIx (external input pin)外部输入引脚
CCR:Capture/Comapre Register捕获/比较寄存器
OC:Output Compare输出比较
IC:Input Capture输入捕获
TI1FP1:TI1 Filter Polarity 1Extern Input 1 Filter Polarity 1,外部输入1滤波极性1
TI1FP2:TI1 Filter Polarity 2Extern Input 1 Filter Polarity 2,外部输入1滤波极性2
DMA:Direct Memory Access直接存储器存取

正文:

0. 概述

从 2024/06/12 定下计划开始学习下江协科技STM32课程,接下来将会按照哔站上江协科技STM32的教学视频来学习入门STM32 开发,本文是视频教程 P2 STM32简介一讲的笔记。

1.🚚MP6050

本节来研究一下MPU6050的芯片

2.🚚MPU6050简介

MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,要这么多轴的信息是要干啥?可以通过数据融合,可进一步得到姿态角(或者叫做欧拉角),常应用于平衡车、飞行器等需要检测自身姿态的场景。

什么是6轴姿态传感器?

什么是6轴姿态传感器?

在现实的三维空间里,只有xyz三个轴。但是这个MPU6050芯片里面有加速度计和陀螺仪两种传感器,可以分别测量xyz三个轴的加速度和角速度,加起来总共就是六个轴,所以这个芯片是六轴姿态传感器。当然,如果芯片里再集成一个三轴的磁场传感器,测量xyz轴的磁场强度,就叫做九轴姿态传感器。如果再集成一个气压传感器,测量气压大小,就叫做十轴姿态传感器。一般气压值反映的是高度信息,海拔越高,气压越低,所以气压计是单独测量垂直地面的高度信息的。这也就是姿态传感器的一些术语,之后别人再说这个传感器是六轴,九轴,十轴,你就知道六轴就是三轴加速度和三轴角速度,九轴就是三轴加速度、三轴角速度和三轴磁场强度。十轴就是三轴加速度、三轴角速度、三轴磁场强度和一个气压强度。这个大家了解一下。

欧拉角是什么

以飞机为例,欧拉角就是飞机机身相对于初始三个轴的夹角。

  • 🌿飞机机头下倾或上仰这个轴的夹角叫做俯仰Pitch
  • 🌿飞机机身左翻滚或者右翻滚,这个轴的夹角叫滚转Roll
  • 🌿飞机机身保持水平,机头向左转向,或者向右转向这个轴的夹角,叫做偏航Yaw

简单来说欧拉角就表达了飞机此时的姿态,飞机是上仰还是下倾?飞机向左倾斜还是向右倾斜?通过欧拉角都能清晰的表示出来。如果你想做一个飞控算法,为了保持飞机姿态平稳,那么得到一个精确且稳定的欧拉角就至关重要。

但是可惜的是,之前我们所说的加速度计,陀螺仪,磁力计,任何一种传感器都不能获得精确且稳定的欧拉角。要想获得精确且稳定的欧拉角就必须进行数据融合,把这几种传感器的数据结合起来,综合多种传感器的数据,取长补短,这样才能获得精确且稳定的欧拉角。常见的数据融合算法一般有互补滤波、卡尔曼滤波等。这就涉及到惯性导航领域里姿态解算的知识点。不过我们本节的侧重点是I2C通信,我们最终的程序现象就是把这些传感器的原始数据读出来,显示在OLED上就可以了。

姿态传感器解算出姿态角之后,就常应用于平衡车、飞行器等需要检测自身姿态的场景。对于平衡车来说,如果传感器检测的车身向前或者向后倾斜,程序就可以控制轮子进行调整,保持平衡车的平衡。对于飞行器来说,控制的轴就多一些,一般至少需要检测俯仰角和滚转角两个夹角,然后控制电机,保持飞机的平衡,这就是这个MPU6050姿态传感器的作用。

后我们来看一下MPU6050内部的六个轴传感器的作用:

3轴加速度计(Accelerometer一般简称Accel,或者Acc,或者A):测量X、Y、Z轴的加速度

看左上面第一张图,这个图xyz轴就是一个三维的坐标系,其中横向的这个轴定义为x轴。纵向的这个轴定义为y轴,垂直于芯片的这个轴定义为z轴,这就是这个芯片对xyz轴的定义,然后在xyz轴,这个芯片内部都分别布置了一个加速度计。

什么是加速度计

看一下上面第二张图,这就是加速度计的结构图,其中水平的这个虚线是感应轴线。中间是一个具有一定质量,可以左右滑动的小滑块,然后左右各有一个弹簧顶着它,如果把这个东西拿在手上来回晃,中间这个小滑块就由左右移动,去压缩或者拉伸两边的弹簧。当滑块移动时就会带动上面的电位器滑动。这个电位器,其实就是一个分压电阻,测量电位器输出的电压就能得到小滑块所受的加速度值了。其实可以发现这个加速度计实际上就是一个弹簧测力计,根据牛顿第二定律F=ma。我们想测量这个加速度a,就可以找一个单位质量的物体,测量它所受的力F就行了。xyz三个轴分别都有这样一个测力计。

可以想象一下,这个芯片里面有六个侧力的秤,组成一个正方体。然后正方体内部放一个大小正好的单位质量小球,这个小球压在哪个侧面上,就会产生对应一个轴的数据输出。比如小球压在下面,这个面就是z轴的正值,小球压上面,这个面就是z轴的负值。对向两个面一组,一面为正值,一面为负值。正方体六个面所测的力就是三个轴的加速度值,这就是加速度计的一个直观理解。

比如把芯片静置水平放在地球上,就只有底面测力计受到小球的压力。所以此时数据输出就是xyz轴输出为0。z轴输出一个g的加速度值,如果此时芯片正处于自由落体,就是所有面都不受力。此时,数据输出就是xyz轴都为0。如果此时芯片向左倾斜放置,就是底面和左面都受力。

这时我们求一个三角函数就能得到向左的倾角西塔了。

不过这个倾角只有芯片静止的时候才是正确的,因为加速度分为重力加速度和运动加速度。如果只是芯片运动起来了,这个三角函数求得的倾角就会受运动加速度的影响。举个例子,比如你坐在汽车里,现在汽车突然向前加速,你是不是感觉椅子底面和靠背都受力?这时如果用三角函数求角度,得到的结果就是你的车停在一个斜坡上,停在斜坡上也是椅子底面和靠背都受力,但实际上,车的状态确实水平向前加速,

所以仅使用加速度计求角度,只能在物体静止的时候使用,当物体运动起来时,这个角度就会受运动加速度的影响而变得不准确。

以上就是加速度计的测量原理和特征。总结一下就是加速度计具有静态稳定性不具有动态稳定性。

3轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度

上面第三张图的那个传感器就是三轴陀螺仪传感器的机械模型,中间是一个有一定质量的旋转轮,外面是三个轴的平衡环。

当中间这个旋转轮高速旋转时,根据角动量守恒的原理,这个旋转轮具有保持它原有角动量的趋势,这个趋势可以保持旋转轴方向不变。当外部物体的方向转动时,内部的旋转轴方向并不会转动。这就会在平衡环连接处产生角度偏差。如果我们在连接处放一个旋转的电位器,测量电位器的电压就能得到旋转的角度了。从这里分析,陀螺仪应该是可以直接得到角度的。但是我们这个MPU6050的陀螺仪并不能直接测量角度,可能是结构的差异,或者是工艺的限制。我们这个芯片内部的陀螺仪测量的实际上是角速度,而不是角度。

陀螺仪测量xyz轴的角速度值分别表示了此时芯片绕x轴,绕y轴和绕z轴旋转的角速度。这里也可以用一个模型来辅助理解。

可以把这个测量角速度的陀螺仪想象成是游乐园的旋转飞椅。

中间的轴转的越快,这个椅子飞的就越远。最终我们测量一下对两个椅子飞起来的距离或者飞起来的夹角就能得到中间轴的角速度了。这就是测量角速度的陀螺仪工作原理。如果我们想通过角速度得到角度的话我们只需要对角速度进行积分即可角速度积分就是角度

和加速度计测角度一样,这个角速度积分得到的角度也有局限性。就是当物体静止时,角速度值会因为噪声无法完全归零然后经过积分的不断累积,这个小噪声就会导致计算出来的角度产生缓慢的漂移。也就是角速度积分得到的角度经不起时间的考验。不过这个角度,无论是运动还是静止,都是没问题的,它不会受物体运动的影响。所以总结下来就是陀螺仪具有动态稳定性,不具有静态稳定性
 

🌿🌿🌿这个陀螺仪是动态稳定,静态不稳定,之前加速度计是静态稳定,动态不稳定。这两种传感器的特性正好互补,所以我们取长补短,进行一下互补滤波就能融合得到静态和动态都稳定的姿态角了。这就是姿态解算的大体思路。

接下来我们来看几个MPU6050的参数。

3.🚚MPU6050参数

16位ADC采集传感器的模拟信号,量化范围:-32768~32767

之前我们也了解过,这里无论是加速度计还是陀螺仪,它们的基本原理都是设计一种装置。当传感器所感应的参数变化时,这个装置能带动电位器滑动,或者装置本身的电阻可以随感应参数变化而变化。这样在外接一个电源,通过电阻分压,就能把现实世界的各种状态用电压表示出来了。

当然传感器里面肯定不是我们上面图片这样的机械结构,芯片里面都是通过电子的技术来完成各种参数的测量的,要不然也塞不到这么小的芯片里。只是我们理解的时候可以把它想象成这种机械结构,但实际上芯片里面如何用电来完成同样的功能,这就是这个厂家的机密了。

总之,电子的传感器最终也是输出一个随姿态变化而变化的电压,要想量化这个电压信号,就离不开AD转换器,所以这个芯片内部也是自带了AD转换器,可以对各个模拟产量进行量化。这个ADC是十六位的,量化输出的数据变化范围就是2的16次方。如果作为无符号数的话,就是0~65535,这里因为传感器每个轴都有正负的数据,所以这个输出结果是一个有符号,数量化范围是-32768~32767。数据是十六位的,会分为两个字节存储,这个之后我们读取数据计时器的时候就可以看到了。

十六位有符号数的范围所对应的物理参量范围是多少?

这里就需要定义一个满量程范围。这个满量程范围就相当于我们之前学ADC的时候那个VREF参考电压一样,AD值达到最大时,对应电压是3.3V还是5V,需要有一个参考电压来指定,这里也是一样,十六位AD值达到最大时,对应的物理参量具体是多少,也是由满量程范围来决定的。在这里加速度计和陀螺仪的满量程范围都有几个选项可以选择。

🌿🌿加速度计满量程可以选择±2、±4、±8、±16(g),单位是g也就是重力加速度1个g=9.8m/(s^2)。

🌿🌿陀螺仪满量程可以选择±250、±500、±1000、±2000(°/sec),单位是度每秒,就是角速度的单位,每秒旋转了多少度。

如果所测量的物体运动非常剧烈,就可以把满量程选择大一些,防止加速度或者角速度超出了量程。如果你所测量的物体运动比较平缓,就可以选择比较小的量程,这样测量的分辨率就会更大。

举个例子,比如你选择加速度计满量程为±16(g),当读取AD值为最大值32768时,当然实际的最大值是32767,就表示此时测量的加速度为满量程±16(g),AD值为32768的一半时就表示加速度为8g。如果选择满量程为±2g的话,此时32768就对应2g的加速度,32768的一半就对应1g的加速度。因为AD值的范围是一定的,所以满量程选的越小测量就会越细腻

另外,AD值和加速度值是线性关系,一一对应的,由AD值求加速度就是乘一个系数就可以了,这跟我们之前学ADC的时候,由AD值求电压值是一样的道理。然后下面陀螺仪的满量程选择也是同样的操作,满量程选的越大,测量范围就越广,满量程选的越小,测量分辨率就越高。所以这个满量程的选择要根据实际需求来。

这个MPU6050可配置的数字低通滤波器(可以配置寄存器来选择对输出数据进行低通滤波)。如果觉得输出数据抖动太厉害,就可以加一点低通滤波,这样输出数据就会平缓一些。

可配置的时钟源和可配置的采样分频,这两个参数是配合使用的。时钟源经过这个分频器的分频,可以为AD转换和内部其他电路提供时钟,控制分频系数就会控制AD转换的快慢了。

这个芯片的I2C从机地址:1101000(AD0=0),1101001(AD0=1

AD0就是板子引出来的一个引脚,可以调节I2C从机地址的最低位。这里地址是七位的,如果像这样用二进制来表示的话,一般没啥问题。如果在程序中用十六进制表示的话,一般会有两种表示方式。

以这个1101000的地址为例,第一种就是单纯的把这七位的二进制转化为十六进制,110 1000转换十六进制就是0x68。I2C通信的时序中第一个字节的高七位是从机地址,最低位是读写位。所以如果你认为0x68是从机地址的话,在发送第一个字节时,要先把0x68左移一位,即(0x68<<1),在按位或上读写位,读0写0。这是认为从机地址是0x68的操作。

但是还有另一种常见的表示方式,就是把x68左移一位后的数据当做从机地址,0x68左移1位之后是0xD0,这时在实际发送第一个字节时,如果你要写,就直接把0xD0当做第一个字节。如果你要读,就把0xD0或上0x01,即0xD1当做第一个字节。这种表示方式就不需要进行左移的操作了,或者说这种表示方式是把读写位也融入到了从机地址里来。

一般比较喜欢融入读写位的这种表示方式。所以在本节程序中,MPU6050的从机地址是0xD0。

我们接着继续来看一下硬件电路。

4.🚚硬件电路

这里展示的就是MPU6050模块的原理图。

其中右边这个是MPU6050的芯片,左下角是一个八针的排针,左上角是一个LDO低压差线性稳压器。

右边这个MPU6050的芯片本身的引脚是非常多的,包括时钟,I2C这些通信引脚,供电、帧同步等等,不过这里有很多引脚我们都用不到。还有一些引脚是这个芯片最小系统里的固定连接,这个最小系统一般手册里都会有抄过来就行

然后看左下角八针的排针引出来的各引脚功能

在这里可以看到,SCL和SDA模块已经内置了两个4.7K的上拉电阻了。所以在我们接线的时候,直接把SCL和SDA接在GPIO口就行了,不需要再在外面另外接上来电阻了。

🌿🌿XCL、XDA这两个是芯片里面的主机I2C通信引脚,设计这两个引脚是为了扩展芯片功能。

之前我们说过MPU6050是一个六轴姿态传感器。但是只有加速度计和陀螺仪的六个轴融合出来的姿态角是有缺陷的。这个缺陷就是绕z轴的角度,也就是偏航角它的漂移无法通过加速度计进行修正。这像是让你坐在车里,不看任何窗户,然后让你辨别当前车子的行驶方向。短时间内,可以通过陀螺仪得知方向的变化,从而确定变化后的行驶方向。但是时间一长,车子到处转弯,没有稳定的参考了,就肯定会迷失方向。所以这时候你就要带个指南针在身边,提供长时间的稳定偏航角进行参考来对陀螺仪感知的方向进行纠正。这就是九轴姿态传感器多出的磁力计的作用。另外如果要制作无人机,需要定高飞行,这时候就还需要增加气压计,扩展为10轴提供一个高度信息的稳定参考。所以根据项目要求,这个六轴传感器可能不够用,需要进行扩展,这个时候这个XCL、XDA就可以起作用了。XCL和XDA通常就是用于外接磁力计或者气压计。当接上磁力计或气压计之后,MPU6050的主机接口可以直接访问这些扩展芯片的数据。把这些扩展芯片的数据读取到MPU6050里面,在MPU6050里面会有DMP单元进行数据融合和姿态解算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906135.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AutoGLM:智谱AI的创新,让手机成为你的生活全能助手

目录 引言一、AutoGLM&#xff1a;开启AI的Phone Use时代二、技术核心&#xff1a;AI从“语言理解”到“执行操作”三、实际应用案例&#xff1a;AutoGLM的智能力量1. 智能生活管理&#x1f34e;2. 社交网络的智能互动&#x1f351;3. 办公自动化&#x1f352;4. 电子商务的购物…

CSGO: Content-Style Composition in Text-to-Image Generation(代码的复现)

文章目录 CSGO简介论文的代码部署需要下载的模型权重&#xff1a;复现中存在的一些问题 推理代码生成结果示意图 CSGO简介 CSGO: Content-Style Composition in Text-to-Image Generation&#xff08;风格迁移&#xff09; 本文是一篇风格迁移的论文&#xff1a;将内容参考图像…

Excel重新踩坑4:快捷键;逻辑函数;文本函数;日期相关函数;查找与引用函数;统计类函数;数组公式

0、excel常用快捷键 基础快捷键&#xff1a; alt&#xff1a;快速区域求和&#xff1b; ★ altenter&#xff1a;强制换行&#xff08;因为在excel单元格中没法用enter换行&#xff09;&#xff1b;altj&#xff1a;强制换行符的替换删除&#xff0c;这里altj就是在替换中输入…

【JavaEE初阶 — 多线程】认识线程

目录 认识线程&#xff08;Thread&#xff09; 1 线程是什么? 2 为什么要有线程 3 进程和线程的区别 区别一 区别二 区别三 区别四 4. Java的线程和操作系统线程的关系 5.创建第一个多线程程序 引入Thread类 重写run() start()与run()区别 降低多线程对CPU的占用…

链栈的引用

链栈&#xff0c;自己实现一遍&#xff0c;但是节点存储不是整数&#xff0c;存储学生信息&#xff08;年龄&#xff0c;分数&#xff0c;姓名&#xff09;三级引用。 1、建立学生信息结构体&#xff0c;将data改为学生信息结构体类型。 2、循环入栈和出栈。 #include<m…

Games101笔记-三维Transform变换(三)

1、二维矩阵转化为三维 1、将3x3的变换矩阵升维到4x4的变换矩阵即可 2、缩放及平移 3、旋转 2、视图变换 1、MVP变换&#xff1a;模型&#xff08;场景&#xff09;视图&#xff08;相机&#xff09;投影&#xff08;正交/透视&#xff09; 2、正交投影和透视投影区别 …

树莓派开发相关知识六 -串口通讯

1、uart串口通信 uart串口通信协议&#xff0c;使用txd&#xff0c;rxd双引脚实行异步数据传输&#xff0c;其中txd为传输口&#xff0c;rxd为接收口。 其协议如上图&#xff0c;由起始位有效数据位奇偶校验位(*可选)&#xff0c;停止位(*宽度可调)&#xff0c;空闲位组成&…

qt QCheckBox详解

QCheckBox 是 Qt 框架中的一个控件&#xff0c;用于创建复选框&#xff0c;允许用户进行选择和取消选择。它通常用于表单、设置界面和任何需要用户选择的场景。 QCheckBox继承自QAbstractButton类&#xff0c;因此继承了按钮的特性。它表示一个复选框&#xff0c;用户可以通过…

计算机网络(Ⅴ)网络核心

电路交换 为源主机分配了独享的线路。有资源浪费是缺点。 优点是保障了性能&#xff0c;但是资源共享的能力较差&#xff08;计算机的通讯不是持续的&#xff0c;具有突发性&#xff0c;不适用于电路交换&#xff09; 频分&#xff08;FDM&#xff09;&#xff1a;交换节点与交…

漫途焊机安全生产监管方案,提升安全生产管理水平!

随着智能制造时代的到来&#xff0c;企业安全生产管理的重要性日益凸显。特别是在现代工厂中&#xff0c;焊机的安全生产监管成为了一个不容忽视的重要环节。传统的焊机安全生产监管方式存在诸多不足&#xff0c;如人工巡检频率低、数据延迟、安全隐患发现不及时等问题。因此&a…

下划线命名转驼峰

转小驼峰 //下划线对小驼峰命名转换 public class UnderlineToCamelCase {public static String underlineToCamel(String underlineStr) {String[] words underlineStr.split("_");StringBuilder result new StringBuilder(words[0]);// 从第二个单词开始&#x…

ICPC区域赛成都站【赛后回顾+总结】

传送门 前言赛后总结赛后回顾赛后感悟 前言 首先&#xff0c;这是本人本赛季第一场XCPC区域赛&#xff0c;也是本人算竞生涯中第一场XCPC区域赛&#xff08;之前只打过邀请赛和省赛&#xff09;。 赛后总结 然后赛后总结一下&#xff1a;我队天崩开局&#xff0c;我队出师不利…

小红书笔记详情API接口系列(概述到示例案例)

小红书笔记详情数据API接口是小红书开放平台提供的一项服务&#xff0c;允许开发者获取小红书上的笔记详情数据。以下是对该接口及其使用方法的详细介绍&#xff1a; 一、接口概述 小红书笔记详情数据API接口提供了一系列的接口&#xff0c;允许开发者获取笔记的标题、正文、标…

如何有效提升MySQL大表分页查询效率(本文以一张900万条数据体量的表为例进行详细解读)

文章目录 1、提出问题1.1 问题测试 2、解决问题&#xff08;三种方案&#xff09;2.1、方案一&#xff1a;查询的时候&#xff0c;只返回主键 ID2.2、方案二&#xff1a;查询的时候&#xff0c;通过主键 ID 过滤2.3、方案三&#xff1a;采用 elasticSearch 作为搜索引擎 3、总结…

整车功能架构 --- 智能座舱

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

「C/C++」C/C++ 之 动态内存分配

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

WSGI、uwsgi、uWSGI与Nginx

一、写在前 WSGI、uwsgi与uWSGI WSGI (web server gateway interface 网络服务网关接口) 只能用于python&#xff0c;是一个接口标准协议&#xff0c;django、flask自带有uwsgi 是WSGI的通信协议uWSGI是实现了uwsgi协议和WSGI服务的web服务器 他们是为了将web服务器与web框架…

【element ui系列】分享几种实现el-table表格单选的方法

在实际的开发中&#xff0c;经常会用到从表格中选择一条记录的情况&#xff0c;虽然官方给出的例子&#xff0c;但是给人感觉看起来不明显&#xff0c;于是&#xff0c;在此基础上做了改进。接下来&#xff0c;介绍两种常见的实现方法&#xff1a; 1、采用复选框(checkbox)实现…

nodejs批量修改word文档目录样式

工作中遇到一个需求:写个nodejs脚本,对word文档(1000+个)的目录页面进行美化。实现过程遇到不少麻烦,在此分享下。 整体思路 众所周知,Docx格式的Word文档其实是个以xml文件为主的zip压缩包,所以,页面美化整体思路是:先将文档后缀名改为zip并解压到本地,然后将关键的…

信息安全数学基础(40)同态

一、定义 设R和S是两个环&#xff08;或群等其他代数结构&#xff09;&#xff0c;如果存在一个映射σ&#xff1a;R→S&#xff0c;使得对于R中的任意元素a和b&#xff0c;都满足σ(ab)σ(a)σ(b)和σ(ab)σ(a)σ(b)&#xff08;在群的情况下&#xff0c;则满足σ(a*b)σ(a)σ…