0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32CUBEIDE(8)----USART通过DMA收发

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2022-11-29 10:48 次阅读

概述

本章STM32CUBEMX配置STM32F103,测试串口发送接收函数。 最近在弄ST和GD的课程,需要样片的可以加群申请:615061293。

生成例程

使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板

在这里插入图片描述

查看原理图,PA2和PA3设置为开发板的串口。

在这里插入图片描述

配置串口。

在这里插入图片描述

开启中断。

在这里插入图片描述

开启DMA读取和接收。 其中Word = 32bit,Half word = 16bit,Byte = 8bit

在这里插入图片描述

STM32CUBEIDE配置

在这里插入图片描述

若需要打印浮点型,需要勾选下面的选项。

在这里插入图片描述

串口重定向

在main.c中,添加头文件,若不添加会出现 identifier "FILE" is undefined报错。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函数声明和串口重定向:

/* USER CODE BEGIN PFP */
#ifdef __GNUC__                                    //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif 
PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart2 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END PFP */

串口发送接收函数

一般情况下,串口发送接收函数有如下所示。

● HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制。

● HAL_UART_Receive();串口轮询模式接收,使用超时管理机制。

● HAL_UART_Transmit_IT();串口中断模式发送

● HAL_UART_Receive_IT();串口中断模式接收

● HAL_UART_Transmit_DMA();串口DMA模式发送

● HAL_UART_Receive_DMA();串口DMA模式接收

HAL_UART_Transmit_DMA()发送

测试代码如下。 定义需要发送的数据。

/* USER CODE BEGIN PV */
uint8_t TxData[] = "

**** Hello,World!' ***

";
/* USER CODE END PV */

HAL_UART_Transmit_DMA()发送代码。

/* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
      HAL_UART_Transmit_DMA(&huart2, (uint8_t *)TxData, sizeof(TxData)-1);
         HAL_Delay(1000);
  }
  /* USER CODE END 3 */

DMA有normal和circular两种模式。 Normal表单次传输,传输一次后终止传输,所以需要传输几次就需要开启几次,Circular表示循环传输,传输完成后又重新开始继续传输,开启一次后会一直传输。 normal传输打印如下所示,传输完成就关闭。

在这里插入图片描述

circular传输打印如下所示,一直传输,不会停止。

在这里插入图片描述

HAL_UART_Receive_DMA()发送

测试代码如下。 定义需要接受存放数组。

/* USER CODE BEGIN PV */
uint8_t RxData[255];
/* USER CODE END PV */

开启HAL_UART_Receive_DMA()接受代码。

/* USER CODE BEGIN 2 */
  HAL_UART_Receive_DMA(&huart2, RxData, 10);    // 这里加这个函数,接收数据
  /* USER CODE END 2 */

重写读取回调函数,将接受的数据发送出去在开启接收。

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

    HAL_UART_Transmit(&huart2, (uint8_t *)"text:", 5,0xffff);//轮询发送,不然可能发送不出去
    HAL_UART_Transmit_DMA(&huart2, (uint8_t *)RxData, 10);//发送接受的数据
    HAL_UART_Receive_DMA(&huart2, RxData, 10);    // 这里加这个函数,接收数据
}

/* USER CODE END 4 */

DMA有normal和circular两种模式。 Normal表单次接收,接收一次后终止接收,所以需要接收几次就需要开启几次,Circular表示循环接收,接收完成后又重新头开始继续接收,开启一次后会一直接收。 normal传输打印如下所示,传输完成就关闭。 演示效果如下所示。

在这里插入图片描述

circular接收打印如下所示,当发送数据大于接收长度时候,会进行循环接收。

在这里插入图片描述

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10890

    浏览量

    355630
  • 串口
    +关注

    关注

    14

    文章

    1550

    浏览量

    76397
  • dma
    dma
    +关注

    关注

    3

    文章

    560

    浏览量

    100529
  • USART
    +关注

    关注

    1

    文章

    195

    浏览量

    30831
  • stm32cubemx
    +关注

    关注

    5

    文章

    283

    浏览量

    14788
收藏 人收藏

    评论

    相关推荐

    STM32CubeIDE软件实现STM32外部中断实例

    本文用STM32CubeIDE软件实现STM32外部中断实例。
    的头像 发表于 08-24 09:09 4351次阅读

    STM32CubeIDE SWV功能介绍

    01 引言 STM32CubeIDE是ST官方推出的集成开发环境,集成了很多STM32的调试与开发工具。本文主要介绍如何使用SWV功能来打印输出。 02 问题描述 客户使用STM32CubeIDE
    的头像 发表于 10-13 14:20 3748次阅读
    <b class='flag-5'>STM32CubeIDE</b> SWV功能介绍

    Ubuntu 18.04 安装 STM32CubeIDE 小记

    Ubuntu 18.04 安装 STM32CubeIDE 小记
    发表于 11-18 17:36 9次下载
    Ubuntu 18.04 安装 <b class='flag-5'>STM32CubeIDE</b> 小记

    STM32CubeIDE使用

    参考STM32CubeIDE属于一站式工具,本文带你体验它的强大第一个STM32CubeIDE项目STM32CubeIDE使用记录STM32CubeIDE使用笔记(03):使用ST-L
    发表于 12-02 17:21 29次下载
    <b class='flag-5'>STM32CubeIDE</b>使用

    STM32CubeIDE初识

    STM32CubeIDE初识
    发表于 12-02 18:36 23次下载
    <b class='flag-5'>STM32CubeIDE</b>初识

    STM32CubeIDE安装-NSIS Error问题

    STM32CubeIDE安装-NSIS Error问题
    发表于 12-03 21:06 18次下载
    <b class='flag-5'>STM32CubeIDE</b>安装-NSIS Error问题

    STM32CubeIDE的MCU开发

    以前做stm32嵌入式开发均使用的是破解版的keil软件,现在工作需要无法按照此步骤进行,最近针对ST官方免费软件STM32CubeIDE进行了相关调研工作。1 STM32CubeIDE简介目前主流
    发表于 12-05 12:21 25次下载
    <b class='flag-5'>STM32CubeIDE</b>的MCU开发

    第一个STM32CubeIDE项目

    使用STM32CubeIDE的第一个项目开始第一个项目添加代码今天开始做一个STM32CubeIDE的第一个项目,首先需要说明的:STM32CubeIDE是一个免费的软件开始第一个项目在文件菜单中选
    发表于 12-29 19:29 11次下载
    第一个<b class='flag-5'>STM32CubeIDE</b>项目

    STM32CubeIDE生成的工程

    近日接到一客户需求,其欲在 STM32CubeIDE 中指定堆(Heap)的地址到某一专用的RAM 中。
    的头像 发表于 07-27 09:40 1763次阅读

    STM32CUBEIDE(1)----安装

    STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,以便提供一体化工具体验,并节省安装与开发时间。在通过所选
    的头像 发表于 11-22 09:52 1280次阅读
    <b class='flag-5'>STM32CUBEIDE</b>(1)----安装

    STM32CubeIDE安装指南

    电子发烧友网站提供《STM32CubeIDE安装指南.pdf》资料免费下载
    发表于 08-01 15:44 6次下载
    <b class='flag-5'>STM32CubeIDE</b>安装指南

    巧用 STM32CubeIDE 之编译警告

    巧用 STM32CubeIDE 之编译警告
    的头像 发表于 10-25 16:33 993次阅读
    巧用 <b class='flag-5'>STM32CubeIDE</b> 之编译警告

    STM32CubeIDE快速入门指南

    电子发烧友网站提供《STM32CubeIDE快速入门指南.pdf》资料免费下载
    发表于 09-19 14:29 22次下载
    <b class='flag-5'>STM32CubeIDE</b>快速入门指南

    关于STM32CubeIDE链接脚本的小问题

    电子发烧友网站提供《关于STM32CubeIDE链接脚本的小问题.pdf》资料免费下载
    发表于 09-20 11:25 0次下载
    关于<b class='flag-5'>STM32CubeIDE</b>链接脚本的小问题

    STM32CubeIDE找不到elf

    STM32CubeIDE是STMicroelectronics公司推出的一款集成开发环境(IDE),用于开发STM32系列微控制器的应用程序。它基于Eclipse开发平台,并集成了ST的驱动程序
    的头像 发表于 01-02 16:32 1763次阅读