avatar

松果工作室

欢迎光临

  • 首页
  • freeRTOS
  • ESP
  • 开发手册
  • 快速笔记
  • 个人收藏
  • 工具
Home [STM32] 1. 串口
文章

[STM32] 1. 串口

Posted 2024-12-21 Updated 2024-12- 22
By YCP
8~11 min read

CubeMX配置

  1. 串口全局中断
  2. DMA 普通配置(Normal Mode/TX RX DMA Request/全字节)

单字接收与buff 接收

注意事项:

  1. 单字接收每接收一个字节触发一次回调。
  2. buff接收是等到空闲才触发回调。
  3. 理论上中断也能做buff接收。
  4. freeRTOS的优先级只能管理 5 - 16级(这里假设freeRTOS和HAL库优先级一样),因此串口中断的优先级只能填 5 以后的。
#include <string.h>
#include "default_task.h"
#include "main.h"
#include "syscfg.h"
#include "FreeRTOS.h"
#include "task.h"
#include "usart.h"
#include "semphr.h"

uint8_t recv_buff[255];
uint8_t recv_data = 0;
extern DMA_HandleTypeDef hdma_usart2_rx;
extern DMA_HandleTypeDef hdma_usart2_tx;
extern SemaphoreHandle_t xBinarySemaphore;

void recv_task(void *pt){
    HAL_UARTEx_ReceiveToIdle_DMA(&huart2, recv_buff, sizeof(recv_buff));
    //HAL_UART_Receive_IT(&huart2, &recv_data, 1);
    for(;;){
        if(xSemaphoreTake(xBinarySemaphore, portMAX_DELAY)) {
            LOGI("%s\r\n",recv_buff);
            memset(recv_buff,0,sizeof(recv_buff));
        }
    }
}

BaseType_t xHigherPriorityTaskWoken = pdFALSE;
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {
    if (huart->Instance == USART2) {
        uint8_t size = sizeof(recv_buff) - __HAL_DMA_GET_COUNTER(&hdma_usart2_rx);
        //HAL_UART_Transmit_DMA(&huart2, recv_buff, size);

        xSemaphoreGiveFromISR(xBinarySemaphore, &xHigherPriorityTaskWoken);
        if (xHigherPriorityTaskWoken == pdTRUE) {
            portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
        }

        HAL_UARTEx_ReceiveToIdle_DMA(&huart2, recv_buff, sizeof(recv_buff));
    }
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
    if(huart == &huart2){
        HAL_UART_Transmit(&huart2, &recv_data, 1,999);
        HAL_UART_Receive_IT(&huart2, &recv_data, 1);
    }
}


STM
License:  CC BY 4.0
Share

Further Reading

OLDER

ESP32(六) ESP-IDF Simple POST/GET

NEWER

[STM32] 2.PWM DMA

Recently Updated

  • ESP32(八) 简单的webserver
  • ESP32(七) NVS
  • ESP32(四) STA & AP
  • 多级菜单
  • ESP32(五) ESP32 OTA

Trending Tags

WCH Linux Elec freeRTOS STM ESP Flutter Others SwiftUI

Contents

©2025 松果工作室. Some rights reserved.

Using the Halo theme Chirpy