首页 > 其他分享 >STM32标准库串口DMA空闲中断接收

STM32标准库串口DMA空闲中断接收

时间:2024-03-01 21:47:03浏览次数:27  
标签:DMA Usart USART STM32 DMA1 串口 USART1 定义

STM32标准库串口DMA空闲中断接收.md

1.DMA配置(USART配置在USART中已实现,不再重复叙述)

需要使用标准库头文件“stm32f10x_dma.h”

    DMA_InitTypeDef Usart_DMA;//定义DMA结构体
	DMA_DeInit(DMA1_Channel5);//初始化DMA通道
	Usart_DMA.DMA_BufferSize = 256;//定义DMA缓存区大小
	Usart_DMA.DMA_DIR = DMA_DIR_PeripheralSRC;//定义DMA传输方向
	Usart_DMA.DMA_M2M = DMA_M2M_Disable;//定义DMA是否用于内存到内存传输
	Usart_DMA.DMA_MemoryBaseAddr = (uint32_t)usart1Recdata;//定义DMA内存指向地址
	Usart_DMA.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;//定义DMA内存每一帧数据大小
	Usart_DMA.DMA_MemoryInc = DMA_MemoryInc_Enable;//定义DMA内存是否递增
	Usart_DMA.DMA_Mode = DMA_Mode_Normal;//定义DMA传输模式
	Usart_DMA.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->DR);//定义DMA外设地址
	Usart_DMA.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//定义DMA外设每一帧数据大小
	Usart_DMA.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//定义DMA外设是否递增
	Usart_DMA.DMA_Priority = DMA_Priority_High;//定义DMA优先级
	DMA_Init( DMA1_Channel5,&Usart_DMA);//将DMA结构体载入到指定DMA通道
	USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);//使能DMA接收
	DMA_Cmd(DMA1_Channel5,ENABLE);//开启DMA通道

2.DMA空闲中断接收配置

void USART1_IRQHandler(void)
{
	uint8_t temp[256] = {0};
	if(USART_GetITStatus(USART1,USART_IT_IDLE) !=RESET){//检查空闲中断标志量
		DMA_Cmd(DMA1_Channel5,DISABLE);//关闭DMA通道,防止数据丢失
		memcpy(temp,usart1Recdata,256);
		USART_SendString(USART1,temp);
		USART_SendByte(USART1,'\n');
		memset(usart1Recdata,0,sizeof(usart1Recdata));
		memset(temp,0,sizeof(temp));
		USART_ClearITPendingBit(USART1,USART_IT_IDLE);//清除空闲中断标志量
		DMA_SetCurrDataCounter( DMA1_Channel5, 256 );//设置DMA计数器
		DMA_Cmd(DMA1_Channel5,ENABLE);//开启DMA通道
		USART_ReceiveData(USART1);//清除串口中断
	}
}

标签:DMA,Usart,USART,STM32,DMA1,串口,USART1,定义
From: https://www.cnblogs.com/tqht7h/p/18048000

相关文章

  • STM32硬件IIC使用
    STM32硬件IIC使用.md概述虽然STM32的硬件IIC据说有设计缺陷,但是经过我的实践,至少STM32F103的硬件IIC是没问题的。这里给出STM32的硬件IIC的使用以及编程思路。1.STM32硬件IIC引脚在这里给出STM32F103的硬件IIC引脚,方便查阅使用2.STM32硬件IIC使用流程STM32的硬件IIC我认......
  • MediaTek Filogic 系列路由器串口救砖教程
    感谢蝈蝈大佬开发的mtk_uartboot工具,这样就可以随便刷砖了适用系列:MediaTekMT7622、MT7981、MT7986、MT7988SoC1.下载工具地址:https://github.com/981213/mtk_uartboot/releasesWindows用户选择mtk_uartboot-x86_64-pc-windows-msvc.zipLinux用户选择mtk_uartboot-......
  • 【STM32】使用Keil5加载程序时出现No Target Connected错误的解决办法
    错误情况加载程序时弹出Notargetconnected的Error框,随后弹出Flashdownloadfailed-TargetDLLhasbeencancelled。此时打开设置中Debug选项的Setting窗口,显示SWDIO中Notargetconnected解决办法检查设置里的Debug选项里的调试器型号有没有选对,如下图所示,我用的是S......
  • STM32F10X 部分引脚不能使用的问题
    一、概述说来惭愧,我到现在都没有完整的学习过STM32。接触STM32还是突然的一个项目,需要用到STM32,紧急需求,只能边学边完成。不过好在ST的资料还是比较多的,相对也比较简单,基本上的需求都能找到对应的demo,或者直接使用STM32CubeMX生成代码,最后在稍微改改,写一下自己的逻辑,就能......
  • CEIWEI CommMonitor 串口监控精灵v12.7 串口过滤;串口监控
    CEIWEICommMonitor串口监控精灵是用于RS232、RS422串口协议、ModbusRTU/ASCII协议过滤监控抓包的专业工具软件程序。CEIWEICommMonitor监控记录和分析系统中的所有串口活动,并不占用串行端口;追踪应用程序或驱动程序开发,串口设备测试和优化等过程中可能出现的问题的理想工具......
  • ubuntu串口重命名(串口绑定)
    不同方法在于rules文件的编写。rules文件编写方法一:针对不同转换芯片在未插入和插入USB设备时,分别通过lsusb命令查看所连接的USB设备。可以看出硬件ID为"1b3f:8301"在/etc/udev/rules.d中创建.rules文件,比如我的是my.rules,输入以下内容:KERNEL=="ttyUSB*",ATTRS{idVe......
  • STM32——CAN通讯
    STM32-CAN通讯一、发送和接收流程can通讯传输的是一种差分信号,关于具体的硬件电路略。1、发送流程前置工作:如时钟的开启、引脚的配置;CAN邮箱和模式等配置参考下面或HAL库选择选择一个空置的邮箱(判断空置:CAN_TSR的TMEx位);在这个空置邮箱中按数据帧格式设置ID、数据长度......
  • Linux使用命令行编译并用st-link烧录STM32
    创建工程在STM32CubeMX中配置,选择Makefile并生成。环境安装编译工程需要用到arm-none-eabi,去官网下载对应系统版本,下载后解压到任意位置。添加环境变量添加环境变量到.bashrc文件:echo'exportPATH="/toolchain/arm-none-eabi/bin:$PATH"'>>~/.bashrc我解压的位置为/too......
  • 基于VsCode platformio的stm32开发环境搭建
    基于VsCodeplatformio的stm32开发环境搭建背景VsCode作为当下流行的编辑器,且不单单是一个编辑器里面集成了很多插件,使用这些插件可以完成很多功能。STM32开发环境除了KEIL与IAR,其实还有很多其他的开方方式,ST官方提供了很多的开发软件,基于Eclipse也可以搭建一套,使用VsCode配合......
  • 基于STM32F407MAC与DP83848实现以太网通讯四(STM32F407MAC数据收发与DMA描述符)
    上一章实现的MAC数据包的基础收发功能,但是只是简单的操作了ETH外设的收发包函数并没有深入了解其中的原理逻辑,本章结合STM32F40x文档与STM32F4x7_ETH_Driver驱动库了解MAC的收发包流程。一、描述符列表 在创建描述符列表之前先了解描述符列表的定义,描述符就软件来说就是一个结......