1 void USART3_Configuration(void) //串口3配置---S
  2 {
  3 DMA_InitTypeDef DMA_InitStructure;
  4 USART_InitTypeDef USART_InitStructure;
  5 GPIO_InitTypeDef GPIO_InitStructure;
  6 NVIC_InitTypeDef NVIC_InitStructure;
  7 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  8 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_DMA2, ENABLE);
  9 //USART1
 10 //TX
 11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
 12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 13 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 14 GPIO_Init(GPIOB, &GPIO_InitStructure);
 15 //RX
 16 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
 17 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
 18 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 19 GPIO_Init(GPIOB, &GPIO_InitStructure);
 20
 21 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&( USART3->DR);
 22 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)_code_rece;
 23 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
 24 DMA_InitStructure.DMA_BufferSize = 4000;
 25 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
 26 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
 27 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //HalfWord
 28 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
 29 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular ; // DMA_Mode_Normal
 30 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA_Priority_Low DMA_Priority_Medium DMA_Priority_High
 31 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
 32 DMA_Init(DMA1_Channel3, &DMA_InitStructure);
 33
 34 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&( USART3->DR);
 35 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)_send_data;
 36 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
 37 DMA_InitStructure.DMA_BufferSize = 14;
 38 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
 39 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
 40 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //HalfWord
 41 DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;
 42 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ; // DMA_Mode_Normal
 43 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA_Priority_Low DMA_Priority_Medium DMA_Priority_High
 44 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
 45 DMA_Init(DMA1_Channel2, &DMA_InitStructure);
 46
 47 USART_OverSampling8Cmd(USART3, ENABLE);
 48 USART_InitStructure.USART_BaudRate = 460800;
 49 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
 50 USART_InitStructure.USART_StopBits = USART_StopBits_1;
 51 USART_InitStructure.USART_Parity = USART_Parity_No;
 52 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
 53 USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
 54 USART_Init(USART3, &USART_InitStructure);
 55
 56 //NVIC 设置,使能中断
 57 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //选择中断分组1
 58
 59 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //选择串口3中断
 60 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占式中断优先级设置为1
 61 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应式中断优先级设置为1
 62 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断
 63 NVIC_Init(&NVIC_InitStructure);
 64 USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);//开启中断
 65
 66 USART_DMACmd(USART3,USART_DMAReq_Rx,ENABLE);
 67 USART_DMACmd(USART3,USART_DMAReq_Tx,ENABLE);
 68 DMA_Cmd(DMA1_Channel3, ENABLE);
 69 USART_Cmd(USART3, ENABLE);
 70 USART3->SR;
 71 USART3->DR;
 72 }
 73
 74 DmaSendDataProc( DMA1_Channel2, 14 );
 75 //开启一次DMA传输
 76 void DmaSendDataProc(DMA_Channel_TypeDef *DMA_Streamx,u16 ndtr)
 77 {
 78
 79 DMA_Cmd(DMA_Streamx, DISABLE); //关闭DMA传输
 80
 81 DMA_SetCurrDataCounter(DMA_Streamx,ndtr); //数据传输量
 82
 83 DMA_Cmd(DMA_Streamx, ENABLE); //开启DMA传输
 84
 85 }
 86 void USART3_IRQHandler(void)    //客户端传来数据
 87 {
 88 if(USART_GetFlagStatus(USART3, USART_FLAG_IDLE)==SET) //RXNE一个字节接收完成标志位,
 89 {
 90 DMA_Cmd(DMA1_Channel3, DISABLE); //关闭DMA输出
 91
 92 usart2_num = 2000 - DMA1_Channel3 ->CNDTR; //获取读到的字节数
 93 //处理数据
 94 DMA1_Channel3->CNDTR = 2000; //重新填充
 95 DMA_Cmd(DMA1_Channel3, ENABLE); //开启DMA传输
 96 }
 97
 98 USART_ClearITPendingBit(USART3, USART_IT_IDLE); //清除接收中断标志位
 99 USART3->SR;
100 USART3->DR;
101
102 }

转载于:https://www.cnblogs.com/penuel/p/11264220.html

STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送相关推荐

  1. STM32F0系列串口DMA收发数据

    关于STM32F0系列串口DMA收发数据详解 这里用的库函数版本,芯片型号为stm32f030c8t6.在用到串口DMA时,要按以下几个步骤进行. 1.确定使用的串口号,这里,我用的是usart2,对 ...

  2. STM32-HAL库串口DMA空闲中断的正确使用方式+解析SBUS信号

    STM32-HAL库串口DMA空闲中断的正确使用方式+解析SBUS信号 一. 问题描述 二. 方法一--使用HAL_UART_Receive_DMA 三. 方法二--使用HAL_UARTEx_Rece ...

  3. STM32F103RBT6 串口1正常接收,发送过程也很正常,但TXD引脚没有波形

    STM32F103RBT6 串口1正常接收,发送过程也很正常,但TXD引脚没有波形,这个程序前几天还是正常工作,百思不得其解.后来找来开发板串口通讯例程对比发现GPIO初始化缺少一句,GPIO_Ini ...

  4. 单片机实验八 RS232串口通信实验(接收与发送)

    实验八 RS232串口通信实验(接收与发送) 一.实验目的 1.熟悉实验软件和硬件,进行正确的接线: 2.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化: 3.使用串口调试助手做为上位机 ...

  5. stm32的串口DMA空闲中断接收不等长数据,stm32F1的usart1-DMA-IDLE收发

    stm32的DMA收发原理,和stm32F4 + USART2 +DMA +IDLE使用,见另一篇:https://blog.csdn.net/Mark_md/article/details/1072 ...

  6. stm32的串口DMA空闲中断接收不等长数据,stm32F4的usart2-DMA-IDLE收发

    1. 串口为什么要使用DMA?好处? 提高系统实时性:stm32单片机的串口没有FIFO,使用字节中断的方式去接收,会频繁进入中断,影响系统实时性.好在stm32的串口可以级联DMA使用,在大数据量连 ...

  7. STM32应用(七)JY901九轴姿态模块(串口DMA空闲中断和I2C通信)

    文章目录 0.相关基础知识介绍 0.1六轴.九轴传感器有什么区别? 1.JY901模块简介 1.1 产品概述 1.2 性能参数 1.3 实物图和接线 2.软件和使用说明书 3.串口通信JY901 3. ...

  8. STM32串口DMA方式接收数据。类似环形FIFO。超省CPU资源!

    本文转自:http://www.amobbs.com/thread-5530588-2-1.html 一直以来都为串口接收数据所困扰: 1:如果用接收中断的话,每接收1byte就得中断一次.这样太消耗 ...

  9. 基于STM32F407标准库串口DMA+空闲中断

    核心板:STM32F407 实验目的:通过DMA接收串口发来的数据,并且利用串口空闲中断在将这些数据发送至串口助手. 在通常我们使用串口接收数据时,会使能串口接收中断,并在每次接收到数据后会进入中断将 ...

最新文章

  1. Finding the Edges (Sobel Operator)
  2. 11月百度面试题(社招)
  3. pycharm 添加数据库驱动
  4. 道路游戏(洛谷 P1070)
  5. 2014年考研英语二作文PartB图表题
  6. Android线程和线程Handler基础一览
  7. cesium 文本标注被遮挡_Cesium-知识点(Viewer)
  8. java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......
  9. visio2016专业版2018最新密钥和下载方法 整理
  10. FANUC服务器维修,FANUC系统401报警维修处理
  11. OpenCV计算图像PSNR峰值信噪比
  12. Mac版 WPS尾部空格没有下划线解决
  13. 联想 计算机无线网络设置方法,联想笔记本无线网络开关,教您联想笔记本无线网络开关...
  14. RecyclerView 删除元素后,点击报 IndexOutOfBoundsException 解决方法
  15. Keil5改黑色炫酷背景
  16. python常见的缩进错误_python常见编译错误:IndentationError缩进错误
  17. Python绘图库:Matplotlib入门教程
  18. 线性代数常用名词详解1
  19. 记Aspose.Word的使用中出现的问题
  20. thinksns的部署

热门文章

  1. windows下把Apache加入系统服务
  2. Linux Shell学习(3)
  3. CodeBlcoks插件
  4. 利用 C++ Interop 封装 ISO C++ 对象, 供其他 .Net 语言使用
  5. 实战struts2——用户登录
  6. Android Support v4、v7、v13 介绍
  7. 底层经典书籍-编译原理
  8. linux中的fg命令
  9. 用NanoPi NEO Air连接USB摄像头
  10. 操作系统-南京大学(蒋岩炎)课程--操作系统上的程序