STM32HAL库DMA模式串口收发

最新更新时间:2022-01-11来源: eefocus关键字:STM32  HAL库  DMA模式  串口收发 手机看文章 扫描二维码
随时随地手机看文章

一.简单了解

串口模式实现有三种

1.普通模式:在主函数中接收函数

2.中断模式:产生的不影响主程序运行

3. DMA模式:与主函数互不影响,独立运行

本文记录第一种普通模式。

学习目标是:实现DMA串口的数据收发,发送数据时LED灯电平翻转。


二.步骤

1-在原来工程基础上,在stm32cubemx中增加dma,usart1中的DMA Settings,ADD

USART1_RX循环接收和USART1_TX单次发送

2-添加MDA宏定义代码


#define UART1_DMA

uint8_t TdataDMA[]={"welcome to uart DMA!rn"};

uint8_t Rdata;


3-在主函数添加


#ifdef UART1_DMA

HAL_UART_Transmit_DMA(&huart1,TdataDMA,sizeof(TdataDMA));

HAL_UART_Receive_DMA(&huart1,&Rdata,1);

while(1)

{

#ifdef UART1_DMA

HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);

printf("WELCOME TO DMA test!rn");

HAL_Delay(2000);

#endif

}


4-回调函数添加


//回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{


#ifdef UART1_DMA

//把接收到的数据发送回屏幕,发送函数要在接收函数前面

HAL_UART_Transmit(&huart1,&Rdata,1,0xff);

HAL_UART_Receive_DMA(&huart1,&Rdata,1);

#endif

}


三.总结

DMA的优先级别过高,使用HAL_UART_Transmit_DMA可能数据还没接收完成的时候就被发送出去,所以采用普通发送,DMA接收,这样就不会漏发接收到的数据,所以在中断回调中使用了HAL_UART_Transmit(&huart1,&Rdata,1,0xff);

关键字:STM32  HAL库  DMA模式  串口收发 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic558199.html

上一篇:STM32HAL库使用DAC输出任意指定电压
下一篇:STM32HAL库中断模式串口收发

推荐阅读

STM32字符串打印
源码xxx.cvoid UART_PutChar(USART_TypeDef* USARTx, uint8_t ch){ while((USARTx->SR&0X40)==0);//循环发送,直到发送完毕 USARTx->DR = (ch & (uint16_t)0x01FF); }void printf_uart(USART_TypeDef* USARTx, uint8_t *str){ while (*str != '' ) { UART_PutChar(USARTx, *str); str++; }}头文件定义xxx.hvoid UART_PutChar(USART_TypeDef* USAR
发表于 2022-09-30
stm32——端口重映射
我们先来看什么是复用功能?我们在《stm32f103rc_datasheet.pdf》中可以看到对I/O口的功能描述表格比如:PC10 I/O口,UART4_TX与SDIO_D2功能都是PC10 I/O口的复用功能。也就是说,PC10 I/O口不仅仅只能进行由内核控制的输入/输出功能,还可以进行由片上外设控制的UART4_TX与SDIO_D2功能。注意:UART4_TX与SDIO_D2功能是来自不同模块的功能。当我们使用复用功能UART4_TX时,那么PC10 I/O口就由UART外设模块控制,此时PC10 I/O口输入/输出的数据就都来自于UART外设模块了,而不是来自于内核或者其他外设模块。注意:下图中BGA144、BGA100
发表于 2022-09-30
<font color='red'>stm32</font>——端口重映射
STM32外围电路硬件解析
复位电路:复位 :让MCU回到最开始的状态。并且从头开始,重新执行程序 我们什么时候需要复位?1.烧录的时候 2.程序跑飞了的时候3.上电复位(上电的时候需要复位) 复位方式:1.上电复位: --- 一定要有MCU的Reset是复位引脚,当这个引脚为低电平时,单片机会产生复位。 2. 按键复位:--- 可有可无(看需求)K10按下,产生复位动作这是阻容复位电路。当复位引脚低电平的时候复位。当上电的瞬间,C13电容开始充电,电容处于短路状态,电容上面的电压为低电平,此时MCU复位引脚被拉低,MCU执行复位,这样就实现了上电的时候复位功能了。实际上,单片机内部也有上电复位电路,那么我们之所以还要在单片机外部加上复位
发表于 2022-09-30
<font color='red'>STM32</font>外围电路硬件解析
STM32中 一些类型的别名
typedef signed char int8_t;typedef signed short int int16_t;typedef signed int int32_t;typedef signed __INT64 int64_t; /* exact-width unsigned integer types */typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef int uint32_t;typedef unsigned __INT64 uint64_t; /* 7.18.1.2 */ /* smal
发表于 2022-09-29
STM32+超声波
1.初始化IO口void HC_SR04Init(void){GPIO_InitTypeDef GPIOInit;TIM_TimeBaseInitTypeDef TIMInit; NVIC_InitTypeDef NVICInit;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //负责发送高电平PB11GPIOInit.GPIO_Mode = GPIO_Mode_Out_PP
发表于 2022-09-28
STM32+AS608指纹模块
前言:这个串口逻辑有点问题,要是用串口做命令输入端的话要自己改一下串口逻辑,串口只是调试能不能用指纹模块的功能,后期不需要串口发命令所以没怎么写串口的命令逻辑1.AS608的资料挺全的,就是按照他给的来写命令,基本上看懂会用就行,没必要一个个写太多了2.AS608.c#include <string.h>#include "system.h" #include "usart2.h"#include "as608.h"u32 AS608Addr = 0XFFFFFFFF; //默认//初始化PA6为下拉输入 //读摸出感应状态(触摸感应时输出高电平信号)voi
发表于 2022-09-28
STM32+AS608指纹模块

推荐帖子

怎么让nWave在显示波形的时候显示信号的层次
问个debussy的nWave看波形的问题。我加信号后都没有层次结构的名称啦。都是:signal_name1,signal_name2,signal_name3等等,能不能把它配置到hie_0/signal_name1,hie_0/signal_name2,或是hie_top/.../hie_0/signal_name1等等啊怎么让nWave在显示波形的时候显示信号的层次
eeleader FPGA/CPLD
protel99se教程
求protel99se教程和练习题protel99se教程
zengpeipei PCB设计
PCF8563在电子时钟设计中的应用
本帖最后由paulhyde于2014-9-1509:06编辑PCF8563在电子时钟设计中的应用 PCF8563在电子时钟设计中的应用
hnbcyrnd89 电子竞赛
AD9850模块资料
AD9850模块资料AD9850模块资料
zhuizhuzhe ADI参考电路
ZIGBEE CC2530协议栈跑呼吸灯问题。
在协议栈中我操作定时器1(T1)产生PWM波,避免与定时器3-4系统定时器冲突。在裸机中我用定时器1跑通PWM了的。可是我加载到协议栈貌似遇到很多问题,希望大家跟我给点建议。上图 这个是定时器TI的驱动程序。 这是电脑给协调器串口写数据并通过周期广播出去接收到的信息。这个都是网峰的过程。 这是主要的问题了,我想电脑通过串口发送一个‘2’给协调器再广播到末节点产生呼吸灯的效果。我现在发送一个2出去收到了只是单片机现在卡着一个占空比百分之八十的PWM波,以前用定时器4发送2就卡死
jsxykj1 无线连接
MEMS 压力传感器解决人机界面新痛点
压感的想象空间有多大?Will表示,MEMS压力传感器相对于传统的触控而言,是一种全新的交互方式补充。直观而言,“触摸”是一个动作,“施压”也是一个动作。大脑在手指点击手机屏幕上某个APP时会得到“打开”这一期待,同时大脑也会在你按压某个物品时,会根据按压表面的不同力度而期待不同的结果,而这也就是压力传感器所要实现的作用——准确判断出施加在物体上的力度,并使装置完成大脑的预想。与仅有
btty038 RF/无线
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved