【STM32C092RC 测评】串口通信
本文介绍了 Nucleo-STM32C092 开发板实现串口通信的流程。
项目方案
- 使用 STM32CubeMX创建工程;
- STM32CubeIDE 编译和调试工程、固件上传;
- 实现串口打印。
工程创建
使用 STM32CubeMX 快速创建工程,开启 UART 并实现串口打印字符串。
- 打开
STM32CubeMX 软件,新建 ST 板卡工程,搜索 NUCLEO-C092RC 选中目标板卡,开始工程,选择默认外设配置(注意不使用 BSP 板级支持包);
- 时钟配置:采用默认设置,系统时钟频率 12MHz;

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

- 配置完成后,进入
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 串口发送函数即可。
流程图
代码运行流程图

代码
打开 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 */
}
编译程序,连接开发板并运行程序,可实现固件上传和程序自动执行。
效果
打开串口调试助手,连接目标串口对应的端口,配置波特率等信息,打开串口,即可获得连续字符串输出

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