单片机总结【GPIO/TIM/IIC/SPI/UART】

一、GPIO

1、概念

通用输入输出口;开发者可以根据自己的需求将其配置为输入或输出模式,以实现与外部设备进行数据交互、控制外部设备等功能。简单来说,GPIO 就像是计算机或微控制器与外部世界沟通的 “桥梁”。

2、工作模式

工作模式性质特征
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入数字输入可读取引脚电平,内部链接下拉电阻,悬空时默认低电平
模拟输入模拟输入GPIO无效,引脚直接接入内部ADC
浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不稳定
推挽输出数字输出可输出引脚电平,高电平为VDD,低电平接VSS
开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS
复用推挽输出数字输出由片上外设控制,高电平为VDD,低电平接VSS
复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS

3、外设寄存器

外设寄存器功能模式选择
GPIOx_MODER(GPIO端口模式寄存器)用于配置 GPIO 引脚的工作模式,每个 GPIO 引脚对应 2 位,通过设置这 2 位的值,可以将引脚配置为不同的模式。

00:输入模式;01:通用输出模式;10:复用功能模式;11:模拟模式。

GPIOx_OTYPER(GPIO端口输出类寄存器)当 GPIO 引脚配置为输出模式(通用输出或复用功能输出)时,该寄存器用于选择输出类型,即推挽输出或开漏输出。每个 GPIO 引脚对应 1 位。0:推挽输出;1:开漏输出。
GPIOx_OSPEEDR(GPIO端口输出速度寄存器)用于配置 GPIO 引脚的输出速度,每个 GPIO 引脚对应 2 位。输出速度影响引脚的信号上升和下降时间,不同的速度适用于不同的应用场景。00:低速;01:中速;10:高速;11:超高速。
GPIOx_PUPDR(GPIO端口上拉/下拉)用于配置 GPIO 引脚的上拉或下拉电阻,每个 GPIO 引脚对应 2 位。上拉或下拉电阻可以确保引脚在没有外部信号输入时保持稳定的电平状态。00:无上下拉;01:上拉;10:下拉;11:保留。
GPIOx_IDR(GPIO端口输入数据寄存器)用于读取 GPIO 引脚的输入电平状态。该寄存器是只读的,每个引脚对应 1 位,读取相应的位可以获取该引脚当前的电平(高电平或低电平)。
GPIOx_ODR(GPIO端口输出数据寄存器)用于设置 GPIO 引脚的输出电平状态。当 GPIO 引脚配置为输出模式时,向该寄存器的相应位写入 0 或 1 可以将引脚设置为低电平或高电平。
GPIOx_BSRR(GPIO端口置位/复位寄存器)用于原子性地设置或清除 GPIO 引脚的输出电平。该寄存器分为两部分,低 16 位用于置位(将引脚设置为高电平),高 16 位用于复位(将引脚设置为低电平)。
GPIOx_BRR(GPIO端口复位寄存器)专门用于将 GPIO 引脚的输出电平复位(设置为低电平)。该寄存器的每一位对应一个 GPIO 引脚,向相应的位写入 1 可以将对应的引脚设置为低电平。

二、TIM

1、概念

定时器是一种能够对时间进行奇数的硬件设备。它可以按照预设的规则对时钟信号进行计数,当计数值达到设定的阈值时,会触发相应的事件,如产生中断、输出特定的信号等。通过对定时器的配置和使用,开发者可以实现精确的时间控制,满足各种不同的应用需求。

2、工作原理

定时器的核心是一个计数器,它会在时钟信号的驱动下进行计数操作。时钟信号可以来自于内部时钟源(如系统时钟),也可以来自外部时钟源。计数器从初始值开始,每接收到一个时钟脉冲,计数值就会加1(或减1,具体取决于定时器的工作模式)。当计数值达到预设的自动重载函数值时,计数器会产生溢出事件,根据定时器的配置,可能会触发中断、更新输出信号等。 

 计数模式:①递增计数模式;②递减计数模式;③中心对齐模式。

 内部工作框图:

3、PWM脉冲宽度调剂

1、概念:

PWM是一种对模拟信号电平进行数字编码的方法。通过定时器产生一系列脉冲信号,这些脉冲信号的频率通常保持不变,但是脉冲的宽度(即高电平持续的时间)可以根据需要进行调整。通过改变脉冲的宽度,可以等效地控制输出信号的平均电平,从而实现对一些设备的模拟控制。

2、工作原理:

定时器是产生PWM信号的核心部件。定时器内部有一个计数器,它会在时钟信号的驱动下不断计数。同时,还有一个比较寄存器,用于存储一个比较值。当计数器的值小于比较值时,定时器输出高电平;当计数器的值大于比较值时,定时器输出低电平。计数器计数到自动重装载值后会重新归零,开始下一个计数周期。通过改变比较寄存器的值,就可以更改脉冲的宽度。

3、关键参数:

周期:

pwm信号完成一个完整的脉冲循环所需的时间,它决定了pwm信号的频率。周期的倒数就是频率。在定时器中,周期通常由自动重装载值和时钟频率共同决定。

占空比:

指的是脉冲信号中高电平持续时间与整个周期的比值,通常用百分比表示。通过改变占空比,可以控制pwm信号的平均电平。

4、外设寄存器 

外设寄存器功能具体功能位及其作用
TIMx_CR1(定时器控制寄存器1)

该寄存器用于对定时器的基本工作模式和运行状态进行配置和控制。

计数器使能位:当该位置为 1 时,定时器计数器开始计数;置为 0 时,计数器停止计数。计数器方向位:用于设置计数器的计数方向,0 表示向上计数(从 0 开始递增到自动重装载值),1 表示向下计数(从自动重装载值开始递减到 0)。自动重装载预装载使能位:若该位置 1,自动重装载寄存器(TIMx_ARR)的值会在更新事件发生时才被传送到影子寄存器;置 0 时,TIMx_ARR 的值会立即生效单位脉冲模式位:置 1 时,定时器在发生一次更新事件后停止计数,常用于只需要单次定时操作的场景。
TIMx_CCMR1(定时器捕获/比较模式寄存器)主要用于配置定时器的捕获 / 比较通道 1 和通道 2 的工作模式,包括输入捕获模式和输出比较模式。模式选择位:用于选择通道 1 或通道 2 的输出比较模式,例如 PWM 模式 1、PWM 模式 2 等。不同的模式决定了计数器值与比较值的比较方式以及输出引脚的电平变化规则。输入捕获预分频器位:在输入捕获模式下,用于设置输入信号的预分频系数,以减少捕获不必要的信号边沿,提高捕获精度。输出比较预装载使能位:置 1 时,比较寄存器的值会在更新事件发生时才被传送到影子寄存器;置 0 时,比较寄存器的值会立即生效。
TIMx_CCER(定时器捕获/比较使能寄存器)该寄存器用于控制定时器捕获 / 比较通道的使能和极性。捕获/比较使能位:用于使能相应的捕获 / 比较通道。例如,CC1E 置 1 时,通道 1 的捕获或比较功能被使能;置 0 时,功能被禁用。捕获/比较极性位:用于设置捕获 / 比较通道的输入或输出极性。例如,在输入捕获模式下,该位决定是捕获上升沿还是下降沿;在输出比较模式下,决定输出信号的初始电平。
TIMx_PSC(定时器预分频器寄存器)用于设置定时器时钟的预分频系数,从而调整定时器计数器的计数频率。定时器的时钟源通常具有较高的频率,通过设置预分频器,可以将时钟频率降低到合适的范围,以满足不同的定时需求。例如,若预分频系数设置为 10,则计数器每接收到 10 个时钟脉冲才会加 1。
TIMx_ARR(定时器自动重装载寄存器)存储定时器计数器的自动重装载值。当计数器的值达到该寄存器存储的值时,会产生更新事件,计数器可能会重新归零(取决于计数方向和配置)。自动重装载值与预分频系数共同决定了定时器的定时周期。通过改变自动重装载值,可以调整定时器的定时时间。
TIMx_CCR1(定时器捕获/比较寄存器1)在输入捕获模式下,该寄存器用于存储捕获到的计数器值;在输出比较模式下,用于存储与计数器值进行比较的值。输入捕获模式:当定时器检测到指定的输入信号边沿(上升沿或下降沿)时,会将当前计数器的值捕获到 TIMx_CCR1 中,通过分析这些捕获值,可以测量输入信号的周期、脉宽等参数。输出比较模式:计数器的值会不断与 TIMx_CCR1 中的值进行比较,当两者相等时,会根据配置产生相应的输出动作,如改变输出引脚的电平状态,常用于产生 PWM 信号等。

5、看门狗定时器

1、概念(工作原理):

它会在系统正常运行时按照一定的时间间隔进行计数。在系统运行过程中,程序需要定期对看门狗定时器进行 “喂狗” 操作,即重置定时器的计数值。如果由于某种原因(如程序跑飞、硬件故障等)导致系统未能及时 “喂狗”,看门狗定时器就会溢出,进而触发一个复位信号,使系统重新启动,以恢复到正常的工作状态。

2、设置看门狗的步骤:

①确定看门狗的时钟频率

②对时钟频率进行分频

③给看门狗一个看门阈值

④主程序中正常喂狗

三、IIC

1、概述

iic是一种同步串行通信协议,有Philips(现为NXP)开发,广泛用于低速、短距离的多设备通信。iic允许多个设备(包括多个主设备和从设备)共享2根线路:数据线(SDA)和时钟线(SCL)。

2、工作原理 

由主设备控制时钟线(SCL),通过数据线(SDA)与多个从设备通信。每个设备由唯一的地址,主设备通过设备地址选择要通信的设备。

3、应用场景

传感器、EEPROM、RTC(实时时钟)、显示屏等。

4、iic的信号

起始信号(SCL为高电平期间,SDA由高电平向低电平变化)。

终止信号(SCL为高电平期间,SDA由低电平向高电平变化)。

应答信号(接收方接收到数据后,还可以进行下一次8bit数据的接收)。

非应答信号(接收方接收到数据后,不可以进行下一次8bit数据的接收)

数据接收和发送信号。

5、主机和从机通信过程分析

①主机给从机发送数据

②主机从从机读取数据

四、SPI

1、概述

spi是一种同步串行通信协议,用于主从设备之间的高速数据传输。spi是全双工通信,意味着数据可以同时在两个方向上传输。它使用四根信号线:时钟线(SCK)、主设备输入从设备输出线(MISO)、主设备输出从设备输入线(MOSI)和片选线(SS)来进行通信。

 

2、工作原理 

主设备提供时钟信号(SCK),通过数据线(MISO和MOSI)与从设备进行双向数据传输。每个从设备需要一个单独的片选信号(SS)来进行通信。

3、应用场景

存储设备(如Flash、SD卡)、显示屏、传感器、音频解码器等。

4、硬件连接方式

①基本的连接方式(四线)

当一个SPI主机和多个从机进行通信时,会通过片选线 选择和哪一个从机进行通信。

② 三线连接

当单主机单从机进行SPI通信时不需要片选线选择和哪一个从机进行通信,所以在进行连接时只需SCK\MOSI\MISO三根线就可以完成通信。

5、时序分析

spi主从机通信需要通过两个时钟特性进行约定:

1、时钟极性(CPOL):空闲状态下时钟线电平的高低

        时钟极性为1:空闲状态下时钟线保持高电平;

        时钟极性为0:空闲状态下时钟线保持低电平。

2、时钟相位(CPHA):通信进行数据采样(数据读取)在时钟前沿还是时钟后沿

        时钟相位1:在时钟后沿进行数据采样,在时钟前沿进行数据输出;

        时钟相位1:在时钟前沿进行数据采样,在时钟后沿进行数据输出。

五、UART

1、概述

uart一种异步串行通信协议,用于在两个设备之间传输数据。它将数据按位发送,不需要时钟信号进行同步。在uart通信中,数据通过两根线路传输:发送线(TX)和接收线(RX)。它主要用于简单的点对点通信。

2、工作原理 

数据被拆分成多个数据位,并通过串行方式(一个接一个地)发送,接收方根据预定的波特率解析数据。

3、应用场景

常见于调试接口、串口通信、GPS模块、蓝牙、WIFI模块等。

4、数据帧格式

异步通信,双方各自使用自己的时钟信号进行数据传输,由于双方的始终不一样,就算提前约定好了波特率,随着传输数据量的增加,双方数据收发就会累计一定的误差,所以为了避免这个误差,我们需要对传输收发的数据进行约定,规范好收发的格式来消除误差。

 

空闲位:当不进行数据收发时,数据线处于高电平状态

起始位:1bit低电平,一帧数据传输的开始

数据位:5-8bit数据位,传输的数据

校验位:1bit,可有可无

        奇校验:一帧数据传输后保证数据位和校验位1的个数是一个奇数;

        偶校验:一帧数据传输后保证数据位和校验位1的个数是一个偶数。

停止位:1-2bit高电平,一帧数据结束的标志

六、三种总线对比

1、总线

总线:连接多个部件的信息传输线,是各部件共享的传输介质

2、总线类型 

片内总线:连接处理器内核和外设的总线,在芯片内部。

片外总线:连接芯片和其他芯片或者模块的总线。

 

3、模块之间进行总线通信的方式

①串行通信和并行同行

串行通信:

指的是同一时刻只能收或发一个bit位信息,因此只用一根信号线即可。

优点:占用的引脚资源少。

缺点:速度相对较慢。

并行通信

指的是同一时刻可以收或发多个bit位信息,因此需要多跟信号线才行。

优点:速度快。

缺点:占用引脚资源多。

②单工、半双工、全双工通信

单工:

要么收,要么发,只能做接收设备或发送设备。

半双工:

可以收,可以发,但不能同时收发,通信双方只有同一个信道。

全双工:

可以在同一时刻接收和发送。

③同步通信与异步通信

1、同步通信:

同步通信是一种在数据传输过程中,发送方和接收方使用同一个时钟源或通过特定的同步机制来保证双方时钟严格同步的通信方式。在这种方式下,发送方和接收方的时钟信号频率和相位保持一致,从而使数据能够在准确的时间被发送和接收。

优点:

传输效率高,数据传输速率快。

缺点:

硬件成本高,对时钟精度要求高。

2、异步通信:

异步通信是一种发送方和接收方不需要使用同一个时钟源,而是通过在数据中添加起始位、停止位等控制信息来实现数据传输同步的通信方式。

优点:

硬件简单,灵活性高。

缺点:

传输效率低,数据传输效率慢。

4、总结对比

 

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

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

相关文章

Vxe UI 根据vxe-tabs 绑定不同的值,渲染生成不同的 tabls(页签)内容

VxeUI tabs控件&#xff0c;根据绑定不同的内容&#xff0c;动态渲染不同的表格数据放置在不同的 tab 页 效果图如下&#xff1a; 代码实现 <template><vxe-tabs :options"detailTabList"><vxe-tab-pane v-for"(item, index) in detailTabList&…

洛谷 P8705:[蓝桥杯 2020 省 B1] 填空题之“试题 E :矩阵” ← 卡特兰数

【题目来源】 https://www.luogu.com.cn/problem/P8705 【题目描述】 把 1∼2020 放在 21010 的矩阵里。要求同一行中右边的比左边大&#xff0c;同一列中下边的比上边的大。一共有多少种方案? 答案很大&#xff0c;你只需要给出方案数除以 2020 的余数即可。 【答案提交】 …

今日运维之-Mac笔记本python环境问题

1. 问题&#xff1a;MAC升级系统后git报错&#xff1f; Error: Cant create update lock in /usr/local/var/homebrew/locks! Fix permissions by running:sudo chown -R $(whoami) /usr/local/var/homebrew Traceback (most recent call last):11: from /usr/local/Homebrew/…

鸿蒙Next如何自定义标签页

前言 项目需求是展示标签&#xff0c;标签的个数不定&#xff0c;一行展示不行就自行换行。但是&#xff0c;使用鸿蒙原生的 Grid 后发现特别的难看。然后就想着自定义控件。找了官方文档&#xff0c;发现2个重要的实现方法&#xff0c;但是&#xff0c;官方的demo中讲的很少&…

Python - Python连接数据库

Python的标准数据库接口为&#xff1a;Python DB-API&#xff0c;Python DB-API为开发人员提供了数据库应用编程接口。 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个实现库&#xff0c;Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范&…

(python)Arrow库使时间处理变得更简单

前言 Arrow库并不是简单的二次开发,而是在datetime的基础上进行了扩展和增强。它通过提供更简洁的API、强大的时区支持、丰富的格式化和解析功能以及人性化的显示,填补了datetime在某些功能上的空白。如果你需要更高效、更人性化的日期时间处理方式,Arrow库是一个不错的选择…

MySQL的锁机制和锁算法

锁机制和InnoDB锁算法 MyISAM和InnoDB存储引擎使用的锁&#xff1a; MyISAM采用表级锁(table-level locking)。 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁 表级锁和行级锁对比&#xff1a; 表级锁&#xff1a; MySQL中锁定 粒度最大 的一种锁&#xff0c;…

PyTorch 源码学习:GPU 内存管理之深入分析 CUDACachingAllocator

因引入 expandable_segments 机制&#xff0c;PyTorch 2.1.0 版本发生了较大变化。本文关注的是 PyTorch 原生的 GPU 内存管理机制&#xff0c;故研究的 PyTorch 版本为 2.0.0。代码地址&#xff1a; c10/cuda/CUDACachingAllocator.hc10/cuda/CUDACachingAllocator.cpp 更多内…

Rk3568驱动开发_驱动编写和挂载_2

1.字符驱动介绍&#xff1a; 字符驱动&#xff1a;按照字节流镜像读写操作的设备&#xff0c;读写数据分先后顺序&#xff0c;例如&#xff1a;点灯、按键、IIC、SPI、等等都是字符设备&#xff0c;这些设备的驱动叫字符驱动设备 Linux应用层如何调用驱动&#xff1a; 字符设…

记录一下在k3s快速创建gitlab

废话不多说&#xff0c;直接上配置文件 需要修改的地方&#xff08;备注都有写&#xff09;&#xff1a; 1.命名空间 namespace 2. claimName 文件挂载 Deployment kind: Deployment apiVersion: apps/v1 metadata:name: gitlabnamespace: cicd # 替换为您的命名空间la…

leetcode 1656. 设计有序流 简单

有 n 个 (id, value) 对&#xff0c;其中 id 是 1 到 n 之间的一个整数&#xff0c;value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流&#xff0c;以 任意 顺序获取 n 个 (id, value) 对&#xff0c;并在多次调用时 按 id 递增的顺序 返回一些值。 实现…

应对现代生活的健康养生指南

在科技飞速发展的现代社会&#xff0c;人们的生活方式发生了巨大改变&#xff0c;随之而来的是一系列健康问题。快节奏的生活、高强度的工作以及电子产品的过度使用&#xff0c;让我们的身体承受着前所未有的压力。因此&#xff0c;掌握正确的健康养生方法迫在眉睫。 针对久坐不…

大连本地知识库的搭建--数据收集与预处理_01

1.马蜂窝爬虫 编程语言&#xff1a;Python爬虫框架&#xff1a;Selenium&#xff08;用于浏览器自动化&#xff09;解析库&#xff1a;BeautifulSoup&#xff08;用于解析HTML&#xff09; 2.爬虫策略 目标网站&#xff1a;马蜂窝&#xff08;https://www.mafengwo.cn/&…

SQL笔记#复杂查询

一、视图 1、视图和表 使用试图时会执行SELECT语句并创建一张临时表。视图中保存的是SELECT语句;表中保存的是实际数据。 2、创建视图的方法 CREATE VIEW 视图名称(<视图列名1>,<视图列名2>,……) AS <SELECT语句> CREATE VIEW ProductSum (prod…

文件系统

目录 1.认识磁盘 磁盘的物理结构 CHS定位法 磁盘的逻辑结构 2.认识文件系统 inode 分区和分组 磁盘上的文件系统 3.软硬链接 软链接 软链接的操作 创建软链接 查看软链接 删除软链接 软链接的特点 软链接的使用场景 硬链接 硬链接的操作 创建硬链接 查看硬…

学习路之PHP --TP6异步执行功能 (无需安装任何框架)

学习路之PHP --异步执行功能 &#xff08;无需安装任何框架&#xff09; 简介一、工具类二、调用三、异步任务的操作四、效果&#xff1a; 简介 执行异步任务是一种很常见的需求&#xff0c;如批量发邮箱&#xff0c;短信等等执行耗时任务时&#xff0c;需要程序异步执行&…

一键部署DeepSeek

腾讯Cloud Studio提供DeepSeek一键部署功能&#xff0c;0行代码&#xff0c;秒级部署使用&#xff01; 重点是每月免费提供10000分钟&#xff01; 不用等待模型下载&#xff0c;创建即可使用。 内置 Ollama、DeepSeek-R1 1.5B、7B、8B、14B 及 32B 模型。 热门模板 AI模板 前…

(学习总结26)Linux工具:make/Makefile 自动化构建、Git 版本控制器 和 gdb/cgdb 调试器

Linux工具&#xff1a;make/Makefile 自动化构建、Git 版本控制器 和 gdb/cgdb 调试器 make/Makefile 自动化构建在 Linux 命令行中的命令 makeMakefile 的基本操作1. 编写与删文件基本操作2. 总是执行操作3. 执行操作时的依赖性4. 定义变量或命令操作与其它简单操作5. 多文件操…

Linux提权之docker提权(十三) 链接第八篇完整版

书接上回 实验环境一样的 第八篇 我们用ssh密钥登陆后 发现我们web1的权限 当我们拿到web1的权限时 我们无法提权(这里我用的继续十二的环境 大家也可以继续) 所以我们首先要提权(当然必须是一个完整的 tty shell 不会的 我们去看第二篇 当然我下边也给你表注明了) python3…