将数据处理移植到STM32上,采用串口的DMA接收模式,注意的是DMA_MODE采用Circular,DMA_BufferSize>(8*512+36=4132)(小包8个字节,每秒512个,完整的大包36个字节)

代码如下:

  1. void usart_init()
  2. {
  3. //声明结构体//
  4. GPIO_InitTypeDef GPIO_InitStructure;
  5. USART_InitTypeDef USART_InitStructure;
  6.  
  7. //时钟打开//
  8. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  9. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  10. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  11. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//DMA1时钟
  12.  
  13. //GPIO配置//
  14. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
  15. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  16. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  17. GPIO_Init(GPIOA,&GPIO_InitStructure);
  18. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
  19. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  20. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  21. GPIO_Init(GPIOA,&GPIO_InitStructure);
  22.  
  23. //USART配置//
  24. USART_InitStructure.USART_BaudRate=;
  25. USART_InitStructure.USART_WordLength=USART_WordLength_8b;//传送数据长度
  26. USART_InitStructure.USART_StopBits=USART_StopBits_1;//停止位长度
  27. USART_InitStructure.USART_Parity=USART_Parity_No;//校检
  28. USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流DMA
  29. USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//接受发送
  30. USART_Init(USART1,&USART_InitStructure);
  31. USART_Cmd(USART1,ENABLE);
  32. }
  33. //DMA接收//
  34. void USART1_DMA_Recv(void)
  35. {
  36.  
  37. DMA_InitTypeDef DMA_InitStructure;
  38. NVIC_InitTypeDef NVIC_InitStructure;
  39.  
  40. DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&(USART1->DR);//外设基地址
  41. DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&buffer;//内存基地址
  42. DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//SRC作为数据传送的来源
  43. DMA_InitStructure.DMA_BufferSize=;//数据传输长度!!!!!!
  44. DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址不自增
  45. DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//内存地址自增
  46. DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;//外设数据单位字节
  47. DMA_InitStructure.DMA_MemoryDataSize=DMA_PeripheralDataSize_Byte;//内出数据单位
  48. DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//传输模式!!!!!
  49. DMA_InitStructure.DMA_Priority=DMA_Priority_High;//优先级
  50. DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//禁止内存到内存传输
  51. DMA_Init(DMA1_Channel5,&DMA_InitStructure);
  52. DMA_ClearFlag(DMA1_FLAG_TC5);
  53.  
  54. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  55. NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel5_IRQn;
  56. NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  57. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=;
  58. NVIC_InitStructure.NVIC_IRQChannelSubPriority=;
  59. NVIC_Init(&NVIC_InitStructure);
  60.  
  61. DMA_ITConfig(DMA1_Channel5,DMA_IT_TC,ENABLE);//DMA1传送完成产生中断
  62. USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);
  63. DMA_Cmd(DMA1_Channel5,ENABLE);
  64. }
  65.  
  66. void DMA1_Channel5_IRQHandler(void)//中断函数
  67. {
  68. if (DMA_GetITStatus(DMA1_IT_TC5)==)
  69. {
  70. DMA_ClearITPendingBit(DMA1_IT_TC5);
  71. DMA_Cmd(DMA1_Channel5, DISABLE);
  72. flag = ; //将下面的程序放到main的while中,不然运行容易丢包
  73. // for(i=0;i<5000;i++)
  74. // {
  75. // parseByte( buffer[i]);
  76. // }
  77. // DMA_Cmd(DMA1_Channel5,ENABLE);
  78. }
  79. }
  1. 下一节将会讲述当单片机接收到原始数据后,怎样将它处理后得到signalattentionmeditationeeg信号的值

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

基于神念TGAM的脑波小车(2)的更多相关文章

  1. 基于神念TGAM的脑波小车(1)

    作者声明:此博客是作者的毕设心得,拿来分享. 拿到模块,在网上查了一圈,发现基本没什么有用的资料,有也是一些废话,经过我几个月的攻克,现在已初步搞定,分享给大家. 废话不多说,直接步入正题. 这是通过 ...

  2. 基于神念TGAM的脑波小车(4)

    我使用的是HC05和BT06俩个蓝牙模块 1.[AT模式]HC05蓝牙模块的PIO11接VCC,上电后即进入HC05AT指令模式,对于BT06蓝牙直接上电进入AT模式,用USBT06转TTL模块连接到 ...

  3. 基于脑波眼电-语音-APP控制的多功能智能轮椅

    前言:这个项目是在2016-2017完成的,做的很浅显,贴出来与大家分享,希望能有帮助. 摘要 本项目主要是针对脑电信号控制的智能轮椅的设计,脑电控制是智能医疗领域的重要研究方向,旨在帮助行动不便但智 ...

  4. 脑波设备mindwave TGCD接口开发示例

    对于TGCD的开发,神念科技提供的文件包括,头文件thinkgear.h,thinkgear.lib,thinkgear.dll,有这三个文件,在win32下开发就不是什么难事了吧 如果是java语言 ...

  5. 脑波设备mindwave二次开发框架

    神念科技提供的mindwave提供了脑波耳机和相应的游戏,这些游戏你可以通过购买神念科技的mindwave耳机来获取,这里不多作介绍. 我们作为程序员,如果有了相应的创意,也可以通过他们提供的二次开发 ...

  6. 脑波设备mindwave介绍

    脑波,又称之为脑电波,是人大脑发出的电波,非常的微弱,只能通过设备来检测. 人的脑波在不同状态下,会不同,因此可以通过脑波来量化分析人的精神状态. 科学家讲脑电波分为四种,以下为详细解释(摘自百度百科 ...

  7. 脑波设备mindwaveTGC接口示例

    TGC是一个后台应用程序,它负责和脑波设备建立连接,并获取数据,另一方面,它打开了一个端口在监听,让二次开发的应用程序,可以通过socket连接到这个TGC后台程序,获取脑波数据并展示,这种接口适合非 ...

  8. 基于Arduino开发的智能蓝牙小车

    基于Arduino的智能蓝牙小车 材料准备: Arduino开发板一块.四驱小车底板及相关配件一套.L298N驱动模块一个.HC-05/06蓝牙模块一块,九伏电源一块(用于主板供电).12V锂电池一块 ...

  9. 基于pcDuino-V2的无线视频智能小车

    这段时间抽空做了个智能视频小车.包含了pid电机控制.socket网络编程.多线程编程.epoll机制.gtk图形界面编程. 这是界面: 小车的底层是用的stm32f405系列的单片机+电机驱动做的一 ...

随机推荐

  1. JavaScript中烧脑的&&和||

    在js中经常能看到以下的写法: var obj1 = a || b || c; var obj2 = a && b && c; 刚看到时,很容易认为返回的两个变量都是 ...

  2. Kubernetes中的资源调度与资源管理

    一.scheduling:把pod放到node上 1.最小调度单元:pod 2.1.8的版本后,最大支持5000个node 3.scheduling由两个部分组成: 3.1 Predicates:过滤 ...

  3. HBase学习之路 (三)HBase集群Shell操作

    进入HBase命令行 在你安装的随意台服务器节点上,执行命令:hbase shell,会进入到你的 hbase shell 客 户端 [hadoop@hadoop1 ~]$ hbase shell S ...

  4. 利用Zookeeper实现分布式锁及服务注册中心

    对于Zookeeper的定义以及原理,网上已经有很多的优秀文章对其进行了详细的介绍,所以本文不再进行这方面的阐述. 本文主要介绍一些基本的准备工作以及zookeeper.net的使用. 本文源代码gi ...

  5. HDU 1754 I Hate It(线段树之单点更新 区间最值查询)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. 【原型图】Mockplus

    Mockplus   原型设计工具

  7. Redis简介和常见的面试题

    redis介绍及特点 Redis是由意大利人Salvatore Sanfilippo开发的一款内存内存高速缓存数据库. Reids全称为:Remote Dictionary Server(远程数据服务 ...

  8. lua函数定义

    FuncState proto结构数组保存函数原型信息;prev保存父函数体指针:actvar保存定义的局部变量:upvalues保存upvalue Lua源码中,专门有一个结构体FuncState用 ...

  9. zookeeper入门实例

    package org.merit.test.zookeepertest; import java.io.IOException;import java.util.List;import java.u ...

  10. 2017-2018-1 20155214 《信息安全系统设计基础》 第9周课下测试-mypwd

    2017-2018-1 20155214 <信息安全系统设计基础> 第9周课下测试-mypwd(深入版) 题目要求: 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; ...