打印
[STM32C0]

【STM32C092RC 测评】串口通信

[复制链接]
325|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

【STM32C092RC 测评】串口通信

本文介绍了 Nucleo-STM32C092 开发板实现串口通信的流程。

项目方案

  • 使用 STM32CubeMX创建工程;
  • STM32CubeIDE 编译和调试工程、固件上传;
  • 实现串口打印。

工程创建

使用 STM32CubeMX 快速创建工程,开启 UART 并实现串口打印字符串。

  • 打开 STM32CubeMX 软件,新建 ST 板卡工程,搜索 NUCLEO-C092RC 选中目标板卡,开始工程,选择默认外设配置(注意不使用 BSP 板级支持包);
  • 时钟配置:采用默认设置,系统时钟频率 12MHz;

clocktree_default.jpg

  • Pinout & Configuration 标签下选择 Connectivity - 使能 USART2

uart_config.jpg

  • 配置完成后,进入 Project Manager 标签栏,进行项目命名、保存路径设置、编译器选择等操作;
  • 点击 Generate Code 按钮,使用 STM32CubeIDE 或 Keil 打开目标工程;
  • 编译工程,0 error, 0 warning .

printf 重定向

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h" // printf used
/* USER CODE END Includes */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart2, (uint8_t*)&ch,1,HAL_MAX_DELAY);
    return ch;
}
/* USER CODE END PD */

串口输出浮点型数据

  • 进入项目资源管理器,右键项目,选择属性;
  • 在弹出的对话框中,选择 C/C++ Build ,展开 C/C++ Build 并选择 Settings ;
  • 选择 Tool Settings - MCU Settings
  • 勾选 Use float with printf from newlib-nano (-u printf float)
  • 点击 Apply 应用自动重新构建项目,点击 Apply and Close 保存配置。
  • 右键项目 - 属性 - C/C++ Build - Setting - Tool Settings - MCU GCC Linker - Miscellaneous - Other flags - 点击添加符号,输入 -u_printf_float ,应用并关闭。

若不使用串口 printf 重定向,则仅考虑 HAL_UART_Transmit 串口发送函数即可。

流程图

代码运行流程图

uart_print_flowchart.jpg

代码

打开 Core/Src/main.c 文件,添加关键代码

#include "main.h"
#include "usart.h"
#include "gpio.h"

/* USER CODE BEGIN Includes */
#include <string.h>
#include <stdio.h>
/* USER CODE END Includes */

/* USER CODE BEGIN PD */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart2, (uint8_t*)&ch,1,HAL_MAX_DELAY);
    return ch;
}
/* USER CODE END PD */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

int main(void)
{
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();
  MX_USART2_UART_Init();

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
      printf("Hello World!\r\n");
      //HAL_UART_Transmit(&huart2, (uint8_t*)"Hello World!\r\n", strlen("Hello World!\r\n"), HAL_MAX_DELAY);
      HAL_Delay(500);
  }
  /* USER CODE END 3 */
}

编译程序,连接开发板并运行程序,可实现固件上传和程序自动执行。

效果

打开串口调试助手,连接目标串口对应的端口,配置波特率等信息,打开串口,即可获得连续字符串输出

uart_print_hello.gif

总结

本文介绍了 Nucleo-STM32C092 开发板通过配置 STLINK 虚拟串口,进而实现串口打印的流程,为后续开发做好铺垫,也为相关产品的开发和设计提供了参考。

使用特权

评论回复
沙发
AdaMaYun| | 2025-6-8 22:30 | 只看该作者
串口通信基础操作

使用特权

评论回复
板凳
无垠的广袤|  楼主 | 2025-6-11 10:11 | 只看该作者
本帖最后由 无垠的广袤 于 2025-6-11 10:12 编辑
AdaMaYun 发表于 2025-6-8 22:30
串口通信基础操作

UART串口通信作为后续项目开发的基础,是传感器信息传输与数据采集所需的关键技术

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

64

帖子

0

粉丝