初学stm32 --- CAN
目录
CAN介绍
CAN总线拓扑图
CAN总线特点
CAN应用场景
CAN物理层
CAN收发器芯片介绍
CAN协议层
数据帧介绍
CAN位时序介绍
数据同步过程
硬件同步
再同步
CAN总线仲裁
STM32 CAN控制器介绍
CAN控制器模式
CAN控制器模式
CAN控制器框图
发送处理
接收处理
接收过滤器
CAN控制器位时序
CAN相关寄存器介绍(F1 / F4 / F7)
CAN主控制寄存器(CAN_MCR)
CAN位时序寄存器(CAN_BTR)
CAN 标识符寄存器(CAN_(T/R)IxR)
数据长度和时间戳寄存器(CAN_(T/R)DTxR)
CAN低位数据寄存器(CAN_(T/R)DLxR)
CAN高位数据寄存器(CAN_(T/R)DHxR)
CAN过滤器位宽寄存器(CAN_FS1R)
CAN 过滤器FIFO关联寄存器(CAN_FFA1R)
CAN 过滤器组x寄存器(CAN_FxR(1/2))
CAN相关HAL库驱动介绍
CAN外设相关重要结构体:
结构体成员与寄存器情况
CAN基本驱动步骤
过滤器组设置实例:
CAN介绍
CAN(Controller Area Network),是ISO国际标准化的串行通信协议。
为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。
低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000米
高速CAN(ISO11898)通信速率125Kbps~1Mbps,总线长度≤40米(经典CAN)
CAN FD 通信速率可达5Mbps,并且兼容经典CAN,遵循ISO 11898-1 做数据收发
更多CAN的历史知识,可以上CAN in Automation(CiA) 官网了解。
CAN总线拓扑图
终端电阻,用于阻抗匹配,以减少回波反射
CAN总线由两根线( CANL 和 CANH )组成,允许挂载多个设备节点(低速CAN:20 高速CAN:30)。
CAN总线特点
1)多主控制 每个设备都可以主动发送数据
2)系统的柔软性 没有类似地址的信息,添加设备不改变原来总线的状态
3)通信速度 速度快,距离远
4)错误检测&错误通知&错误恢复功能
5)故障封闭 判断故障类型,并且进行隔离
6)连接节点多 速度与数量找个平衡
CAN应用场景
CAN总线协议已广泛应用在汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。
CAN物理层
CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差来判断总线电平。
总线电平分为显性电平(逻辑0)和隐性电平(逻辑1),二者必居其一。
显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方。
电平 | 高速CAN | 低速CAN |
显性电平(0) | UCAN_H – UCAN_L= 2V | UCAN_H – UCAN_L = 3V |
隐性电平(1) | UCAN_H – UCAN_L = 0V | UCAN_H – UCAN_L = - 1.5V |
CAN收发器芯片介绍
CAN协议层
CAN总线以“帧”形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。
数据帧介绍
数据帧由7段组成。数据帧又分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段。
CAN位时序介绍
CAN总线以“位同步”机制,实现对电平的正确采样。位数据都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段又由多个位时序Tq组成。
注意 : 节点监测到总线上信号的跳变在SS段范围内,表示节点与总线的时序是同步,此时采样点的电平即该位的电平。
采样点是指读取总线电平,并将读到的电平作为位值的点。
根据位时序,就可以计算CAN通信的波特率。
数据同步过程
由于时钟频率误差、传输上的相位延迟引起偏差,所以需要数据同步
CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步。
硬件同步
节点通过CAN总线发送数据,一开始发送帧起始信号。总线上其他节点会检测帧起始信号在不在位数据的SS段内,判断内部时序与总线是否同步。
假如不在SS段内,这种情况下,采样点获得的电平状态是不正确的。所以,节点会使用硬件同步方式调整, 把自己的SS段平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的。
再同步
再同步利用普通数据位的边沿信号(帧起始信号是特殊的边沿信号)进行同步。
再同步的方式分为两种情况:超前和滞后,即边沿信号与SS段的相对位置。
再同步时,PSB1和PSB2中增加或者减少的时间被称为“再同步补偿宽度(SJW)”,其范围:1~4 Tq。
限定了SJW值后,再同步时,不能增加限定长度的SJW值。SJW值较大时,吸收误差能力更强,但是通讯速度会下降。
CAN总线仲裁
决定优先级
CAN总线处于空闲状态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐性电平的单元失去对总线的占有权变为接收。
竞争失败单元,会自动检测总线空闲,在第一时间再次尝试发送。
STM32 CAN控制器介绍
STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本协议。
CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。CAN 2.0B Passive只能处理标准数据帧且扩展帧的内容会忽略。
bxCAN主要特点:
波特率最高可达1M bps
支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳)
具有3级发送邮箱
具有3级深度的2个接收FIFO
可变的过滤器组(最多28个)(F1只有14个)
CAN控制器模式
CAN控制器的工作模式有三种:初始化模式、正常模式和睡眠模式。
CAN控制器模式
CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式。(初始化模式下进行配置)
CAN控制器框图
1)CAN内核
包含各种控制/状态/配置寄存器,可以配置模式、波特率等
2)发送邮箱
用来缓存待发送的报文,最多可以缓存3个报文
3)接收FIFO
缓存接收到的有效报文
4)接收过滤器
筛选有效报文
发送处理
接收处理
接收过滤器
当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。
每个过滤器组都有两个32位寄存器CAN_FxR1和CAN_FxR2。根据过滤器组的工作模式(位宽和选择模式)不同,寄存器的作用不尽相同。
选择模式可设置屏蔽位模式或标识符列表模式,寄存器内容的功能就有所区别。
屏蔽位模式,可以选择出一组符合条件的报文。寄存器内容功能相当于是否符合条件。
标识符列表模式,可以选择出几个特定ID的报文。寄存器内容功能就是标识符本身。
REG中bit值代表的是匹配与否:1必须匹配 0不用关心
屏蔽位寄存器中位值为1,表示与ID要必须匹配;位值为0,表示可不与ID匹配。
在使能过滤器情况下,总线上广播的报文ID与过滤器的配置都不匹配,CAN控制器会丢弃该报文,不会进入到接收FIFO中。
注意:标识符选择位IDE和帧类型RTR需要一致。不同过滤器组的工作模式可以设置为不同。
CAN控制器位时序
STM32的CAN外设位时序分为三段:
同步段 SYNC_SEG、 时间段1 BS1(PTS + PBS1)、 时间段2 BS2
STM32F103,设TS1=8、TS2=7、BRP=3,波特率 = 36000 / [( 9 + 8 + 1 ) * 4] = 500Kbps。
STM32F407,设TS1=6、TS2=5、BRP=5,波特率 = 42000 / [( 7 + 6 + 1 ) * 6] = 500Kbps。
注意:通信双方波特率需要一致才能通信成功。
CAN相关寄存器介绍(F1 / F4 / F7)
CAN主控制寄存器(CAN_MCR)
INRQ位,用于控制初始化请求。
CAN位时序寄存器(CAN_BTR)
STM32F103,设TS1=8、TS2=7、BRP=3,波特率 = 36000 / [( 9 + 8 + 1 ) * 4] = 500Kbps
CAN 标识符寄存器(CAN_(T/R)IxR)
x范围:1~3,3个发送邮箱 x范围:1~2,2个接收FIFO邮箱
报文使用标准标识符,EXID[17:0]值无效
TxRQ位置1,请求邮箱发送
注意:报文使用扩展标识符时,STID[10:0]等效于EXID[28:18],与EXID[17:0]组成29位扩展标识符。
数据长度和时间戳寄存器(CAN_(T/R)DTxR)
x范围:1~3,3个发送邮箱 x范围:1~2,2个接收FIFO邮箱
注意:DLC是多少,数据内容就有多少字节被发送,并不是每次都发送8个字节数据。
CAN低位数据寄存器(CAN_(T/R)DLxR)
CAN高位数据寄存器(CAN_(T/R)DHxR)
使用时间戳功能DLC必须为8字节
CAN过滤器模式寄存器(CAN_FM1R)
CAN过滤器位宽寄存器(CAN_FS1R)
注意:CAN外设只能使用的有的过滤器组,不能使用没有的过滤器组。
CAN 过滤器FIFO关联寄存器(CAN_FFA1R)
该寄存器决定了哪个FIFO寄存器有效(即RIxR、RDTxR、RDLxR、RDHxR的‘x’)。
CAN 过滤器组x寄存器(CAN_FxR(1/2))
CAN相关HAL库驱动介绍
CAN外设相关重要结构体:
CAN_InitTypeDef、CAN_FilterTypeDef和CAN_(T/R)xHeaderTypeDef
CAN_InitTypeDefuint32_t Prescaler /* 预分频 */
uint32_t Mode /* 工作模式 */
uint32_t SyncJumpWidth /* 再次同步跳跃宽度 */
uint32_t TimeSeg1 /* 时间段1(BS1)长度 */
uint32_t TimeSeg2 /* 时间段2(BS2)长度 */
uint32_t TimeTriggeredMode /* 时间触发通信模式 */
uint32_t AutoBusOff /* 总线自动关闭 */
uint32_t AutoWakeUp /* 自动唤醒 */
uint32_t AutoRetransmission /* 自动重传 */
uint32_t ReceiveFifoLocked /* 接收FIFO锁定 */
uint32_t TransmitFifoPriority /* 传输FIFO优先级 */
CAN_FilterTypeDefuint32_t FilterIdHigh /* ID高字节 */
uint32_t FilterIdLow /* ID低字节 */
uint32_t FilterMaskIdHigh /* 掩码高字节 */
uint32_t FilterMaskIdLow /* 掩码低字节 */
uint32_t FilterFIFOAssignment /* 过滤器关联FIFO */
uint32_t FilterBank /* 选择过滤器组 */
uint32_t FilterMode /* 过滤器模式*/
uint32_t FilterScale /* 过滤器位宽 */
uint32_t FilterActivation /* 过滤器使能 */
Uint32_t SlaveStartFilterBank /* 从CAN选择启动过滤器组 单CAN没有意义*/
结构体成员与寄存器情况
CAN基本驱动步骤
1、CAN参数初始化
工作模式、波特率等 HAL_CAN_Init
2、使能CAN时钟和初始化相关引脚
GPIO模式设为复用功能模式 HAL_CAN_MspInit
3、设置过滤器
HAL_CAN_ConfigFilter 完成过滤器的初始化
4、CAN数据接收和发送
HAL_CAN_AddTxMessage 发送消息
HAL_CAN_ GetRxMessage 接收数据
5、使能CAN相关中断/设置NVIC/编写中断服务函数
__HAL_CAN_ENABLE_IT (可选)
过滤器组设置实例:
关于CAN中断
启用 CAN 接收 FIFO0 消息挂起中断
__HAL_CAN_ENABLE_IT(&g_can_handle_struct, CAN_IT_RX_FIFO0_MSG_PENDING);
__HAL_CAN_ENABLE_IT
:这是 STM32 HAL 库提供的一个宏,用于启用 CAN 外设的中断。CAN_IT_RX_FIFO0_MSG_PENDING
:这个参数表示启用 CAN 接收 FIFO0 消息挂起中断。- 当 CAN 接收 FIFO0 中有新的消息并且该消息已经准备好时,控制器会触发一个中断,允许外部应用程序处理接收到的消息。
- FIFO(先进先出队列)用于存储接收到的 CAN 消息,FIFO0 是第一个 FIFO 队列,STM32 的 CAN 控制器通常有多个 FIFO 队列。
是的,您的理解是正确的。进入挂起中断后,您可以读取 can_rxheader_struct.StdId
,因为当 CAN 控制器收到数据并通过过滤器后,会将其存放到 FIFO 队列中。中断会在 FIFO 中有新消息时触发,并通过 HAL 函数 HAL_CAN_GetRxMessage
将数据读取出来。
详细解释:
1. CAN 接收机制概述
- CAN 总线是一个广播式协议,当总线上有设备发送消息时,所有连接的设备都能接收到这条消息。
- 过滤器:CAN 控制器通常配置了过滤器来筛选感兴趣的消息,只有经过过滤器允许的消息才会被接收并存储到接收 FIFO 中。STM32 的 CAN 控制器可以通过配置多个过滤器来选择哪些消息应当接收。
- FIFO 队列:接收到的有效消息会被存储到接收 FIFO(如 FIFO0)。消息排队存储,等待被中断服务程序处理。
2. 中断触发
当接收到一条消息,并且通过了过滤器的检查后,消息就会被存储到 FIFO 中。此时,如果启用了接收中断(例如通过 CAN_IT_RX_FIFO0_MSG_PENDING
),并且 FIFO 中有新消息,CAN 中断会被触发。
3. 读取接收的消息
- 在进入中断处理函数
USB_LP_CAN1_RX0_IRQHandler
后,您可以通过HAL_CAN_GetRxMessage
函数读取接收到的消息,并将消息的相关信息(如标识符)和数据存储到相应的结构体中。 - 读取的消息头信息(如
StdId
、IDE
、RTR
、DLC
等)通常存储在CAN_RxHeaderTypeDef
结构体中
4. 总结
- 数据是被动接收的:当总线上有数据并且经过了过滤器的过滤,符合条件的消息会被存储到 FIFO 中。
- 进入中断后,可以读取
can_rxheader_struct.StdId
:一旦中断被触发,您可以通过HAL_CAN_GetRxMessage
读取消息的标识符和数据,标识符信息存储在can_rxheader_struct.StdId
中。 - 过滤器的作用:过滤器用于筛选总线上接收到的消息,只有符合条件的消息才会存放到 FIFO 中,并触发中断。
相关文章:

初学stm32 --- CAN
目录 CAN介绍 CAN总线拓扑图 CAN总线特点 CAN应用场景 CAN物理层 CAN收发器芯片介绍 CAN协议层 数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 STM32 CAN控制器介绍 CAN控制器模式 CAN控制器模式 CAN控制器框图 发送处理 接收处理 接收过…...

软件测试—接口测试面试题及jmeter面试题
一,接口面试题 1.接口的作用 实现前后端的交互,实现数据的传输 2.什么是接口测试 接口测试就是对系统或组件之间的接口进行测试,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑关系 3.接口测试必要性 1.可以发现很…...

图论的起点——七桥问题
普瑞格尔河从古堡哥尼斯堡市中心流过,河中有小岛两座,筑有7座古桥,哥尼斯堡人杰地灵,市民普遍爱好数学。1736年,该市一名市民向大数学家Euler提出如下的所谓“七桥问题”: 从家里出发,7座桥每桥…...
嵌入式开发通讯协议大全(在写中)
目录 modbus RTU通讯协议: pmbus通讯协议: modbus RTU通讯协议: 主要应用功能: 规范了软件变量,访问功能码,给不同工程师开发的不同产品有统一的通讯标准 帧结构简单,占用带宽少,…...
webpack 4 升级 webpack 5
升级至最新的 webpack 和 webpack-cli npm run build 报错, unknown option -p 解决方案: 改成 --mode production npm run build 报错 unknown option --hide-modules 解决方案:直接移除 npm run build 报错:TypeError: Cannot a…...
oneplus3t-lineageos-16.1编译-android9, oneplus3t-lineage-14编译-android7
oneplus3t-lineage-14编译-android7 1 清华linageos镜像 x lineage-14.1-20180223-nightly-oneplus3-signed.zip ntfs分区挂载为普通用户目录 , ext4分区挂载为普通用户目录 bfsu/lineageOS镜像 ts/lingeageOS镜像 oneplus3/lineage-build-simple-manual.md, manifest-p…...

HTML中最基本的东西
本文内容的标签,将是看懂HTML的最基本之基本 ,是跟您在写文章时候一样内容。一般想掌握极其容易,但是也要懂得如何使用,过目不忘,为手熟尔。才是我们学习的最终目的。其实边看边敲都行,或者是边看边复制粘贴…...

<OS 有关>Ubuntu 24 安装 openssh-server, tailscale+ssh 慢增加
更新日志: Created on 14Jan.2025 by Dave , added openssh-server, tailescape Updated on 15Jan.2025, added "tailescape - tailscape ssh" 前期准备: 1. 更新可用软件包的数据库 2. 升级系统中所有已安装的软件包到最新版本 3. 安装 cur…...
神经网络常见操作(卷积)输入输出
卷积 dimd的tensor可以进行torch.nn.Convnd(in_channels,out_channels),其中nd-1,d-2对于torch.nn.Convnd(in_channels,out_channels),改变的是tensor的倒数n1维的大小 全连接 使用torch.nn.Linear(in_features,out_features,bias)实现YXWT b,其中X 的形状为 (ba…...

25/1/16 嵌入式笔记 STM32F108
输入捕获 TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_TimeBaseStruct.TIM_Period 0xFFFF; // 自动重装载值 TIM_TimeBaseStruct.TIM_Prescaler 71; // 预分频值 TIM_TimeBaseStruct.TIM_ClockDivision 0; TIM_TimeBaseStruct.TIM_CounterMode TIM_CounterMode_Up…...

mac 安装 node
brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…...
mysql常用运维命令
mysql常用运维命令 查看当前所有连接 -- 查看当前所有连接 SHOW FULL PROCESSLIST;说明: 关注State状态列,是否有锁。如果大量状态是waiting for handler commit检查磁盘是否占满关注Time耗时列,是否有慢查询关注Command列,如果…...
正则表达式学习网站
网上亲测好用的网站: Regexlearn 这个网站可以从0开始教会正则表达式的使用。 mklab 包含常用表达式,车次,超链接,号码等提取。...
gradle,adb命令行编译备忘
追踪依赖(为了解决duplicateClass…错误) gradlew.bat app:dependencies > dep-tree.txt # 分析dep-tree.txt的依赖结构,找到对应的包,可能需要做exclude控制,或者查看库issueverbose编译(我一直需要verbose) gradlew.bat assembleDebug -Dhttps.pr…...
C++:工具VSCode的编译和调试文件内容:
ubuntu24.04, vscode 配置文件 C 的环境 下载的gcc,使用命令为 sudo aptitude update sudo aptitude install build-essential -f- sudo: 以超级用户权限运行命令。 - aptitude: 包管理工具,用于安装、更新和删除软件包。 - install: 安装指…...

SpringMVC Idea 搭建 部署war
1.创建 Idea项目 使用Maven模板 创建 webApp模板项目 2.导入依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...
YOLOv10-1.1部分代码阅读笔记-loaders.py
loaders.py ultralytics\data\loaders.py 目录 loaders.py 1.所需的库和模块 2.class SourceTypes: 3.class LoadStreams: 4.class LoadScreenshots: 5.class LoadImagesAndVideos: 6.class LoadPilAndNumpy: 7.class LoadTensor: 8.def autocast_list(source…...

Windows的Redis查看自己设置的密码并更改设置密码
查看密码 由于我的Redis安装很久了,所以忘记是否有设置密码,查看步骤如下: 启动redis,启动流程可以看这篇文章:https://blog.csdn.net/changyana/article/details/127679871 在redis安装目录下打开redis-cli.exe&…...

【Linux】sed编辑器二
一、处理多行命令 sed编辑器有3种可用于处理多行文本的特殊命令。 N:加入数据流中的下一行,创建一个多行组进行处理;D:删除多行组中的一行;P:打印多行组中的一行。 1、next命令:N 单行next命…...

docker 部署 Kafka 单机和集群
一、准备工作 安装 Docker 确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装:docker --version如果未安装,可以访问 Docker 官网下载并安装 Docker Desktop(Windows 和 Mac)或使用包管理器安装(Linux&…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...