STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送
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发送的更多相关文章
- STM32 串口DMA方式接收(转)
STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ...
- STM32串口DMA超时接收方法,可大大节约CPU时间
//超时时间定义#define UART1_TimeoutComp 2 //20ms#define UART2_TimeoutComp 10 //100ms#defin ...
- STM32之串口DMA接收不定长数据
STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口 ...
- STM32 串口功能 库函数 详解和DMA 串口高级运用(转载)
数据传输时要从支持那些相关的标准?传输的速度?什么时候开始?什么时候结束?传输的内容?怎样防止通信出错?数据量大的时候怎么弄?硬件怎么连接出发,当然对于stm32还要熟悉库函数的功能 具起来rs232 ...
- STM32 HAL库利用DMA实现串口不定长度接收方法
参考:https://blog.csdn.net/u014470361/article/details/79206352 我这里使用的芯片是 F1 系列的,主要是利用 DMA 数据传输方式实现的,在配 ...
- STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收
参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeM ...
- STM32串口DMA接收数据错位——暴力解决方法
背景:两片STM32通过串口通信,为了减小CPU负担,采用DMA进行通信,发送端为STM32F103C8T6,接收端为STM32F407VET6.在调试的过程中发现,一直出现数据错位的问题,接收端尝试 ...
- STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率
前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时 ...
- STM32——DMA接收和发送的实现
最近写程序,需要一段一段数据的接收,再通过其他串口发送出去. 老司机们建议用DMA通信,以节约CPU资源.然后,我听了,发现挺好用的.特此,把自己写的代码贴上了. DMA发送接收的步骤如下: 1.初始 ...
- Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
实现的功能: 使用MDA方式把串口接受的数据在发送给串口(当然也可以做其他解析控制使用) 1. 先初始化 时钟使用外部的晶振配置系统时钟为48Mhz 2. 串口参数配置 3. 使能中断 4. 配置串 ...
随机推荐
- Reversal
# 35. Reversal- 出题人:OJ- 标签:["String"]- 难度:简单- 总分数:100## 题目描述<p>输入一个英文句子,句子包含若干个单词,每个 ...
- AR路由器如何配置Portal认证(二层网络)
规格 适用于所有版本.所有形态的AR路由器. 说明: 4GE-2S.4ES2G-S.4ES2GP-S和9ES2单板不支持NAC功能. 组网需求 如图所示,某公司接待室需要部署一套身份认证系统,对接入网 ...
- Linux中如何开启一个定时任务
Linux的定时任务是基于cron驱动做到的 安装 Ubantu系统下安装crontab 正常情况下需要先执行:apt-get upgrade 进行升级 安装:apt-get install cron ...
- ElasticSearch7.6.1学习笔记-狂神
ElasticSearch:7.6.1 https://gitee.com/yujie.louis/elastic-search 笔记,代码,安装包等 什么是ElasticSearch? Elasti ...
- Java常用开发文档及工具
一.实用工具/网站 1.PHP中文网:https://www.php.cn/ 2.Json工具:http://www.bejson.com/ 3.IT大哥导航:https://itdage.com/ ...
- 【Java SE进阶】Day08 File类、递归
一.File类 1.概述java.io.File 文件和路径的抽象表示 用于文件和目录的创建.查找和删除等 分类 file--文件 directory--文件夹/目录 path--路径 2.静态成员变 ...
- Mybatis-Plus 对 json 的存储使用支持
Mybatis-Plus 对 json 的存储使用支持 场景分析: 随着数据库对字段类型支持的多元化,json 类型的存储已成为多场景高频使用的字段类型.而 MySql.postgrpSql 等都支持 ...
- 微服务组件-----Spring Cloud Alibaba 注册中心Nacos的CP架构Raft协议分析
前言 本篇幅是继 注册中心Nacos源码分析 的下半部分. 意义 [1]虽说大部分我们采用注册中心的时候考虑的都是AP架构,为什么呢?因为性能相对于CP架构来说更高,需要等待的时间更少[相对于CP架 ...
- 基于.NetCore开发博客项目 StarBlog - (24) 统一接口数据返回格式
前言 开发接口,是给客户端(Web前端.App)用的,前面说的RESTFul,是接口的规范,有了统一的接口风格,客户端开发人员在访问后端功能的时候能更快找到需要的接口,能写出可维护性更高的代码. 而接 ...
- 12、HSSFWorkbook实现多张sheet导出
转载自 一.封装一个通用的装载数据的实体类: import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsCon ...