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 }

STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送的更多相关文章

  1. STM32 串口DMA方式接收(转)

    STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ...

  2. STM32串口DMA超时接收方法,可大大节约CPU时间

    //超时时间定义#define        UART1_TimeoutComp 2  //20ms#define        UART2_TimeoutComp 10  //100ms#defin ...

  3. STM32之串口DMA接收不定长数据

    STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口 ...

  4. STM32 串口功能 库函数 详解和DMA 串口高级运用(转载)

    数据传输时要从支持那些相关的标准?传输的速度?什么时候开始?什么时候结束?传输的内容?怎样防止通信出错?数据量大的时候怎么弄?硬件怎么连接出发,当然对于stm32还要熟悉库函数的功能 具起来rs232 ...

  5. STM32 HAL库利用DMA实现串口不定长度接收方法

    参考:https://blog.csdn.net/u014470361/article/details/79206352 我这里使用的芯片是 F1 系列的,主要是利用 DMA 数据传输方式实现的,在配 ...

  6. STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收

    参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeM ...

  7. STM32串口DMA接收数据错位——暴力解决方法

    背景:两片STM32通过串口通信,为了减小CPU负担,采用DMA进行通信,发送端为STM32F103C8T6,接收端为STM32F407VET6.在调试的过程中发现,一直出现数据错位的问题,接收端尝试 ...

  8. STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率

    前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时 ...

  9. STM32——DMA接收和发送的实现

    最近写程序,需要一段一段数据的接收,再通过其他串口发送出去. 老司机们建议用DMA通信,以节约CPU资源.然后,我听了,发现挺好用的.特此,把自己写的代码贴上了. DMA发送接收的步骤如下: 1.初始 ...

  10. Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6

     实现的功能: 使用MDA方式把串口接受的数据在发送给串口(当然也可以做其他解析控制使用) 1. 先初始化 时钟使用外部的晶振配置系统时钟为48Mhz 2. 串口参数配置 3. 使能中断 4. 配置串 ...

随机推荐

  1. zabbix6.0安装

    一.简述 zabbix6.0 对相关软件版本要求较高,需要php7.25以上php8.0以下版本支持,若使用mysql数据库,其最低要求为mysql8.0,本此搭建采用的是使用较广的lnmp架构 za ...

  2. Vscode连接gitee远程仓库

    Git初始化项目 1. Git的基础配置 Git的安装配置 下载地址为:http://git-scm.com/downloads 安装完第一步要做的是,设置你的用户名和邮件地址. git config ...

  3. 【Devexpres】spreadsheetControl自动列宽

    Worksheet worksheet = this.spreadsheetControl1.ActiveWorksheet; worksheet.Import(datatable, true, 0, ...

  4. Day24:static关键字

    static static关键字是静态的意思,可以修饰成员方法.属性. static修饰的特点: 被类的所有对象共享 可以通过类名调用,也可以通过对象名调用:推荐使用类名调用! public clas ...

  5. python安装dlib库报错

    问题描述 我是debain 系的linux系统没遇到这个问题,在centos系统遇到的 Collecting dlib Downloading http://mirrors.cloud.aliyunc ...

  6. Navicat mysql创建数据库、用户、授权、连接

    一.数据库的创建 调出命令窗口并创建数据库: create database itcast_oa default character set utf8;----创建数据库 二.数案件用户 create ...

  7. 漫谈计算机网络:网络层 ------ 重点:IP协议与互联网路由选择协议

    面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...

  8. 【实时数仓】Day02-DWD、DIM层数据准备:各层职能、行为日志DWD层、业务日志DWD层及分流(Phoenix和HBASE)

    一.需求分析及实现思路 1.分层需求 建立数仓目的:增加数据计算的复用性 可以从半成品继续加工而成 从kafka的ODS层(数据一开始就读到了kafka)读用户行为数据和业务数据,并写回到kafka的 ...

  9. python安装清华源

    pip install pip -Upip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple# "pi ...

  10. Go语言性能剖析利器--pprof实战

    作者:耿宗杰 前言 关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程. 优化思路 首先说一下性能 ...