搬砖工人(DMA)

本节中,利用DMA将陀螺仪中的数据通过串口2,读取到内存,然后再由串口1通过DMA发送出来。当然了 需要一个老板来控制什么时候开始搬什么时候结束。使用外部中断两个按键,一个控制开始搬,一个控制停止搬。
具体的工作流程,USART2通过DMA读取陀螺仪的数据放置在内存中,然后USART1通过DMA发送出去,按键作为外部中断开控制DMA的使能和不使能。LED显示是否传输,当USART1开始发送数据时,LED灯亮,否则灭。

  1. 监督(LED)
  2. 老板(EXTI)
  3. 搬砖工人(DMA)
  4. 运输(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的使用首先需要知道一下几点:

  1. 时钟
  2. 通道

时钟

对于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-----找个搬砖的搬数据相关推荐

  1. 搬砖:网络数据包解析

    Itsad 网络数据包解析 TCP/IP协议数据包,一般由应用层.传输层.网络层.数据链路层封装而成. 四层协议各自的作用: 数据链路层实现了网卡接口的驱动程序. 网络层实现了数据包的选路和转发. 传 ...

  2. steam搬砖,长期稳定副业,附防坑指南助你不掉坑

    大家伙,我是阿阳 今天给大家拆解一个冷门项目,国外steam游戏搬砖项目,这个项目也是自己正在做的第二个项目,虽然冷门,不暴利,做了这么久赚钱一直很稳定.站在一个搞钱人的角度来说,这个项目作为一个长期 ...

  3. steam搬砖项目全面讲解,月入8000+

    哈喽大家好,我是阿阳 今天给大家分享CSGO搬砖项目,这个是最为稳定利润可观的项目,一个月净赚3万+ 阿阳网络创始人,8年互联网项目实战经验,个人ip打造[玩赚steam,3年买2套房]国外steam ...

  4. 搬砖工php什么意思,我要去搬砖了是什么意思什么梗? 搬砖的几种含义了解一下...

    川北在线核心提示:原标题:我要去搬砖了是什么意思什么梗? 搬砖的几种含义了解一下 网络流行语,是现如今网络时代最常见的一种语言,随着网络使用人数越来越多,网络流行语也变得越来越丰富. 最近,在网上评论 ...

  5. 家用电脑配置_游戏搬砖必看教程,游戏工作室电脑如何配置

    文章只针对新手对电脑硬件配置了解,大佬可直接关闭,电脑如何配置只代表个人观点! 想游戏搬砖赚钱,资金方面也有这个能力的小伙伴可能对手机开那么几个号无法满足,那么今天要说的就是如何利用电脑多开,来达到利 ...

  6. 物理搬砖问题_人物专访|从“搬砖烧炉工”到MIT物理PhD, 很普通、很坚持、很热爱...

    背景介绍 本科学校: 北京大学 专业: 元培学院物理学-凝聚态实验(CME) GPA: 3.86 TOEFL: 113(大三寒假) GRE:162+170+4(大二到大三暑假) GRE sub:990 ...

  7. steam搬砖项目详细拆解教程,steam搬砖长期稳定

    温馨提示:本文共2200字,预计阅读10分钟. 大家好,这里是阿阳 首先声明:本文仅代表本团队观点,不会攻击任何项目方及操作此类项目的团队.(当然我们也在做这个steam搬砖) 近期看到圈子里炒的比较 ...

  8. 陪伴型机器人主场到来:热衷跳舞的波士顿“狗”开始搬砖、Sophia量产恐怖谷效应显现、与人类互动的机器狗来了 | 硅谷速递...

    1969 年,经典漫画<哆啦A梦>在漫画家藤子·F·不二雄的笔下诞生,他创造出了一个随时都能从神奇口袋里掏出道具的猫型机器人形象.在此后的半个世纪,这个专门负责照顾儿童的机器人风靡全球,深 ...

  9. steam搬砖项目(csgo游戏搬砖项目)问题汇总解答

    关于steam游戏搬砖项目(csgo游戏搬砖项目)最近咨询的人不少,针对大家平时问到的问题,我在这里做一个统一汇总和解答. 1.什么是国外steam游戏装备汇率差项目? 通俗易懂的理解就是,从国外st ...

最新文章

  1. VS2010实现opencv基于DCT的图像压缩
  2. 4、表单和高级选择器
  3. Generator函数自执行
  4. Vue自定义指令原来这么简单
  5. Socket编程小结
  6. php验证返回值,php接口返回数据 用echo 还是return?
  7. [高精度整数] N的阶乘 [2006年清华大学计算机研究生机试真题]
  8. python数组切片赋值_基于numpy中数组元素的切片复制方法
  9. Android-怎么配置ADT配置了没有安卓图标怎么办
  10. Cocos2dx之UI组件
  11. Android studio 解决Gradle下载缓慢的问题
  12. 个人网站设计作品html,经典网页设计:25个优秀的个人网站设计欣赏_html/css_WEB-ITnose...
  13. (三)Android系统启动流程
  14. iphone 中的键盘切换产生的屏幕大小问题
  15. 【Android】 calculator计算器
  16. KSO-2022年2月份PYPL编程语言排行榜
  17. android文本自动添加图片,Android textView文字添加图片 imageSpan使用
  18. Java 抛出异常【throw】
  19. python简笔画程序_只用C++和Python,让你的简笔画实时动起来!
  20. Linux命令——bash

热门文章

  1. 作者:宾军志(1976-),男,御数坊(北京)科技咨询有限公司联合创始人。...
  2. 《大数据》2015年第3期“网络大数据专题”——基于特征学习的文本大数据内容理解及其发展趋势...
  3. 【大数据】大数据的特点
  4. 《布莱克智讯之声》公众号文章汇总
  5. Confluence 6 从其他备份中恢复数据
  6. 防火防盗竟防不了网络攻击智能摄像机的网络安全怎么办?
  7. 想学习java,如果学不会java怎么办?
  8. hdu3689(kmp+dp)
  9. Cognitive Security的异常检测技术
  10. 黄聪:ThinkSAAS开发文档 常用函数 模版修改