当前位置: 首页 > news >正文

第九部分 :1.STM32之通信接口《精讲》(USART,I2C,SPI,CAN,USB)

本芯片使用的是STM32F103C8T6型号

STM32F103C8T6是STM32F1系列中的一种较常用的低成本ARM Cortex-M3内核MCU,具有丰富的通信接口,包括USART、SPI、I2C等。下面是该芯片上通信接口的管脚分布、每个接口的工作模式、常用应用场景和注意事项。

1. USART (通用同步/异步收发器)

管脚分布
  • USART1:TX (PA9), RX (PA10)
  • USART2:TX (PA2), RX (PA3)
工作模式
  • 异步模式:标准UART,用于点对点通信,常用于串口调试、与传感器通信。
  • 同步模式:较少使用,支持同步数据传输。
  • 多处理器模式:可用于连接多个设备的主从通信。
时钟与电平
  • 时钟:PCLK2 (USART1) 或 PCLK1 (USART2)
  • 电平:3.3V TTL电平
应用场景和注意事项
  • 应用场景:常用于串口调试、蓝牙模块通信(如HC-05)、GPS模块通信(如Ublox)、WIFI模块(如ESP8266)。
  • 注意事项:确保波特率一致。接收和发送的数据量大时,建议使用DMA减少CPU占用;同时,需要注意线缆长度和接收缓冲区溢出问题。
应用示例
  • 串口调试:将开发板的USART1连接到PC的串口(通过USB转串口模块)进行调试。
  • 蓝牙通信:通过USART2连接蓝牙模块进行无线数据传输。

2. SPI (串行外设接口)

管脚分布
  • SPI1:SCK (PA5), MISO (PA6), MOSI (PA7), NSS (PA4)
工作模式
  • 主模式:MCU作为主设备控制从设备的数据传输,支持点对多的通信。
  • 从模式:MCU作为从设备接收主设备的指令,常用于与MCU、DSP等其他主机通信。
时钟与电平
  • 时钟:PCLK2 (SPI1)
  • 电平:3.3V TTL电平
应用场景和注意事项
  • 应用场景:常用于连接Flash存储器、传感器(如MPU6050加速度计)、显示屏(如OLED)等。
  • 注意事项:SPI总线支持点对多通信,但需要用片选(NSS)信号选择从设备,注意信号线的干扰,尤其在高频率下。此外,SPI通信没有确认机制,需处理好数据错误或丢失问题。
应用示例
  • 外部Flash:通过SPI连接W25Qxx等Flash存储器进行数据读写。
  • 显示屏驱动:驱动OLED或TFT屏幕来显示内容。

3. I2C (集成电路间接口)

管脚分布
  • I2C1:SCL (PB6), SDA (PB7)
工作模式
  • 主模式:MCU作为主设备发起数据传输,支持点对多通信。
  • 从模式:MCU作为从设备响应主设备的请求,常用于从属设备设计。
时钟与电平
  • 时钟:PCLK1
  • 电平:3.3V TTL电平,需要上拉电阻
应用场景和注意事项
  • 应用场景:广泛用于传感器(如BMP280气压传感器、DS3231 RTC芯片)、LCD显示屏(如1602 LCD)等设备。
  • 注意事项:I2C是半双工通信,支持多个设备共用总线,因此需要设置唯一地址。电平转换器可以用于跨电压I2C通信。需要注意上拉电阻的选择,一般3.3k-10kΩ。
应用示例
  • RTC时钟模块:通过I2C读取DS3231等时钟芯片的数据。
  • 环境传感器:连接BMP280、DHT12等传感器采集环境数据。

4. CAN (控制器局域网)

STM32F103C8T6并没有内置CAN控制器,因此通常不支持CAN总线通信。如果需要使用CAN通信,可以选择带有CAN模块的STM32F103系列,如STM32F103CBT6(其硬件和引脚分布稍有不同)。

5. USB

管脚分布
  • USB:DM (PA11), DP (PA12)
工作模式
  • 设备模式:支持USB Device模式,可以作为USB从设备连接到计算机。
时钟与电平
  • 时钟:USB时钟
  • 电平:3.3V差分信号
应用场景和注意事项
  • 应用场景:常用于USB通信,包括USB串口、USB HID(如键盘鼠标)、USB音频、USB存储器等。
  • 注意事项:USB需要正确配置端点和描述符,且电路设计上注意信号的抗干扰处理。外部时钟需要满足48MHz的时钟精度要求。
应用示例
  • USB串口:使用USB CDC类将STM32板识别为USB串口,便于调试和通信。
  • USB键盘:将STM32板模拟为USB HID设备,实现键盘或鼠标的控制。

总结

STM32F103C8T6具有丰富的通信接口,能够满足不同的应用需求:

  • USART:适合点对点通信,适用于调试和低速无线模块通信。
  • SPI:适合高速点对多通信,广泛应用于传感器、存储、显示等场景。
  • I2C:适合中低速点对多通信,常用于传感器和LCD等模块。
  • USB:支持将MCU作为USB从设备连接到PC,便于通信和调试。

在设计中需要根据具体应用场景选择合适的接口,并关注各接口的电平、速率、抗干扰等设计要求。

USART和UART区别?

USART(Universal Synchronous/Asynchronous Receiver Transmitter)和UART(Universal Asynchronous Receiver Transmitter)都是串行通信接口,用于设备间的串行数据传输。它们的区别主要在于通信模式的支持:

1. 通信模式

  • USART:支持同步异步两种通信模式。
    • 异步模式下,USART和UART几乎一样,不需要时钟线,仅通过数据线传输数据,使用波特率来同步传输速率。
    • 同步模式下,USART会使用一个时钟信号(通常是主设备提供的)同步数据的发送和接收,这种模式下需要三条线路(TX、RX、时钟线)。同步模式通常用于需要更高传输速率的场景。
  • UART:仅支持异步通信模式。它不支持同步时钟信号,即无同步时钟线,主要通过设定一致的波特率来确保通信双方的同步。

2. 传输速率

  • USART同步模式可以更高效地传输数据,传输速率可达到主机时钟频率的一半甚至更高(比如在SPI模式下可以达到几兆比特每秒的传输速率)。
  • UART由于只能异步工作,速率通常受到波特率限制,通常在9600到115200之间,更高的波特率会增加数据丢失的风险。

3. 硬件支持

  • USARTUART接口在硬件上非常相似,许多微控制器中的USART模块都可以通过配置成异步模式,以兼容UART设备。
  • 在很多微控制器中,比如STM32,USART模块可以灵活配置为UART兼容模式,但UART接口无法配置为支持同步模式的USART。

4. 应用场景

  • USART适合用于需要同步通信的场景,例如与SPI设备通信,数据通信速率要求较高时的场合。
  • UART更常用于标准的异步串口通信,如与PC通信、蓝牙模块通信、GPS模块通信等,不依赖时钟信号,连接简单,应用广泛。

总结

  • USART支持同步和异步两种通信模式的接口,兼具更灵活的应用场景。
  • UART 只支持异步通信,应用上更为简单广泛。

对于大多数应用场景,如果只是进行普通串口通信(如调试),USART和UART在异步模式下没有本质差别,因此可以通用。而在同步数据传输需求较高的场景下(如与SPI设备进行高速数据传输),USART的同步模式优势会更明显。

 

STM32F103C8T6(48引脚封装)具有以下通信接口和方式:

通信接口数量

  1. USART/UART:3个接口

    • USART1:TX (PA9), RX (PA10)
    • USART2:TX (PA2), RX (PA3)
    • USART3:TX (PB10), RX (PB11)
  2. SPI:2个接口

    • SPI1:SCK (PA5), MISO (PA6), MOSI (PA7), NSS (PA4)
    • SPI2:SCK (PB13), MISO (PB14), MOSI (PB15), NSS (PB12)
  3. I2C:2个接口

    • I2C1:SCL (PB6), SDA (PB7)
    • I2C2:SCL (PB10), SDA (PB11)
  4. USB:1个接口

    • USB:DM (PA11), DP (PA12)

STM32F103C8T6的CAN接口信息

  1. CAN1接口管脚:
    • RX:PA11
    • TX:PA12

因此,STM32F103C8T6(48引脚)具备以下通信接口:

  1. USART/UART:3个
  2. SPI:2个
  3. I2C:2个
  4. USB:1个
  5. CAN:1个

总结

  • 通信接口总数量:9个
  • 支持的通信方式数量:5种(USART/UART、SPI、I2C、USB、CAN)

实验编程和实例 请看下一节!!!!!!!!!!!!!!!!!!!!!!

相关文章:

第九部分 :1.STM32之通信接口《精讲》(USART,I2C,SPI,CAN,USB)

本芯片使用的是STM32F103C8T6型号 STM32F103C8T6是STM32F1系列中的一种较常用的低成本ARM Cortex-M3内核MCU,具有丰富的通信接口,包括USART、SPI、I2C等。下面是该芯片上通信接口的管脚分布、每个接口的工作模式、常用应用场景和注意事项。 1. USART (通…...

5. langgraph中的react agent使用 (从零构建一个react agent)

1. 定义 Agent 状态 首先,我们需要定义 Agent 的状态,这包括 Agent 所持有的消息。 from typing import (Annotated,Sequence,TypedDict, ) from langchain_core.messages import BaseMessage from langgraph.graph.message import add_messagesclass …...

uniapp vue3的下拉刷新和上拉加载

开启页面的下拉刷新,注意这个不是可滚动视图的下拉刷新. 一般页面建议使用页面外的,不要使用scroll-view里面的下拉刷新. pages: "pages": [ {"path": "pages/index/index","style": {"navigationBarTitleText": "首…...

STM32设计井下瓦斯检测联网WIFI加Zigbee多路节点协调器传输

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 本系统基于STM32微控制器和Zigbee无线通信技术,设计了…...

Vue 3 中的原生事件监听与组件事件处理详解

Vue 3 中的原生事件监听与组件事件处理完全指南 在 Vue 3 中,事件监听和事件处理是组件交互中的关键部分。Vue 提供了一套简单而强大的事件处理机制,可以方便地监听 DOM 原生事件和组件自定义事件。本篇文章将详细介绍 Vue 3 中事件的使用,包…...

Flink Source 详解

Flink Source 详解 原文 flip-27 FLIP-27 介绍了新版本Source 接口定义及架构 相比于SourceFunction,新版本的Source更具灵活性,原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离 重要部件 Source 作为工厂类,会创建以下两…...

2024年了,TCP分析工具有哪些?

TCP分析工具广泛应用于网络调试、性能分析和协议学习。以下是一些常用的TCP分析工具,它们各有特点,适用于不同的场景: Wireshark - 这是一个非常强大的网络协议分析器,支持图形界面,可以捕获和分析TCP流量,…...

SRP 实现 Cook-Torrance BRDF

写的很乱! BRDF(Bidirectional Reflectance Distribution Function)全称双向反射分布函数。辐射量单位非常多,这里为方便直观理解,会用非常不严谨的光照强度来解释说明。 BRDF光照模型,上反射率公式&#…...

MySQL慢日志

慢查询日志顾名思义就是查询慢的sql语句可以记录到一个日志文件里,至于有多慢才会被记录,默认是10秒,但也可以通过系统配置来更改,慢日志在做系统优化时是一个非常好用的工具 #是否开启慢日志 show variables like slow_query_log…...

Flutter网络通信-封装Dio

前言 dio 是一个强大的 Dart HTTP 请求库,支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时以及自定义适配器等。 Dio的pub地址为:dio | Dart package 封装要求 能够使用get、post、put、patch、delete、…...

matlab 读取csv

需要跳过第一行表头等信息 1、读取整个文件 csvread(FILENAME)%文件路径 文件名2、指定起始位置 csvread(FILENAME, R, C)%从文件的第R行和第C列开始读取数据 逗号分开3、指定数据范围 csvread(FILENAME, R, C, [R1 C1 R2 C2])%读取从(R1, C1)到(R2, C2)范围内的数据注意&am…...

网络层9——虚拟专用网VPN和网络地址转换NAT

目录 一、为什么有虚拟专用网? 二、如何理解“虚拟专用网”? 三、IP隧道技术实现虚拟专用网 四、网络地址变换 一、为什么有虚拟专用网? 第一,IPv4只有32位,最多有40亿个全球唯一的IP地址数量不够,无法…...

开源科学工程技术软件介绍 – EDA工具KLayout

link 今天向各位知友介绍的 KLayout是一款由德国团队开发的开源EDA工具。 KLayout是使用C开发的,用户界面基于Qt。它支持Windows、MacOS和Linux操作系统。安装程序可以从下面的网址下载: https://www.klayout.de/build.html KLayout图形用户界面&…...

【网络安全】Cookie SameSite属性

未经许可,不得转载。 文章目录 背景CSRF 攻击SameSite 属性StrictLaxNone背景 为了有效防止 CSRF 攻击并保护用户隐私,Chrome 从 51 版本开始引入了 SameSite 属性,专门用于限制第三方 Cookie 的使用,进而减少安全风险。 CSRF 攻击 跨站请求伪造(CSRF)攻击是指恶意网站…...

Linux 命令 | 每日一学,文本处理三剑客之awk命令实践

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 描述:前面作者已经介绍了文本处理三剑客中的 grep 与 sed 文本处理工具,今天将介绍其最后一个且非常强大的 awk 文本处理输出工具,它可以非常方便…...

RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)

上文着重介绍RabbitMQ 七种工作模式介绍RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 本篇讲解如何在Spring环境下进⾏RabbitMQ的开发.(只演⽰部分常⽤的⼯作模式) 目录 引⼊依赖 一.工作队列模式 二.Publish/Subscribe(发布订阅模式) …...

【web前端笔记】vue3 + vite的前端项目中,使用import.meta.glob()方法实现全局注册组件的通用代码

目录 1.1、如何读取所有文件 1.2、通用代码 1.3、在main.js引入 这篇文章介绍一下,在vue3和vite搭建的项目中,如何将【src/components】目录下所有的【*.vue】文件,当做一个组件全局注册到Vue对象里面。 1.1、如何读取所有文件 在vue3和vite搭建的项目里面,它给我们提…...

保险行业建立知识管理系统:提高效率和安全性的策略

在保险行业,知识管理系统(KMS)的建立对于提高工作效率和保障数据安全性至关重要。保险公司需要在复杂的生态系统中航行,这个生态系统由不断发展的法规、错综复杂的保单和投保人不断变化的需求所定义。以下是一些关键策略&#xff…...

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息(用户通过弹窗订阅)开发指南 实践 我们需要先选这一个模板,具体流程参考…...

JS学习日记(jQuery库)

前言 今天先更新jQuery库的介绍,它是一个用来帮助快速开发的工具 介绍 jQuery是一个快速,小型且功能丰富的JavaScript库,jQuery设计宗旨是“write less,do more”,即倡导写更少的代码,做更多的事&#xf…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...