stm31 hal uart
时间: 2023-09-09 22:12:10 浏览: 133
STM32 HAL UART 收发正常
STM32 HAL库中的UART驱动函数主要包含以下内容:
1.初始化UART外设:使用`HAL_UART_Init()`函数初始化UART的波特率、数据位、校验位等参数。
2.发送数据:使用`HAL_UART_Transmit()`函数向UART发送数据,该函数可以阻塞或非阻塞发送。
3.接收数据:使用`HAL_UART_Receive()`函数从UART接收数据,该函数可以阻塞或非阻塞接收。
4.发送和接收中断:使用`HAL_UART_Transmit_IT()`和`HAL_UART_Receive_IT()`函数实现UART中断发送和接收。
5.DMA传输:使用`HAL_UART_Transmit_DMA()`和`HAL_UART_Receive_DMA()`函数实现DMA传输。
下面是一个简单的UART发送和接收示例:
```
#include "stm32f1xx_hal.h"
#include <string.h>
UART_HandleTypeDef huart1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
char txData[] = "Hello, World!\r\n";
HAL_UART_Transmit(&huart1, (uint8_t*)txData, strlen(txData), 1000);
char rxData[20];
HAL_UART_Receive(&huart1, (uint8_t*)rxData, 20, 1000);
HAL_UART_Transmit(&huart1, (uint8_t*)rxData, strlen(rxData), 1000);
while (1)
{
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
static void MX_USART1_UART_Init(void)
{
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_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
```
在此示例中,使用了`HAL_UART_Transmit()`和`HAL_UART_Receive()`函数发送和接收数据。在初始化UART时,设置了波特率为115200,数据位为8位,停止位为1位,无校验位。在发送数据时,使用了阻塞式发送,并在接收数据时使用了阻塞式接收。
阅读全文