STM32-----找个搬砖的搬数据
搬砖工人(DMA)
本节中,利用DMA将陀螺仪中的数据通过串口2,读取到内存,然后再由串口1通过DMA发送出来。当然了 需要一个老板来控制什么时候开始搬什么时候结束。使用外部中断两个按键,一个控制开始搬,一个控制停止搬。
具体的工作流程,USART2通过DMA读取陀螺仪的数据放置在内存中,然后USART1通过DMA发送出去,按键作为外部中断开控制DMA的使能和不使能。LED显示是否传输,当USART1开始发送数据时,LED灯亮,否则灭。
- 监督(LED)
- 老板(EXTI)
- 搬砖工人(DMA)
- 运输(USART)
监督(LED)
配置GPIO输出,控制LED的亮和灭,控制部分放在EXTI中断服务程序中。
老板(EXTI)
配置两个按键为外部中断,在中断服务函数中编写相应的控制DMA和LED的程序:
具体如下:
void EXTI1_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line1)==SET){GPIO_ResetBits(GPIOA,GPIO_Pin_8);DMA_Cmd(DMA1_Channel4,ENABLE);EXTI_ClearITPendingBit(EXTI_Line1);}
}void EXTI15_10_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line13) == SET){GPIO_SetBits(GPIOA,GPIO_Pin_8);DMA_Cmd(DMA1_Channel4,DISABLE);EXTI_ClearITPendingBit(EXTI_Line13);}
}
搬砖工人(DMA)
对于DMA通俗点来说,就是配置好从哪里传输到哪里,传输的大小,传输的方式等,然后就不需要CPU再参与数据的传输工作。
对于DMA的使用首先需要知道一下几点:
- 时钟
- 通道
时钟
对于DMA来说是挂载在AHB总线之上,所以开启时钟需要使用下面的方式来进行开启:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
通道
对于不同的外设,对应不同的DMA通道,因此在配置之前需要知道用到的是DMA的那个通道,对于DMA1的通道情况如下:
了解这些之后就是对DMA的相应配置:
/*将数据从内存传输到串口1*/
void USART1_TX_DMA_Configuration(void)
{DMA_InitTypeDef dma_s;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);dma_s.DMA_BufferSize = 10;//传输缓冲区的大小dma_s.DMA_DIR = DMA_DIR_PeripheralDST;//dam传输方向的控制,外设到内存dma_s.DMA_M2M = DMA_M2M_Disable;dma_s.DMA_MemoryBaseAddr = (u32)buff;dma_s.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;dma_s.DMA_MemoryInc = DMA_MemoryInc_Enable;dma_s.DMA_PeripheralBaseAddr = (u32)&USART1->DR;//外设地址dma_s.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;dma_s.DMA_PeripheralInc = DMA_PeripheralInc_Disable;dma_s.DMA_Priority = DMA_Priority_Medium;dma_s.DMA_Mode = DMA_Mode_Circular;DMA_Init(DMA1_Channel4,&dma_s);DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);//开启DMA中断
}
/*将数据从串口2读取到内存*/
void USART2_RX_DMA_Configuration(void)
{DMA_InitTypeDef dma_s;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);dma_s.DMA_BufferSize = 10;dma_s.DMA_DIR = DMA_DIR_PeripheralSRC;dma_s.DMA_M2M = DMA_M2M_Disable;dma_s.DMA_MemoryBaseAddr = (u32)buff;dma_s.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;dma_s.DMA_MemoryInc = DMA_MemoryInc_Enable;dma_s.DMA_Mode = DMA_Mode_Circular;dma_s.DMA_PeripheralBaseAddr = (u32)&USART2->DR;dma_s.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;dma_s.DMA_PeripheralInc = DMA_PeripheralInc_Disable;dma_s.DMA_Priority = DMA_Priority_Medium;DMA_Init(DMA1_Channel6,&dma_s);DMA_ITConfig(DMA1_Channel6,DMA_IT_TC,ENABLE);DMA_Cmd(DMA1_Channel6,ENABLE);
运输(USART)
对于数据的读入和发送还是通过串口来实现的,不过不需要CPU实时参与其中。因此在USART配置的过程中需要对串口额外的配置与DMA相关的东西。具体如下:
void USART1_Config(void)
{USART_InitTypeDef usart_s;usart_s.USART_BaudRate = 9600;usart_s.USART_WordLength = USART_WordLength_8b;usart_s.USART_StopBits = USART_StopBits_1;usart_s.USART_HardwareFlowControl = USART_HardwareFlowControl_None;usart_s.USART_Parity = USART_Parity_No;usart_s.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1,&usart_s);USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);USART_Cmd(USART1,ENABLE);
}
不同于之前串口的配置,在该配置中多了一行USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
。用来开启对应DMA的操作权限。
STM32-----找个搬砖的搬数据相关推荐
- 搬砖:网络数据包解析
Itsad 网络数据包解析 TCP/IP协议数据包,一般由应用层.传输层.网络层.数据链路层封装而成. 四层协议各自的作用: 数据链路层实现了网卡接口的驱动程序. 网络层实现了数据包的选路和转发. 传 ...
- steam搬砖,长期稳定副业,附防坑指南助你不掉坑
大家伙,我是阿阳 今天给大家拆解一个冷门项目,国外steam游戏搬砖项目,这个项目也是自己正在做的第二个项目,虽然冷门,不暴利,做了这么久赚钱一直很稳定.站在一个搞钱人的角度来说,这个项目作为一个长期 ...
- steam搬砖项目全面讲解,月入8000+
哈喽大家好,我是阿阳 今天给大家分享CSGO搬砖项目,这个是最为稳定利润可观的项目,一个月净赚3万+ 阿阳网络创始人,8年互联网项目实战经验,个人ip打造[玩赚steam,3年买2套房]国外steam ...
- 搬砖工php什么意思,我要去搬砖了是什么意思什么梗? 搬砖的几种含义了解一下...
川北在线核心提示:原标题:我要去搬砖了是什么意思什么梗? 搬砖的几种含义了解一下 网络流行语,是现如今网络时代最常见的一种语言,随着网络使用人数越来越多,网络流行语也变得越来越丰富. 最近,在网上评论 ...
- 家用电脑配置_游戏搬砖必看教程,游戏工作室电脑如何配置
文章只针对新手对电脑硬件配置了解,大佬可直接关闭,电脑如何配置只代表个人观点! 想游戏搬砖赚钱,资金方面也有这个能力的小伙伴可能对手机开那么几个号无法满足,那么今天要说的就是如何利用电脑多开,来达到利 ...
- 物理搬砖问题_人物专访|从“搬砖烧炉工”到MIT物理PhD, 很普通、很坚持、很热爱...
背景介绍 本科学校: 北京大学 专业: 元培学院物理学-凝聚态实验(CME) GPA: 3.86 TOEFL: 113(大三寒假) GRE:162+170+4(大二到大三暑假) GRE sub:990 ...
- steam搬砖项目详细拆解教程,steam搬砖长期稳定
温馨提示:本文共2200字,预计阅读10分钟. 大家好,这里是阿阳 首先声明:本文仅代表本团队观点,不会攻击任何项目方及操作此类项目的团队.(当然我们也在做这个steam搬砖) 近期看到圈子里炒的比较 ...
- 陪伴型机器人主场到来:热衷跳舞的波士顿“狗”开始搬砖、Sophia量产恐怖谷效应显现、与人类互动的机器狗来了 | 硅谷速递...
1969 年,经典漫画<哆啦A梦>在漫画家藤子·F·不二雄的笔下诞生,他创造出了一个随时都能从神奇口袋里掏出道具的猫型机器人形象.在此后的半个世纪,这个专门负责照顾儿童的机器人风靡全球,深 ...
- steam搬砖项目(csgo游戏搬砖项目)问题汇总解答
关于steam游戏搬砖项目(csgo游戏搬砖项目)最近咨询的人不少,针对大家平时问到的问题,我在这里做一个统一汇总和解答. 1.什么是国外steam游戏装备汇率差项目? 通俗易懂的理解就是,从国外st ...
最新文章
- VS2010实现opencv基于DCT的图像压缩
- 4、表单和高级选择器
- Generator函数自执行
- Vue自定义指令原来这么简单
- Socket编程小结
- php验证返回值,php接口返回数据 用echo 还是return?
- [高精度整数] N的阶乘 [2006年清华大学计算机研究生机试真题]
- python数组切片赋值_基于numpy中数组元素的切片复制方法
- Android-怎么配置ADT配置了没有安卓图标怎么办
- Cocos2dx之UI组件
- Android studio 解决Gradle下载缓慢的问题
- 个人网站设计作品html,经典网页设计:25个优秀的个人网站设计欣赏_html/css_WEB-ITnose...
- (三)Android系统启动流程
- iphone 中的键盘切换产生的屏幕大小问题
- 【Android】 calculator计算器
- KSO-2022年2月份PYPL编程语言排行榜
- android文本自动添加图片,Android textView文字添加图片 imageSpan使用
- Java 抛出异常【throw】
- python简笔画程序_只用C++和Python,让你的简笔画实时动起来!
- Linux命令——bash
热门文章
- 作者:宾军志(1976-),男,御数坊(北京)科技咨询有限公司联合创始人。...
- 《大数据》2015年第3期“网络大数据专题”——基于特征学习的文本大数据内容理解及其发展趋势...
- 【大数据】大数据的特点
- 《布莱克智讯之声》公众号文章汇总
- Confluence 6 从其他备份中恢复数据
- 防火防盗竟防不了网络攻击智能摄像机的网络安全怎么办?
- 想学习java,如果学不会java怎么办?
- hdu3689(kmp+dp)
- Cognitive Security的异常检测技术
- 黄聪:ThinkSAAS开发文档 常用函数 模版修改