iic、spi以及uart

news2025/1/31 2:57:00

何为总线?

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

总线的作用?

实现数据传输,即模块之间的通信

总线如何分类?

根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线

可分为数据按位顺序传输占用引脚较少但是速度相对较慢的串行通信 和  数据各个位同时传输,速度较快但是占用引脚资源多的并行传输

又根据收发数据根据对时钟信号的依赖关系区分为同步通信 和 异步通信

根据数据的传输方向性,又将通信可区分为 单工,半双工 和双 工,

其中UART是串行全双工异步通信、IIC是串行半双工同步通信、spi是串行全双工同步通信。


UART(Universal asynchronous receiver/transmitter\通用异步接收发送器)

串口用于两个模块之间进行异步全双工串行通信

将TXD和RXD交叉连接,然后将接地线接地(TXD数据发送线,RXD数据接收线)

TTL电平3.3\5逻辑1,接地逻辑0

特点:易被干扰源干扰,抗干扰能力弱,一般只适用于同一块板子上面的两个芯片之间尽心数据收发

关于串口的配置:

1.设置8bit数据位

2.设置无校验位

3.设置1bit停止位

4.设置波特率为115200

5.设置16倍过采样

6.使能发送器 TE

7.使能接收器 RE

8.使能串口 UE

9.发送数据:

判断发送数据寄存器是否为空 TXE==1

为空则向发送数据寄存器写入,不为空则等待

等待发送完成TC==1,此时发送结束

10.接收数据 :

判断接收数据寄存器不为空 RXNE==1

不为空可以读取

使用流程:

1.使能UART外设时钟和对应的GPIO口的时钟

2.功能复用,将对应的GPIO口复用为串口功能

3.禁用串口

4.设置数据帧格式(8N1)

5.设置分频、采样、波特率(注:采样常用的是16倍过采样)

6.使能发送器

7.使能接收器

8.使能串口(与第三步交相呼应)

UART相关的 HAL库函数

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

注:

两个函数均会阻塞

串口进行数据打印需要将printf函数重映射(重写fputc)


IIC(i2c)

最大支持多主机多从机通信

SDA&SCL,多从机并联入双线,双线空闲保持高电平,需要接上拉电阻

信号分类:起始信号、终止信号、应答信号、非应答信号、数据接收和发送信号

注:起始信号终止信号均由主机发起

IIC数据格式

具体格式都是由各个传感器各自的协议去制定格式,但是大致流程基本相同

起始信号 -7位从机地址为加写标志位-(应答/非应答)-8位从机寄存器地址-8位数据-(应答\非应答)- 结束信号

起始信号 -7位从机地址为加写标志位-(应答/非应答)-8位从机寄存器地址-起始信号-7位从机地址加读标志位-(应答/非应答)-数据-(应答\非应答)- 结束信号

通信速率为100k、400k、1M和3.4M

使用流程:

1.使能对应的端口时钟

2.设置管脚(输出模式,输出速度,上拉下拉电阻)

3.SDA&SCL双线拉高空闲

4.信号函数的封装(一般直接down,会封装就更nice了)

5.信号函数的调用

注:重难点在对对应传感器手册的查询

IIC相关的HAL库函数

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_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 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_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)


SPI(Serial Peripheral interface)串行外围设备接口

最大支持一主机多从机

是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

不再采用具体的数据格式,而是采用具体的通信规则

通过约定好的通信时钟极性和时钟相性去使数据线进行对应的数据的采集和数据的输出

使用流程

更加依赖被控制的芯片的手册,比如控制数码灯的各类三八译码器或者是控制OLED屏时相关OLED屏的数据手册

SPI相关的HAL库函数

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shell编程(for循环+并发问题+while循环+流程控制语句+函数传参+函数变量+函数返回值+反向破解MD5)

本篇文章继续给大家介绍Shell编程,包括for循环、并发问题,while循环,流程控制语句,函数传参、函数变量、函数返回值,反向破解MD5等内容。 1.for循环 for 变量 in [取值列表] 取值列表可以是数字 字符串 变量 序列…

深入 Rollup:从入门到精通(三)Rollup CLI命令行实战

准备阶段:初始化项目 初始化项目,这里使用的是pnpm,也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…

CycleGAN模型解读(附源码+论文)

CycleGAN 论文链接:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 官方链接:pytorch-CycleGAN-and-pix2pix 老规矩,先看看效果 总体流程 先简单过一遍流程,细节在代码里说。CycleGAN有…

线程配置经验

工作时,时常会遇到,线程相关的问题与解法,本人会持续对开发过程中遇到的关于线程相关的问题及解决记录更新记录在此篇博客中。 目录 一、线程基本知识 1. 线程和进程 二、问题与解法 1. 避免乘法级别数量线程并行 1)使用线程池…

全程Kali linux---CTFshow misc入门

图片篇(基础操作) 第一题: ctfshow{22f1fb91fc4169f1c9411ce632a0ed8d} 第二题 解压完成后看到PNG,可以知道这是一张图片,使用mv命令或者直接右键重命名,修改扩展名为“PNG”即可得到flag。 ctfshow{6f66202f21ad22a2a19520cdd…

深度学习笔记——循环神经网络之LSTM

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络LSTM知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型(Bag of Words, BOW)工作…

[MILP] Logical Constraints 0-1 (Note2)

1. 如果选择了项目1,则项目2,3也要求被选中 表示为: 2. 如果确定了选项目1,则接下来必须选项目2或者项目3 表示为: or 3. 如果同时选择了项目2和项目3,则不可以选择项目1 表示为: 4. 如果…

DFFormer实战:使用DFFormer实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

如何复现o1模型,打造医疗 o1?

如何复现o1模型,打造医疗 o1? o1 树搜索一、起点:预训练规模触顶与「推理阶段(Test-Time)扩展」的动机二、Test-Time 扩展的核心思路与常见手段1. Proposer & Verifier 统一视角方法1:纯 Inference Sca…

【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南

文章目录 🌍一. WEB 开发❄️1. 介绍 ❄️2. BS 与 CS 开发介绍 ❄️3. JavaWeb 服务软件 🌍二. Tomcat❄️1. Tomcat 下载和安装 ❄️2. Tomcat 启动 ❄️3. Tomcat 启动故障排除 ❄️4. Tomcat 服务中部署 WEB 应用 ❄️5. 浏览器访问 Web 服务过程详…

【NOI】C++程序结构入门之循环结构三-计数求和

文章目录 前言一、计数求和1.导入2.计数器3.累加器 二、例题讲解问题:1741 - 求出1~n中满足条件的数的个数和总和?问题:1002. 编程求解123...n问题:1004. 编程求1 * 2 * 3*...*n问题:1014. 编程求11/21/3...1/n问题&am…

新项目上传gitlab

Git global setup git config --global user.name “FUFANGYU” git config --global user.email “fyfucnic.cn” Create a new repository git clone gitgit.dev.arp.cn:casDs/sawrd.git cd sawrd touch README.md git add README.md git commit -m “add README” git push…

【异步编程基础】FutureTask基本原理与异步阻塞问题

文章目录 一、FutureTask 的桥梁作用二、Future 模式与异步回调三、 FutureTask获取异步结果的逻辑1. 获取异步执行结果的步骤2. 举例说明3. FutureTask的异步阻塞问题 Runnable 用于定义无返回值的任务,而 Callable 用于定义有返回值的任务。然而,Calla…

二叉树高频题目——下——不含树型dp

一,普通二叉树上寻找两个节点的最近的公共祖先 1,介绍 LCA(Lowest Common Ancestor,最近公共祖先)是二叉树中经常讨论的一个问题。给定二叉树中的两个节点,它的LCA是指这两个节点的最低(最深&…

vue事件总线(原理、优缺点)

目录 一、原理二、使用方法三、优缺点优点缺点 四、使用注意事项具体代码参考: 一、原理 在Vue中,事件总线(Event Bus)是一种可实现任意组件间通信的通信方式。 要实现这个功能必须满足两点要求: (1&#…

音频入门(一):音频基础知识与分类的基本流程

音频信号和图像信号在做分类时的基本流程类似,区别就在于预处理部分存在不同;本文简单介绍了下音频处理的方法,以及利用深度学习模型分类的基本流程。 目录 一、音频信号简介 1. 什么是音频信号 2. 音频信号长什么样 二、音频的深度学习分…

Redis --- 分布式锁的使用

我们在上篇博客高并发处理 --- 超卖问题一人一单解决方案讲述了两种锁解决业务的使用方法,但是这样不能让锁跨JVM也就是跨进程去使用,只能适用在单体项目中如下图: 为了解决这种场景,我们就需要用一个锁监视器对全部集群进行监视…

使用shell命令安装virtualbox的虚拟机并导出到vagrant的Box

0. 安装virtualbox and vagrant [rootolx79vagrant ~]# cat /etc/resolv.conf #search 114.114.114.114 nameserver 180.76.76.76-- install VirtualBox yum install oraclelinux-developer-release-* wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-g…

2025数学建模美赛|赛题翻译|E题

2025数学建模美赛,E题赛题翻译 更多美赛内容持续更新中...

SpringBoot统一数据返回格式 统一异常处理

统一数据返回格式 & 统一异常处理 1. 统一数据返回格式1.1 快速入门1.2 存在问题1.3 案列代码修改1.4 优点 2. 统一异常处理 1. 统一数据返回格式 强制登录案例中,我们共做了两部分⼯作 通过Session来判断⽤⼾是否登录对后端返回数据进⾏封装,告知前端处理的结果 回顾 后…