STM32 学习

基础知识

  • GND(Ground, 地线)共地:在一个电子系统或多个电子设备之间共享同一个参考电位,及所有设备的地线连接在一起,这个共同的参考点通常被称为"地"或者"接地"。
  • 单片机最小系统:
    • 电源电路:MCU 提供稳定的工作电压。

    • 复位电路:确保上电时 MCU 能可靠地从初始地址开始执行程序。

    • 时钟电路: MCU 提供精确的基准时钟信号。

    • 启动模式配置(BOOT):决定 MCU 上电后从哪块存储器启动。

    • 单片机芯片:负责执行程序和处理信号

引脚功能

GPIO (通用输入输出)

Genernal Purpose Input/Output, 是集成电路上的通用引脚,其行为(输入或者输出)可由用户运行时控制。

GPIO 常见于开发板边缘,以引脚形式呈现,属于嵌入式系统开发的核心组件,支持数字信号传输并与外部设备交互。每个GPIO引脚可配置为输入模式、输出模式、模拟模式和备用功能模式(如I2C、SPI、USART等)。

输入模式

输⼊模式 输⼊模式下,可以读取当前引脚是⾼电平/低电平(⾼电平1⼀般为单⽚机的⼯作电压,多为3.3V或 5V,低电平0指GND/0V),最常⽤在按键检测,如图:

但是会发现⼀个致命问题,按键按下时,引脚为0低电平,但是按键释放时,引脚到按键这段未连接到 任何电平,处于悬空!因此读取的值可能是0可也能是1!因此提出上拉电阻、下拉电阻,来解决悬空 的问题:

输出模式

  • 推挽输出:该输出⽅式相当于直接连接到电源或地,具备⼀定的驱动(为元件供 电)能⼒,最大限制为10mA 电流。
  • 开漏输出:只使⽤⼀个开关,但是增加⼀个上拉电阻;开漏输出只能拉低电平、⽆法主动输出⾼电平。上拉电阻非常大,导致无供电能力,因此可以实现线与功能。

线与逻辑::多设备输出引脚直接并接在同⼀总线,任⼀设备拉低总线即为低 电平,所有设备释放才由上拉电阻置⾼,⽆输出短路⻛险。

PWM输出:解决非0-1输出

通过快速切换0/1,⽤1所占⼀个周期的⽐例表⽰⼤⼩。脉冲宽度调制(PWM)是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中。如下所示:

注:因此可以理解PWM是:⽤ 数字信号(只有0/1)模拟出模拟信号(0~1,eg0.666),来传递⼀个数值信息。

  • 频率(1/周期):指⼀秒钟内信号从⾼电平到低电平再回到⾼电平的次数,即⼀个周期的次数。频率 越⾼,模拟信号越平稳。
  • 占空比:⼀个脉冲周期内,⾼电平时间与整个周期时间的⽐例。占空⽐越⼤,模拟电压越趋近于⾼电 平。

作用:可以控制LED亮度调整、电机转速控制(需要电机驱动板)、舵机⻆度控制。

TIM输出:

为什么会有TIM:

  • 如果要产生0.666 脉冲,需要让程序一直检查时间,达到规定时间输出高电平/低电平,但是这样会让CPU 一直去获取时间、比较时间、更改输出,这些动作也会耗时,导致影响PWM 精度。
  • 程序在反复检查时间的过程中,无法去执行其他主程序任务。

TIM 相当于在芯片内部设计了外设/硬件资源,通过电路设计之后,只要有系统的时钟信号,他就会自己根据配置运行一定的功能。主程序可以继续执行其他任务并可以读取外设状态。TIM定时器/计数器(Timer/Counter):实现达到最大值时产生进位或者溢出。

因此:简单来说,单片机定时器(Timer/Counter)是其内部一个非常重要的独立硬件单元,核心功能是进行精准的"计数",并根据计数值实现"定时"或对外部事件进行"计数"。

设定参数作用:

  • 预分频值PSC:对定时器输入时钟(TIMxCLK)进行分频,降低计数器的计数速度
  • 自动重装值(ARR):设定计数器的计数上限("水桶容量")。计数器 CNT 从 0 递增到 ARR 值时,产生更新事件(UEV),CNT 自动清零重新开始计数
  • 比较值(CCR):用于输出比较和 PWM 占空比控制。硬件实时比较 CNT 与 CCR 的值来决定输出电平状态

PWM 频率 = 主频 / (PSC + 1) \* (ARR +1)

PWM 占空比 = CCR / (ARR + 1) * 100%

过程:时钟频率 ---> 分频器 ---> 计数器(TIM) ---> IO 输出

总结:PSC 控制"数多快",ARR 控制"数多少",CCR 控制"在哪里翻转电平"。三者配合,就能精确控制定时中断周期和 PWM 输出波形。

ADC (数模转换器):

模拟数字转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小,故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小 1

中断(IRQ)

中断请求(IRQ)是计算机系统中硬件设备向处理器发送的电脉冲信号,用于请求暂停当前任务并处理紧急事件。其英文全称为Interrupt Request,每个设备通常拥有独立的IRQ编号,而PCI总线设备可共享该资源。中断处理需要定义中断处理函数。

运行过程:

触发来源:

  • 外部触发 :直接由某个引脚触发,适合⽤在按键检测、传感器触发;
    • 实现举例:其他程序运⾏时,如果按键按下则灯亮起。
  • 计数器TIM触发 :当计数器捕获引脚的信号达到该计数器设定的⾃动重装值ARR时,会清零并产⽣⼀ 次脉冲,该脉冲可触发中断;
    • 实现举例:其他程序运⾏时,电机每转动⼀圈(52个脉冲)则灯亮灭翻转⼀次。
  • 定时器TIM触发(特殊的计数器) :将主频信号(或将主频经过分频的信号),接⼊计数器,当计数 器达到设定的⾃动重装值ARR时,会清零并产⽣⼀次脉冲,该脉冲可触发中断;
    • 实现举例:其他程序运⾏时,每过500ms则灯亮灭翻转⼀次。
  • 硬件中断触发:UART、DMA、ADC、I2C、SPI

通信

I2C 通信

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。在总线上主和从、发和收的关系不是恒定的,而取决于此时的数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件。然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下,主机负责产生定时时钟和终止数据传送。

通信连接

通信线:SCL(Clock时钟)\SDA(Data数据),均为开漏输出。

SPI 通信

串行外设接口(Serial Peripheral Interface)是一种同步外设接口,它可以使单片机与各种外围设备以串行方式进行通信以交换信息。外围设备包括Flash RAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。

通信连接

四线连接方式:双向通信

MOSI (MasterOut,SlaveIn) =TX(Transmit),主机发向从机;

MISO (MasterIn, Slave Out) =RX(Receive),从机发向主机;

SCK/SCLK/CLK:时钟信号(Clock),由主机发⽣;

CS/CSn/CE:⽚选信号(ChipSelect//ChipEnable),由主机发⽣。通过IO口电平设置选择与那个从机通信

UART 通信

UART 的全称是 ‌通用异步收发器‌(Universal Asynchronous Receiver/Transmitter),是嵌入式设备间最常用的串行通信接口。它的核心作用就是把并行的数据转成串行的高低电平,通过两根线(TX 发送、RX 接收)在设备之间传数据,同时支持全双工通信,也就是收发能同时进行。‌

通信连接

WDG 通信

WDG看门狗(Watchdog Timer)是一种常见的硬件设备,可以用来监测系统的运行状态,并在系统出现故障或停止运行时采取相应措施,以确保系统的稳定性和可靠性。

DMA 通信

DMA, 全称Direct Memory Access, 即直接存储器访问。

DMA传输将数据从一个地址空间复制到另一个地址空间, 提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作, 传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输, 也没有中断处理方式那样保留现场和恢复现场过程, 通过硬件为RAM和IO设备开辟一条直接传输数据的通道, 使得CPU的效率大大提高。

相关推荐
是隼人2 小时前
buuctf-pwn jarvisoj_level5(64位ret2libc)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
春风解人意11 小时前
从零开始学习嵌入式P32----网络基础之TCP
c语言·网络·学习·tcp/ip
传奇开心果编程13 小时前
【Rust入门知识点学与练】第21课:Trait 进阶 Advanced Traits
开发语言·学习·rust
水巷石子13 小时前
备考系统架构设计师第一天
学习·架构·软考·设计·考试
是隼人14 小时前
buuctf-pwn inndy_echo(32位fmt)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
xian_wwq14 小时前
【学习笔记】深度认知系列-第16讲-提示词工程
人工智能·笔记·学习
洛阳纸贵15 小时前
MATLAB-matlab基础知识
学习·算法·matlab
Vcaker15 小时前
Linux学习25-harbor私有仓库部署
linux·运维·学习
留白_15 小时前
【tableau入门学习】5、筛选器、参考线和集
学习·tableau