ST意法半导体
直播中

你又知道了

13年用户 1215经验值
私信 关注
[问答]

STM32F103TBU6 封装是VFQFPN36 将PD0和PD1配置成CAN不成功是什么原因?

                                                                                             
规格书上可以配置成CAN, 程序配置好后发现发送数据没有邮箱。然后在STM32CubeMX软件进CAN配置发现STM32F103TBU6  封装是VFQFPN36  PD0和PD1没有CAN功能选项,请问是什么原因?不知道这PD0和PD1能否作CAN接口使用。
又查了芯片使用手册:

请帮忙看看是什么原因?谢谢!

回帖(1)

王莉

2025-6-13 17:12:45

在 STM32F103TBU6 (36-pin VFQFPN 封装) 上将 PD0 和 PD1 配置为 CAN 接口不成功,主要原因在于这个特定的芯片封装型号并不支持 CAN 外设。


以下是详细分析:




  1. STM32F103 产品线划分和 CAN 外设支持:



    • STM32F1 系列根据芯片型号和引脚数量被划分为不同“密度”等级:小容量(LD, MD)、中等容量(HD)和 互联型 (XL)等。

    • CAN (Controller Area Network) 外设只在引脚数较多的 STM32F103 型号上可用。 具体来说,它通常出现在100引脚及以上封装的 中等容量(HD)大容量(XL) 型号中(例如 STM32F103RC, STM32F103V8, STM32F103ZE 等)。

    • STM32F103TBU6(型号尾号 TBU6)对应的是 36 引脚 VFQFPN 封装,属于中等容量(HD)类别,但其极少的引脚数意味着它为了小型化牺牲了许多高级外设功能。

    • 查阅 STM32F103TBU6 的数据手册 (Datasheet) 和 STM32F10x 系列参考手册 (Reference Manual) 中的“功能说明”(Introduction)或“外设资源列表”(Peripheral overview)章节,你会明确看到 CAN 1 和 CAN 2 (S, T, Z 系列才有 CAN2) 只存在于引脚数多于 36 的型号上。




  2. PD0/PD1 的复用功能限制:



    • 在 STM32F1 系列 36 引脚封装上,PD0 和 PD1 通常具有有限的复用功能选项。

    • 在支持 CAN 功能的更大型号上,CAN 的默认引脚通常是 PA11 (CAN_RX) 和 PA12 (CAN_TX)。

    • 通过 “复用功能重映射” (AFIO Remapping),在某些大型号上可以将 CAN 映射到 PB8 (CAN_RX) / PB9 (CAN_TX)PD0 (CAN_RX) / PD1 (CAN_TX)

    • 关键点: 重映射功能本身依赖于芯片底层拥有 CAN 这个物理外设。 如果芯片本身没有集成 CAN 控制器(如 STM32F103TBU6),那么无论你怎么配置 PD0 和 PD1(即使参考手册里提到这些引脚在其他支持 CAN 的型号上可作为 CAN_RX/TX),它都不可能“变出”一个 CAN 外设来工作。




  3. CubeMX 中看不到 CAN 选项的最直接证据:



    • 当你在 STM32CubeMX 中选择 STM32F103TBU6 (或直接输入型号/在 Part Number Search 中选中它),并打开 Pinout & Configuration 视图:

      • 左侧的“外设”配置树列表 (Categories -> Peripherals) 中,根本不会出现“CAN”或“CAN FD”这一类别。 这是一个最明确的信号,表明 CubeMX 根据其设备数据库和芯片的硬件限制,知道这个型号没有 CAN 硬件。

      • 在“引脚分配”(Pinout) 视图上,右键单击 PD0 或 PD1,选择SYS功能时,你将找不到 CAN_RXCAN_TX 选项。 这些选项只会出现在支持 CAN 且支持该重映射的型号上。


    • 如果你在 CubeMX 里手动选择了 PD0 和 PD1 作为 GPIO,并试图在代码中强行初始化 CAN,会发现与 CAN 相关的寄存器(如 CAN_MCR, CAN_BTR, CAN_TIxR 等)可能根本不存在于内存映射地址空间中,或者试图操作它们会导致错误(比如写入无效邮箱、状态寄存器无反应)。




  4. “发送数据没有邮箱”错误分析:



    • CAN 外设通过一组称为“邮箱”(TX Mailboxes)的硬件队列来管理数据帧的发送。通常有 3 个邮箱。

    • 如果代码尝试启动 CAN 发送(如调用 HAL_CAN_AddTxMessage() 或直接操作邮箱寄存器),但:

      • 操作了一个不存在的邮箱地址。

      • 或者因为根本不存在 CAN 外设,控制寄存器的状态位(如 CAN_TSR.TME)永远显示为没有空闲邮箱(即使软件初始化时认为邮箱是空的)。

      • 或者初始化函数 HAL_CAN_Init() 在访问 CAN 控制寄存器 (CAN->MCR) 时就已失败(硬件不存在)。


    • 这些现象都是该芯片上 CAN 外设硬件不存在的直接表现。你试图使用的软件功能没有底层的硬件支持。




总结与建议:



  • 核心原因: STM32F103TBU6 (36-pin VFQFPN) 型号的硬件本身并不集成 CAN 控制器 (CAN Peripheral)。 无论你怎么配置 PD0 和 PD1,即使某些文档提到这些引脚在其他型号上可作 CAN_RX/TX,对你手上这块芯片都无效。

  • 关键证据:

    • CubeMX 中找不到 CAN 配置选项。

    • 发送时找不到邮箱表明底层硬件缺失。


  • 解决方案:

    1. 确认型号: 仔细检查你的芯片丝印,务必确认是 STM32F103TBU6 和 36 脚封装。

    2. 查阅官方文档: 去 ST 官网下载 STM32F103xx 系列数据手册(Datasheet,查找 TBU6 的 pinout 和 feature list)和参考手册(Reference Manual,查 CAN 章节的适用范围)。你会看到 CAN 不支持在小脚数的型号上。

    3. 更换芯片型号:

      • 需要带CAN的小封装(如果必须用36pin级别): 选择集成CAN控制器且封装兼容的新型号(如STM32G0/G4系列有带CAN的TSSOP20/UQFN28/UFQFPN32封装)。务必检查目标型号的封装兼容性(引脚数、布局、外设支持)。

      • 同系列带CAN的型号: 选择STM32F1系列内部集成CAN控制器的型号(如STM32F103C8T6/48/64脚,STM32F103RBT6/64脚,STM32F103VCT6/100脚等),并根据所需引脚数选择封装。这类芯片可直接使用PA11/PA12作为CAN接口。


    4. 替代方案(如果无法更换芯片):

      • 软件模拟CAN: 效果有限,实时性要求高的场景可能无法满足。不推荐用于正式产品开发。

      • 外置CAN控制器: 使用如MCP2515/25625等独立CAN控制器,通过SPI接口与STM32F103TBU6通信。这是最稳定可靠的解决方案,但需要额外器件(CAN控制器、收发器如TJA1050)和相应驱动代码。




务必以芯片数据手册为准进行确认。STM32CubeMX的行为和你的初始化失败现象都明确指向:这个36脚型号不包含硬件CAN功能,这才是无法配置成功的根本原因。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分