HAL——串口

2024-01-03 00:25:26

学习目标

  • 熟悉STM32CubeMX配置流程
  • 掌握串口发送和接收
  • 掌握串口DMA发送和DMA接收
  • 掌握printf配置

学习内容

开发流程

  1. 配置芯片串口功能
  2. 编写串口代码
  3. 调试

串口功能配置

串口功能开启

  • Connectivity下选择合适的串口,这里选择USART1
  • 配置模式为异步,Asynchronous
串口中断配置

  • NVIC Settings下,打开串口中断。
串口参数配置

  • Parameter Settings中,根据情况配置串口的参数。
查询配置结果

GPIO Setting中可以显示默认的IO引脚

右侧芯片引脚部分会显示配置的结果。

发送功能测试

main

/* USER CODE BEGIN WHILE */
uint8_t cnt = 0;
while (1)
{
    HAL_UART_Transmit(&huart1, &cnt, 1, HAL_MAX_DELAY);
    cnt++;
    HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
}

通过HAL_UART_Transmit函数发送数据。

中断接收功能测试

/* USER CODE BEGIN WHILE */
HAL_UART_Receive_IT(&huart1, usart1_buffer, USART1_BUFFER_LEN);
while (1)
{
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
/* USER CODE BEGIN 0 */
#define USART1_BUFFER_LEN 1
uint8_t usart1_buffer[USART1_BUFFER_LEN];

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
    HAL_UART_Transmit(&huart1, (const uint8_t *)usart1_buffer, USART1_BUFFER_LEN, HAL_MAX_DELAY);
	// 开启中断接收
    HAL_UART_Receive_IT(&huart1, usart1_buffer, USART1_BUFFER_LEN);
}
/* USER CODE END 0 */

?printf配置

#include <stdio.h>
int fputc(int ch, FILE* f) {
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
	return ch;
}

DMA收发

配置

DMA发送
/* USER CODE BEGIN WHILE */
uint8_t cnt = 0;
while (1)
{
    HAL_UART_Transmit_DMA(&huart1, &cnt, 1);
    cnt++;
    HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
}
DMA接收
#define USART1_BUFFER_LEN 8
uint8_t usart1_buffer[USART1_BUFFER_LEN];

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
    HAL_UART_Transmit_DMA(&huart1, (const uint8_t *)usart1_buffer, USART1_BUFFER_LEN);
    // 开启中断接收
    HAL_UART_Receive_DMA(&huart1, usart1_buffer, USART1_BUFFER_LEN);
}

练习

  1. 使用CubeMX配置串口的收发

文章来源:https://blog.csdn.net/bug_love/article/details/135350371
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。