stm32HAL串口发送
时间: 2025-01-16 16:38:38 浏览: 26
STM32 HAL UART 发送数据 示例代码
为了实现STM32通过UART接口发送数据,需先初始化串口并设置相应的参数。具体操作可以通过STM32CubeMX工具完成配置,包括开启DMA模式下的发送接收中断以及全局中断功能[^2]。
下面是基于HAL库编写的一个简单例子来展示如何利用DMA方式经由USART外设向PC端传输字符串消息:
#include "main.h"
UART_HandleTypeDef huart1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
int main(void){
/* Reset of all peripherals, Initializes the Flash interface and Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
char *message = "Hello from STM32 via UART with DMA\r\n";
uint8_t message_len = strlen(message);
// Enable DMA request for transmission.
__HAL_UART_ENABLE_DMA(&huart1, UART_DMA_REQUEST_TX);
// Start sending data using DMA transfer.
HAL_UART_Transmit_DMA(&huart1, (uint8_t*)message, message_len);
while(1){}
}
// Initialization function generated by CubeMX tool based on user configuration.
static void MX_USART1_UART_Init(void){
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200; // Set baud rate to 115200 bps
huart1.Init.WordLength = UART_WORDLENGTH_8B;// Use standard byte length
huart1.Init.StopBits = UART_STOPBITS_1; // One stop bit used after each frame
huart1.Init.Parity = UART_PARITY_NONE; // No parity bits included within frames
huart1.Init.Mode = UART_MODE_TX_RX; // Both transmit/receive modes enabled
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;// Hardware flow control disabled here
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK){
Error_Handler(); // If initialization fails, call error handler routine
}
}
上述程序展示了基本的硬件抽象层(HAL)函数调用来启动一次DMA驱动的数据传送过程。这里HAL_UART_Transmit_DMA()
被用于触发DMA控制器自动处理整个缓冲区中的字符序列直到全部发出为止[^4]。
当执行此段代码之后,连接至计算机上的终端仿真软件应该能够接收到“Hello from STM32 via UART with DMA”的问候语句。
相关推荐

















