MCU常用外设总线

目录

  • 前言
  • 一、时钟与中断
  • 二、GPIO
  • 三、ADC
  • 四、定时器
    • 4.1 基本定时器
    • 4.2 通用定时器
      • 4.2.1 输入捕获
      • 4.2.2 输出比较
  • 五、UART
    • 5.1 通讯的基本概念
      • 5.1.1 串行通讯与并行通讯
      • 5.1.2 全双工、半双工及单工通讯
      • 5.1.3 同步通讯与异步通讯
      • 5.1.4 通信速率
    • 5.2 异步串口UART
      • 5.2.1 物理层
      • 5.2.2 协议层
    • 5.3 串口配置
  • 六、IIC
  • 七、SPI

前言

  本文主要讲单片机外设的功能,即这些外设是什么,可以用来干什么,了解了之后我们就可以通过相应的寄存器配置来驱动这些外设。本文带大家深入了解一下这些外设的工作原理,知道了功能之后,对应任意一个MCU都可以找相应功能的寄存器。因为寄存器名字可以不同,配置方式可以不同,但是功能不可能有很大的差异。这样才能在换一个平台MCU的情况下,实现快速入手


一、时钟与中断

  在之前首先了解一下寄存器,与远古时代的汇编不同,现在都是C语言操作寄存器。那寄存器是什么,百度百科说的很笼统,我们可以将寄存器比做成可以被软件控制的开关,通过不同的开关组合状态,就可以形成我们想要的功能。
  然后我们再了解一下时钟,学过数电的都知道,系统内部改变状态都需要一个CLK脉冲信号,这边到MCU就是一个时钟信号。以下所有外设都需要时钟的支持,当然我们可以通过寄存器和选择器来配置系统时钟,并对其作相应的分频和倍频,来得到我们需要的时钟频率。以下就是M4内核的时钟树结构:
在这里插入图片描述
  不过时钟不需要太关心,我们只需要知道常用的主频是多少Hz就行,因为对于像STM32之类,使用库函数都被官方封装好了时钟,然后被启动文件直接上电执行。如果是RISC或者STM8内核之类,其实配置时钟就一两个寄存器,一般就是主频选择和时钟分频。其他如51内核的,一般情况下不需要配置时钟,MCU默认开启,除非需要修改时钟的情况下才需要配置。
  有了上面的基础就可以开始中断部分了,首先要知道中断是什么?中断是一种发生了一个外部的事件时调用相应的处理程序的过程。这个概念可能不好理解,那我们直接需要知道就是中断可以用来干什么,怎么来触发中断的就行。正常情况下,计算机所有指令都是随着系统时钟从上到下执行,但是中断可以在系统指令执行期间优先执行。
  通常情况下,中断需要一个触发源,即触发中断的信号,如外部中断、定时器、ADC等等,出发后程序运行进入中断函数,原主函数位置会保存到栈空间,等中断函数执行完成之后,再从栈空间读取继续主函数的运行。
在这里插入图片描述
  上图就是STM32的中断控制器,其他MCU也很类似,由上大概可以知道需要配置的寄存器如下,然后再对比参考手册找相应的寄存器:

  • 中断触发源:即触发中断信号的来源
  • 中断优先级:部分MCU需要配置中断优先级,即高优先级的中断优先处理
  • 中断触发类型:比如在上升沿触发
  • 中断使能:即开启中断功能
  • 中断标志位:主要是触发中断和中断完成标志位,需要软件判断和设置

二、GPIO

  GPIO( general purpose intput output) 是通用输入输出端口的简称。那什么是输入输出呢?我们都知道芯片只能处理数字信号,数字信号在数据上体现为逻辑0和逻辑1,实际上代表了高电平(5V或3.3V)和低电平(0V)两种状态。那输入就是MCU通过I/O口来检测外部电平状态,而输出就是MCU向外部输出不同的电平状态。
在这里插入图片描述

  知道I/O的功能之后,我们就可以来配置GPIO,需要配置的参数如下:

  1. I/O时钟
      ARM系列需要单独开启IO时钟,其他如51、STM8、RISC等不需要配置,只需要初始化系统时钟即可。
  2. 方向控制
      方向控制就是配置IO口输入输出模式,基本所有MCU都需要配置
  3. 输入模式配置
      当IO被用于输入模式时,一般可设置为上拉、下拉或浮空模式。所谓的上拉就是接一个上拉电阻,上拉电阻连接正极,提供5V或者3.3V电压,即默认高电平。浮空模式就是没有高低电平状态,I/O口电压跟随周围电路状态
  4. 输出模式配置
      当IO被用于输出模式时,一般可设置为推挽、开漏或准双向口。准双向口和推挽的区别是,推挽是强上下拉,可以提供更大的电流。开漏输出时会关闭内部上拉电阻,只能下拉输出,上拉输出需要外部加上拉电阻。由于开漏相当于MOS开关,所以可以用于IIC电路电平匹配
  5. 数据寄存器
      当I/O口作为输入的时候,可以读取数据寄存器,查看I/O口高低电平状态;当I/O口作为输出时,将数据写进数据寄存器,此时对应的引脚就可以输出相应的电平状态
  6. I/O复用与映射
      I/O复用是一个很常见的功能,就是将普通的I/O口当作其他外设使用,比如复用为ADC可以当作模拟输入,复用给定时器作为PWM输出等等;而映射就是当复用的I/O引脚不够用的时候,可以把其他外设比如ADC的某个通道,映射到特定的引脚,原来的I/O作为其他用途

三、ADC

  首先要知道ADC是什么?ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模数转换器,是指将连续变化的模拟信号转换为离散的数字信号的器件。
  那ADC有什么用呢?我们在电路中通常会使用一些传感器,这些传感器可以将一些模拟量转换成不同的阻值,比如温度传感器,他的阻值会随着温度的变换而变化,此时我们只要测量出阻值就可以根据线性表得出温度。而ADC最基本的作用就是测量电压,然后我们就可以根据电压值计算出阻值,从而得到最终温度。
在这里插入图片描述
  上图就是STM32内部ADC框架,还是很复杂的,不过一些MCU的ADC没有那么多功能,我们可以去掉上图的3和7,以一个RISC的内部ADC框架来说明,如下图:
在这里插入图片描述
  这样了解ADC就会简单点,ADC具体配置如下:

  1. ADC时钟配置
  • 使能ADC时钟,即开启ADC
  • 选择时钟源,即时钟信号的来源,比如系统时钟,内部晶振,外部晶振
  • 进行时钟分频
  • 采样延迟,防止采样抖动,可以选择延迟一段时间后采样
  1. 通道选择
  • I/O配置:使用ADC采样一定是用的某个I/O口,将其设置成模拟输入模式
  • 通道选择:每个ADC几个通道,分别对应不同的I/O口,也可以使用I/O映射功能
  1. 触发模式选择
  • 触发源:一般可以定时器中断触发,ADC中断触发,或者软件触发
  • 触发方式:一般有上升沿、下降沿、低电平等等之类触发
  1. 参考电压选择
      参考电压是什么?参考电压就是ADC测量的范围,一般用Vref-和Vref+两个参考元组成,而输入电压Vin的范围就是:Vref- ≤ Vin ≤ Vref+ 。
      那我们通常把参考电压的负极接地,即Vref- = 0V;然后将参考电压正极接内部或者外部的其他电源,如2V、3.3V或者5V电压

  2. 数据对齐与处理
      在了解数据处理之前,先了解一下ADC最重要的参数,就是ADC的精度。通常MCU的ADC精度是12位的,当然有些专用ADC可能有更高的精度。那为什么要了解精度呢?我们要知道通常MCU内部数据为8位或者8的倍数位,那此时12位数据用8位明显不够,用16位又多了。此时就需要配置数据对其方式,16位左对齐那么低4位数据无效;同理右对齐那么高4位的数据无效。
      我们配置好之后,直接去读取的数据只是ADC的数据,而不是实际电压值。那这电压值怎么换算呢?这里就需要综合ADC精度和参考电压了,实际电压值=采样值/(2^精度)*(Vref+ - Vref-)+ Vref-,这个公式应该不难理解,就是根据参考电压,然后按照比例得出电压值。而我们精度12位就是4096,Vref-接地为0V,所以最终电压计算如下所示:
    在这里插入图片描述

四、定时器

  定时器最基本的功能就是定时与计数了,这有什么用呢?我们都知道可以软件里写一个死循环用来延迟,但是这种延迟会占系统CPU资源,而且会被中断打断,导致延迟不准确。此时我们可以用定时器设置计数标志位,从而可以得到精准的延迟。首先我们看一下定时器分类,定时器基本有以下3种类型:

  • 基本定时器:基本定时器是最简单的定时器,只有计数和定时作用,可以设置中断
  • 通用定时器:在基本定时器的基础上,再加上捕获/比较功能,一般用来PWM输出
  • 高级定时器:它一般有4路捕获/比较通道,此外还有编码器接口与刹车中断,一般用来电机控制

  正常情况下,如ARM、STM8、RISC之类PWM是由通用定时器产生的。而8051定时器没有PWM功能,其他如STC8H用的51内核,它的PWM是额外的专用定时器。本小节就讲常规的基本定时器与通用定时器功能

4.1 基本定时器

  首先看一下基本定时器框图,为了简单,这边选了一个RISC的基本定时器:
在这里插入图片描述
  从上图很容易看出,先是时钟进来分频,然后计数器就开始进行计数,基本定时器一般只支持递增计数,当计数值CNT与影子寄存器值相等时,计数器就会清零并产生更新事件,然后自动重装寄存器ARR就把值写入影子寄存器。如果使能中断,触发更新事件就会产生中断,然后我们可以在中断里清除中断标志位。工作方式如下所示:
在这里插入图片描述
  大致的工作原理如上,根据流程我们需要配置的参数如下:

  1. 时钟配置
  • 选择相应的定时器,并使能定时器时钟
  • 选择时钟源(有些MCU是默认的,比如STM32)
  • 设置分频系数
  1. 计数设置
      对于基本定时器只需要设置自动重载寄存器ARR的值即可。此时定时器产生更新事件的时间,即定时时间=系统时钟/分频系数/(计数值+1)。因为计数器是从0开始计数

4.2 通用定时器

  这边同样用一个RISC的通用定时器举例,框图如下所示:
在这里插入图片描述
  可以看出与基本定时器明显的区别就是多了几路捕获/比较通道。此外通用计数器的位数更高,并且有些通用定时器可以递减计数。那这边有个问题,捕获和比较分别是什么呢?下面会重点介绍输出比较,简略介绍输入捕获功能

4.2.1 输入捕获

  输入捕获一般应用在两个方面,一个方面是脉冲跳变沿时间测量,另一方面是 PWM 输入测量。

  1. 测量脉宽或者频率
    在这里插入图片描述
      当测量频率时,可以记录两次上升沿的时间;如果是测量脉宽就记录三个值,其中v3-v1是周期,v2-v1是脉宽
  2. PWM 输入模式
      测量脉宽和频率还有一个更简便的方法就是使用 PWM 输入模式。与上面那种只使用一个捕获寄存器测量脉宽和频率的方法相比,PWM 输入模式需要占用两个捕获寄存器。以STM32寄存器举例:
    在这里插入图片描述
      下面我们以一个更加具体的时序图来分析下 PWM 输入模式:
    在这里插入图片描述
      PWM 信号由输入通道 TI1 进入,配置 TI1FP1 为触发信号,上升沿捕获。当上升沿的时候 IC1 和IC2 同时捕获,计数器 CNT 清零,到了下降沿的时候,IC2 捕获,此时计数器 CNT 的值被锁存到捕获寄存器 CCR2 中,到了下一个上升沿的时候,IC1 捕获,计数器 CNT 的值被锁存到捕获寄存器 CCR1 中。其中 CCR2 测量的是脉宽,CCR1 测量的是周期。

4.2.2 输出比较

  在STM32F4输出比较模式总共有 8 种,具体的由寄存器 CCMRx 的位 OCxM[2:0] 配置。我们这里只讲解最常用的 PWM 模式。
  脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。我们可以让定时器产生PWM,在计数器频率固定时,PWM 频率或者周期由自动重载寄存器(TIMx_ARR)的值决定,其占空比由捕获/比较寄存器(TIMx_CCRx)的值决定。PWM 产生原理示意图如下图所示:
在这里插入图片描述
  PWM 模式分为两种,PWM1 和 PWM2,总得来说是差不多:
在这里插入图片描述
  定时器产生 PWM 的方式有许多种,下面我们以边沿对齐模式(即递增计数模式/递减计数模式)为例,PWM 模式 1 或者 PWM 模式 2 产生 PWM 的示意图,如下图所示:
在这里插入图片描述
  有了上面的基础就可以开始配置PWM了,步骤如下:

  1. I/O配置
      由于PWM输出使用的是定时器的某个通道,这个通道对应某个I/O口,所以要先开启对应I/O的复用或者映射,并将其配置为输出模式
  2. 定时器配置
      定时器配置可以参考4.1小节的基本定时器的配置
  3. 使能PWM输出比较通道,并选择PWM模式
      这个PWM输出通道指的是定时器捕获/比较通道,比如上面通用定时器框图里的CH1。至于PWM模式上面有讲
  4. 使能比较输出并配置输出极性
      这里的比较输出使能是指主通道或者互补通道的使能,输出极性就是在对应的PWM模式下,当有效时输出电平为高电平还是低电平
  5. 配置比较值
      这里的比较值就是PWM脉宽,即上面捕获比较值寄存器CCR。通常CCR需要小于自动重载值ARR,ARR配置就相当于PWM的周期
  6. 按需求使能输出比较中断

五、UART

  介绍串口UART之前先介绍一下通训的基本概念

5.1 通讯的基本概念

5.1.1 串行通讯与并行通讯

  按数据通信方式分类,可分为串行通信和并行通信两种。串行和并行的对比如下图所示:
在这里插入图片描述
  串行通信的基本特征是数据逐位顺序依次传输,优点是传输线少、布线成本低、灵活度高等优点,一般用于近距离人机交互,特殊处理后也可以用于远距离,缺点就是传输速率低。
  而并行通信是数据各位可以通过多条线同时传输,优点是传输速率高,缺点就是布线成本高,抗干扰能力差,适用于短距离、高速率的通信。
在这里插入图片描述

5.1.2 全双工、半双工及单工通讯

  根据数据传输方向,通信又可分为全双工、半双工和单工通信。全双工、半双工和单工通信的比较如下图所示:
在这里插入图片描述
在这里插入图片描述

5.1.3 同步通讯与异步通讯

  根据数据同步方式,通信又可分为同步通信和异步通信。同步通信和异步通信比较如下图所示:
在这里插入图片描述
  同步通信要求通信双方共用同一时钟信号,在总线上保持统一的时序和周期完成信息传输。优点:可以实现高速率、大容量的数据传输,以及点对多点传输。缺点:要求发送时钟和接收时钟保持严格同步,收发双方时钟允许的误差较小,同时硬件复杂。
  异步通信不需要时钟信号,而是在数据信号中加入开始位和停止位等一些同步信号,以便使接收端能够正确地将每一个字符接收下来,某些通信中还需要双方约定传输速率。优点:没有时钟信号硬件简单,双方时钟可允许一定误差。缺点:通信速率较低,只适用点对点传输。

5.1.4 通信速率

  在数字通信系统中,通信速率(传输速率)指数据在信道中传输的速度,它分为两种:传信率和传码率。

  • 传信率:每秒钟传输的信息量,即每秒钟传输的二进制位数,单位为 bit/s(即比特每秒),因而又称为比特率。
  • 传码率:每秒钟传输的码元个数,单位为 Baud(即波特每秒),因而又称为波特率。

  比特率和波特率的关系可以用以下式子表示:比特率 = 波特率 * log2M
  其中 M 表示码元承载的信息量。我们也可以理解 M 为码元的进制数。

5.2 异步串口UART

  有些MCU是USART意为同步异步串口,而UART是异步全双工串口。串口通讯 (Serial Communication) 是一种设备间非常常用的串行通讯方式,串口按位(bit)发送和接收字节。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422 和 RS-485 等。

5.2.1 物理层

  根据通讯使用的电平标准不同,串口通讯可分为 TTL 标准及 RS-232 标准。通常情况下,MCU引脚发出的UART信号为TTL信号,使用 RS-232 标准的串口设备间常见的通讯结构:
在这里插入图片描述
  在上面的通讯方式中,两个通讯设备的“DB9 接口”之间通过串口信号线建立起连接,串口信号线中使用“RS-232 标准”传输数据信号。由于 RS-232 电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL 校准”的电平信号,才能实现通讯。
  两者电平信号区别如下图:
在这里插入图片描述
  RS-232 与 TTL 电平标准下表示同一个信号
在这里插入图片描述

5.2.2 协议层

  STM32中的串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据:
在这里插入图片描述
  异步通信时接收端一般会用采样定理判断信号逻辑
在这里插入图片描述

5.3 串口配置

  为了结构简单,这边选取了一个RISC的UART框图:
在这里插入图片描述
  UART通常会用到4根线

  • VCC:电压源,一般用来给模块供电,模块自己有电可以省略
  • GND:地线,必要的信号,用来同步电平
  • RX:串行数据输入。
  • TX:串行数据输出。当发送器使能,但不发送数据时,TX 引脚处于高电平。当发送器使能,且发送数据时,TX 引脚在起始位期间处于低电平,在停止位期间处于高电平。

  UART的配置步骤如下:

  1. 引脚配置:主要是将RX、TX配置成对应串口的输入输出引脚,并开启对应的复用或者映射
  2. 使能相应的UART串口时钟
  3. 配置波特率
      我们知道异步串口是没有同步信号CLK的,那接收端只能靠波特率来同步信号。波特率,即每秒钟传输的码元个数,在二进制系统中(串口的数据帧就是二进制的形式),波特率与波特率的数值相等,所以我们今后在把串口波特率理解为每秒钟传输的二进制位数。
      波特率的配置一般有两种方式根据不同的MCU。一种是配置寄存器,根据MCU波特率计算公式,对UART时钟进行分频得到对应波特率。还有一种是类似STM32直接调用库函数,通过输入波特率,然后库函数自己计算对应的波特率配置寄存器值
  4. 设置通信数据长度,常规的为8位
  5. 设置奇偶校验位,常规为无奇偶校验
  6. 设置停止位长度,一般为1位
  7. 使能发送和接受功能
  8. 根据需求使能中断,如果不使能中断,系统就会轮询串口接收缓冲区

六、IIC

  

七、SPI

  

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

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

相关文章

谷达冠楠:现在开网店到底靠谱吗

在互联网高速发展的当下,开网店已成为众多创业者的选择。然而,面对激烈的市场竞争和不断变化的网络环境,人们不禁要问:现在开网店到底靠谱吗? 我们必须认识到,任何商业行为都存在风险,开网店也不例外。但是…

Python + Selenium —— 网页元素定位之标签名和链接文本定位

tag name tag name 为标签名定位,使用网页元素的标签名如a, div, input, span 等。 但是有一个问题,常见的标签名比如 在同一个页面上有非常多。会不会觉得 tag name 没什么用呢? 当然普通的模拟操作是不大有用,这个重复性实在…

Spring如何使用自定义注解来实现自动管理事务?

人可以做他(她)想做的,但不能要他(她)想要的 一个目录 前言业务代码展示手动挡自动挡事务失效的问题代码地址 前言 在两年半以前,我写了一篇博客:框架的灵魂之注解基础篇: 在那篇博客的结尾,我埋了一个坑&#xff1a…

mac安装部署gitbook教程

mac安装部署gitbook教程 前言一、安装准备二、GitBook安装三、项目初始化 前言 一些自己实际操作的记录。 一、安装准备 Node.js gitbook基于Node.js,所以需要提前安装。 下载地址:https://nodejs.org/en/,可以下载比较新的版本。(但我的建议…

深入到 TLP:PCI Express 设备如何通信

前言 当我为PCI express编写Xillybus IP核时,我很快发现很难开始:在线资源和官方规格用关于螺母和螺栓的血腥细节轰炸你,但对机器应该做什么却很少说。因此,一旦我努力自己弄清楚这一点,我就决定写这个小指南&#xf…

源码篇--Redis 五种数据类型

文章目录 前言一、 字符串类型:1.1 字符串的编码格式:1.1.1 raw 编码格式:1.1.2 empstr编码格式:1.1.3 int 编码格式:1.1.4 字符串存储结构展示: 二、 list类型:2.1 List 底层数据支持:2.2 List 源码实现:2.3 List 结构…

【C++】反向迭代器模拟实现

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.利用适配器的思想…

【产品设计】B端导航菜单的三大模式

导航是每一个网站的灵魂所在,用户依赖导航进行不同页面的切换,找到自己所需的。那么该如何将庞大的B端系统中的导航菜单做好呢? 导航菜单是一个网站的灵魂,用户依赖导航在各个页面中进行跳转。 导航菜单一般分为顶部导航和侧边导…

成本更低、更可控,云原生可观测新计费模式正式上线

云布道师 在上云开始使用云产品过程中,企业一定遇见过两件“讨厌”事: 难以理解的复杂计费逻辑,时常冒出“这也能收费”的感叹; 某个配置参数调节之后,云产品使用成本不可预估的暴涨。 可观测作为企业 IT 运维必须品…

Python工具:pathlib

文件的路径实际上是一件很困扰的时间(各种平台有时候规则不一样,有时候还需要考虑字符转义的问题),因此我直接推荐使用模块 pathlib,当然,如果您不介意的话,可以使用 os.path 做较为低级的路径操…

SpringCloudAlibaba系列之Nacos实战

目录 注意事项 参考资源 Nacos配置中心 初始化项目 进行Nacos相关配置 运行 Nacos注册中心 dubbo方式 对外暴露接口dubbo-api 服务提供者dubbo-provider 服务消费者dubbo-consumer 负载均衡客户端方法 服务提供者 服务消费者 注意事项 不管是使用Nacos配置中心&…

程序员手把手教你参与开源!拿捏!

一、前言 有一些同学提问,希望在自己的简历上增加一些有含金量的项目经历,最好能够去参与一些开源项目的开发,但由于对一个庞大的开源项目缺乏认知,难以着手。同时也担心自己能力不足,不知道自己写的代码是否会被接纳。…

MATLAB环境下一种音频降噪优化方法—基于时频正则化重叠群收缩

语音增强是语音信号处理领域中的一个重大分支,这一分支已经得到国内外学者的广泛研究。当今时代,随着近六十年来的不断发展,己经产生了许多有效的语音增强算法。根据语音增强过程中是否利用语音和噪声的先验信息,语音增强算法一般…

文件备份管理软件系统

1、我解决的问题 避免因为硬盘故障,导致数据丢失; 避免因为中了病毒,文件被加密,无法取回; 避免了员工恶意删除文件; 规范企业内部的文件管理,使它井井有条; 防范于未然,不必再为可能的风险担忧; 2、我的优点 我支持定…

语义分割 | 基于 VGG16 预训练网络和 Segnet 架构实现迁移学习

Hi,大家好,我是源于花海。本文主要使用数据标注工具 Labelme 对猫(cat)和狗(dog)这两种训练样本进行标注,使用预训练模型 VGG16 作为卷积基,并在其之上添加了全连接层。基于标注样本…

什么是调频直放站,调频直放站的功能和作用是什么?

调频直放站,顾名思义是一种对调频广播信号进行放大处理的通信设备,将调频广播信号引入到地下空间或隧道内,实现调频广播信号覆盖,扩大调频广播信号的覆盖范围。 1、调频直放站的组成 调频直放站从结构上来讲,一般由远…

线性代数:矩阵的定义

目录 一、定义 二、方阵 三、对角阵 四、单位阵 五、数量阵 六、行(列)矩阵 七、同型矩阵 八、矩阵相等 九、零矩阵 十、方阵的行列式 一、定义 二、方阵 三、对角阵 四、单位阵 五、数量阵 六、行(列)矩阵 七、同型矩…

python数据和分析——pandas基础内容

Pandas 的两个主要的数据结构是 Series 和 DataFrame: Series 是一维标记数组,类似于带有标签的列表。它可以包含不同类型的数据,并且可以通过索引进行访问和操作。DataFrame 是二维表格型数据结构,类似于 SQL 表或 Excel 电子表…

jQuery遍历(树遍历)

1、.children&#xff08;&#xff09;: 获得匹配元素集合中每个元素的直接子元素&#xff0c;选择器选择性筛选。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"jQuery.js"&g…

go api(get post传参,数据库,redis) 测试

介绍&#xff1a;分别测试get请求&#xff0c;post请求&#xff0c;请求链接数据库&#xff0c;以及redis操作。 1.api代码 package mainimport (_ "database/sql""encoding/json""github.com/gin-gonic/gin""go-test/com.zs/database&quo…