STM32Cube串口通信(上)串口发送
2025-10-27 来源:bilibili
工作环境:
STM32CubeMXv6
Keil5
串口调试助手
单单的串口发送相对而言还是比较简单,因为不用打开配置串口中断相关的配置。
首先打开左侧的下拉框Connectivity,点击USART1选项;

在打开的选单中点击Mode的下拉框,选中Asynchronous;

在下方的配置框中选中Parameter Settings进行配置:
Baud Rate:波特率
Word Length:字长
Parity: 奇偶校验
Stop Bits:停止位
Data Directon:数据方向
Over Sampling:超采样
Auto Baudrate: 自动波特率
TX Pin Active Level Inversion:输出引脚有效电平反转
RX Pin Active Level Inversion:输入引脚有效电平反转
Data Inversion:数据反转
TX and RX Pin Swapping:输出和输入引脚交换
DMA on RX Error:DMA接收错误
MSP First:MSP优先

设置完成后
点击Project Manager页面,输入工程名和工程位置,选择工具链和IDE为MDK-ARM,版本为5.27;

打开左侧Code Generater菜单勾选Generate peripheral initialization as a pair of'.c/.h'file per peripheral;

最后点击右上角的GENERATE CODE按钮后生成代码。
生成代码后打开工程文件夹,用Keil5打开工程。

编译后运行
此时还是无法进行串口通信的
打开usart.c,在#include "usart.h"下添加以下代码
#include 'stdio.h'
/* USER CODE BEGIN 0 */
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->ISR&0X40)==0);//循环发送,直到发送完毕
USART1->TDR=(unsigned char)ch;
return ch;
}
#endif
/* USER CODE END 0 */
好了,现在可以使用
printf('Hello world');
直接在串口1中输出了
如果不想改变stm32cube生成的函数,那么可以不用添加这段代码,直接使用
uint8_t UART_BUF[11] = 'Hello world';
HAL_UART_Transmit(&huart1,UART_BUF,11,0xffff);
函数中的三个形参分别是串口名,串口数组名,数组长度,超时时间(因为是阻塞式的)。
参考资料:
STM32F7开发指南-HAL库版本_V1.1
HAL库教程5:串口数据发送 https://blog.csdn.net/geek_monkey/article/details/89164939
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析
- 蓝牙信道探测技术原理与开发套件实践
- 意法半导体中国本地造STM32微控制器启动规模量产




