你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32C5】简而不凡,锋芒自显——Nucleo-STM32C562RE快速上手

[复制链接]
CM_STM32 发布时间:2026-5-24 15:29

【STM32C5】简而不凡,锋芒自显——Nucleo-STM32C562RE快速上手

很早就拿到了C562这块板子了,因为时间安排原因迟迟没有动手写测评,现在终于腾出时间来开箱这块新板子了。本文主要介绍一下Nucleo-STM32C562RE开发板,并通过STM32CubeMX2+STM32Cube IDE for VS Code环境完成按钮、点灯的实验。

首先介绍一下STM32C5系列,STM32C5 是 ST 面向成本敏感型应用推出的新一代主流 MCU 系列。相比传统意义上“入门级MCU”的定位,C5 系列在保持低门槛、低成本开发体验的基础上,把 Cortex-M33 内核、DSP/FPU、较完整的外设资源以及安全特性进一步下放到入门与主流应用场景中。STM32C5 系列最高运行频率为 144 MHz,可达到 593 CoreMark,并提供最高 1 MB Flash 与 256 KB SRAM,为成本敏感型嵌入式设计提供更高的性能起点。

一、硬件介绍

本次上手的开发板是 NUCLEO-C562RE,板载 MCU 为 STM32C562RET6, Arm Cortex-M33 内核,主频最高 144 MHz,内置 512 KB Flash 和 128 KB SRAM,同时带有 AES、HASH、TRNG 等硬件安全相关模块,并提供 FDCAN、USB FS、I3C、SPI、USART/UART、I2C 等常用通信接口。对于日常的控制、通信、传感器采集以及小型工业应用来说,它的资源配置诚意满满。image.png

板载 ST-LINK 调试下载器,不需要额外准备仿真器;同时兼容 Arduino Uno V3 扩展接口和 ST morpho 排针,可以比较方便地接入各类扩展板或外部模块。板上还有1个用户 LED、1 个用户按键和1个复位按键,惊喜的是,BOOT0也从先前的跳线帽升级为了轻触按键;以及一个CAN FD接口和USB数据接口。

与往年设计的开发板相比,这块板在接口的跳线焊盘上预留了更多的选择,给工程师提供了更灵活的开发体验。image.png

USB1接口的设计上堆料很足,包括限流用的功率电子开关STEF05,防静电的ESD,以及CC的下拉电阻上也通过两个NMOS连接到地。当开发板供电正常时,CC1、CC2上的5.1k电阻正常下拉;当未上电或者状态异常时,CC下拉断开,防止错误识别。也就是说,当开发板5V跳线帽连接到ST-LINK而非USB1时,USB1接口不作电源输入,仅作数据接口。image.png

板子正面提供了CAN FD的外围电路,同时背面预留了LIN总线的焊盘位置。image.png

二、开发环境

本测评使用的是STM32CubeMX2 代码生成工具+STM32CubeIDE for VS Code 开发环境,作为今年ST主推的两款新工具,都具有十分值得尝试的地方。

CubeMX2和MX一样,直接从官网获取即可,根据操作系统下载对应版本。STM32CubeIDE for VS Code 在VS Code扩展商店中下载即可。image.png

2.1 CubeMX2创建项目

来到CubeMX2主界面,选择MCU创建项目,在选择器中找到STM32C563RET6,点击Continue下一步。image.png

填写项目名,选择项目路径。值得注意的是,项目创建时不会额外创建文件夹来存放.ioc2,所以最好给他新建一个新文件夹,否则工程项目多的话会很乱。image.png

创建完成后进入主界面,CubeMX2的主界面与CubeMX有较大的排版差异,但是操作逻辑的核心不变。将CubeMX原本分布于顶部的导航栏和左边的表视图全部整合为左边的导航栏,操作视图上更加简洁。image.png

2.2 CubeMX2配置项目

1.配置时钟

STM32C562的时钟结构和以往常见的STM32系列略有不同。它没有采用传统的通用PLL倍频配置方式,而是引入了PSI(Programmable-Speed Internal oscillator,可编程速度内部振荡器)作为高频时钟源。PSI 可以基于HSE、LSE或HSI等参考时钟,在内部通过类似PLL的方式输出预设频率,有100 MHz、144 MHz或160 MHz三档速率,配置过程明显简化,不再需要手动设置复杂的PLL参数,而是通过选择PSI时钟输出频率档位完成系统时钟配置。

不同时钟源输出频率精度不同,其典型值见下表:image.png

首先,从外设菜单中配置RCC,启用HSE时钟源,选择石英晶体振荡器 Crystal/ceramic resonator。image.png由原理图可以看到,板载的高速晶振是24MHz的,可以选择其作为PSI的参考时钟源。切换到时钟树页面,设置为标准的144MHz,并将PSIS作为系统时钟。当然,24MHz晶振也可直接作为时钟源输入,但此时系统时钟仅为24MHz。image.png

2.配置GPIO

CubeMX的只能从Pinout图上选择,而CubeMX2目前可以在Detail View上直接双击对应的Pin进入配置,操作上更加清晰明了。选择需要的引脚PA5和PC13,勾选上GPIO-configured,并点击左边的外设配置,可以打开GPIO的配置窗口。image.png

如果需要同时查看Pinout图和设置,可以点击Split right将Pinout窗口分栏到右边。在Pinout中初始化引脚功能,并在Configuration中配置GPIO的具体功能:按照原理图,将PA5配置为GPIO推挽输出,无上下拉电阻;PC13配置为GPIO输入,并打开中断。image.png

在GPIO Configuration设置好按钮和LED灯的初始化,如下图所示。在配置时可以添加好宏定义标签,在编写代码时可以直接调用。image.png

回到Pinout界面,在Detail View中可以看到选中引脚的类型,包括是否为5V耐压引脚、是否为模拟引脚、配置的状态等。 image.png

当需要将配置的模式转移到其他引脚时,不需要清除该引脚的配置并重新配置其他引脚,可以直接通过Detail View右上角的选择框 -> Move signal将配置转移到其他引脚上方。image.png

3.配置调试方式

配置Debug,点击active按钮激活调试,设置为Single-wire trace asynchronous模式即可使用ST-Link。 image.png

4.项目生成设置

因为使用的开发环境是STM32CubeIDE for VS Code,所以选择CMake-GCC工具链,并生成项目。 image.png

2.3 代码编写

打开VS Code,点击资源管理器的“打开文件夹”,导入刚刚生成的项目文件。注意需要添加的是带CMake后缀的文件夹。 image.png

初次导入会询问是否配置CMake项目为STM32Cube项目,选择确定。 image.png

接下来配置调试器,点击运行和调试,创建一个launch.json文件,选择当前工作区,选择STM32Cube: STM32 Launch STLink GDB Server(如果使用的是JLink的话则选择JLink调试器)。选择后会自动生成一个launch.json文件。 image.png

此时下方工具栏会出现一个STM32Cube的调试配置,可以点击生成看看是否编译成功。 image.png

本测评将实现通过按钮外部中断,调节LED闪烁频率的简单测评代码。代码均在main.c中。

首先定义全局变量,四档LED闪烁速度及档位编号:

static const uint32_t g_ld1_blink_delays_ms[4] = { 1000U, 500U, 200U, 100U };
static volatile uint8_t g_ld1_blink_delay_idx = 2U;

编写中断回调函数

首先判断中断号、触发类型是否正确;

然后通过last_tick_ms及now_ms两个变量,获取时间戳并对比两次进入中断的时间差,用于消抖处理;

最后更新闪烁频率档位标志。

void HAL_EXTI_TriggerCallback(hal_exti_handle_t *hexti, hal_exti_trigger_t trigger)
{
  static uint32_t last_tick_ms = 0U;
  uint32_t now_ms;

  if ((hexti == NULL) || (hexti->line != HAL_EXTI_LINE_13))//判断中断号正确
  {
    return;
  }

  if ((trigger != HAL_EXTI_TRIGGER_RISING) && (trigger != HAL_EXTI_TRIGGER_RISING_FALLING))//判断触发类型正确
  {
    return;
  }

  now_ms = HAL_GetTick();
  if ((now_ms - last_tick_ms) < 10U)//消抖
  {
    return;
  }
  last_tick_ms = now_ms;

  g_ld1_blink_delay_idx = (uint8_t)((g_ld1_blink_delay_idx + 1U) & 0x03U);//更新档位
}

主循环中添加GPIO的翻转函数和延时函数即可。

int main(void)
{
  if (mx_system_init() != SYSTEM_OK)
  {
    return (-1);
  }
  else
  {

    while (1) {   
      HAL_GPIO_TogglePin(HAL_GPIOA, HAL_GPIO_PIN_5);
      HAL_Delay(g_ld1_blink_delays_ms[g_ld1_blink_delay_idx]);
    }
  }
} 

2.4 效果展示

image.png
image.png
image.png
output-14_49_59.gif
收藏 评论0 发布时间:2026-5-24 15:29

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版