单片机
返回首页

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


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 设计汽车集群电源

  • 6晶体管H桥

  • USB自供电声卡

  • AVR LCD温度计—LM35

  • AVR PC步进电机驱动器

  • AVR温度计TCN75

    相关电子头条文章