登录/注册

STM32串口定义发送

STM32串口定义发送

更多

在STM32中,串口发送数据需要以下步骤(以HAL库为例):


1. 硬件初始化

配置GPIO和串口外设:

// 使能时钟
__HAL_RCC_GPIOA_CLK_ENABLE();    // TX引脚所在GPIO(此处以PA9为例)
__HAL_RCC_USART1_CLK_ENABLE();   // 串口USART1时钟

// 配置GPIO为复用功能
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_9;              // TX引脚(PA9)
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;        // 复用推挽输出
GPIO_InitStruct.Pull = GPIO_PULLUP;             // 上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  // 高速
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;   // 复用为USART1(查芯片手册确认)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);        // 应用配置

// 配置串口参数
UART_HandleTypeDef huart1;
huart1.Instance = USART1;                      // 串口实例
huart1.Init.BaudRate = 115200;                 // 波特率
huart1.Init.WordLength = UART_WORDLENGTH_8B;   // 8位数据
huart1.Init.StopBits = UART_STOPBITS_1;        // 1位停止位
huart1.Init.Parity = UART_PARITY_NONE;         // 无校验
huart1.Init.Mode = UART_MODE_TX_RX;            // 发送+接收模式
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;   // 无硬件流控
HAL_UART_Init(&huart1);                        // 初始化串口

2. 发送数据

使用HAL库发送函数:

// 定义待发送数据
uint8_t txData[] = "Hello STM32!\r\n";  // 字符串(含回车换行)

// 阻塞式发送(等待发送完成)
HAL_UART_Transmit(&huart1, txData, sizeof(txData)-1, HAL_MAX_DELAY);

3. 其他发送方式


4. 关键点


完整示例代码

#include "stm32f4xx_hal.h"

UART_HandleTypeDef huart1;

void UART_Init() {
  // 时钟使能
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_USART1_CLK_ENABLE();

  // GPIO配置
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // 串口参数配置
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  HAL_UART_Init(&huart1);
}

int main(void) {
  HAL_Init();
  UART_Init();

  uint8_t message[] = "串口发送测试\r\n";
  while (1) {
    HAL_UART_Transmit(&huart1, message, sizeof(message)-1, 100); // 100ms超时
    HAL_Delay(1000); // 每秒发送一次
  }
}

注意:实际开发中需配置系统时钟(如SystemClock_Config()),以上代码聚焦串口发送逻辑。

利用Simulink自动生成STM32串口代码

功能:利用Simulink自动生成STM32串口代码,在Keil中编译后直接下载到主芯片,实现串口通讯的功能。

2023-10-25 17:04:40

STM32串口通信简明知识

STM32串口通信简明知识

2023-10-25 15:48:39

STM32串口发送数据和接收数据方式总结

STM32串口发送数据和接收数据方式总结

2023-09-19 09:14:52

STM32串口1通讯实验程序下载

STM32串口1通讯实验程序下载

资料下载 郑兵 2021-12-30 10:34:29

STM32串口的介绍与使用(原理、结构体、发送字符、printf函数重定向)

串口相关知识1.定义2.通信概念3.USART简介串口的结构体串口

资料下载 佚名 2021-12-24 19:08:39

stm32串口

DMA发送缓存区bsp_usart.cbsp_usart.hisr.c基于stm32f103zet6串口

资料下载 h1654155957.9921 2021-12-24 18:55:26

STM32踩坑:STM32串口发送乱码问题

STM32串口发送乱码问题小编是一个嵌入式初学者,才学没多久,将近两个月的样子,在学习过程中遇到了一些问题,在这里给大家分享一下解决方案。今天要

资料下载 佚名 2021-12-24 18:40:18

STM32CUBEMX配置教程(八)STM32串口轮询发送中断接收+重定义+优化

STM32CUBEMX配置教程(八)STM32串口轮询收发+重定义基于

资料下载 贾大林 2021-11-19 13:36:10

一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

2023-09-18 10:58:44

STM32串口发送字符出现乱码怎么解决?

STM32串口发送字符串出现乱码怎么解决?

2022-02-18 06:58:58

STM32串口发送数据与接收数据浅析

STM32串口发送数据最直接的方式是什么呢?STM32

2022-02-18 06:09:52

stm32串口如何发送数据?

stm32串口如何发送数据?

2021-12-13 07:51:46

stm32串口接收和串口发送的实现过程是怎样的

嵌入式的底层是如何实现的?stm32串口接收和串口发送的实现过程是怎样的

2021-12-07 07:06:12

STM32串口数据发送该如何去实现呢

如何对STM32串口通信进行配置呢?STM32串口数据

2021-12-07 06:01:02

通过STM32串口向PC串口软件不停的发送数据怎么终止接收?

想通过STM32串口向PC串口软件不停的发送数据,当不

2020-03-20 04:35:06
7天热门专题 换一换
相关标签