【 MM32 eMiniBoard 】 01. 开箱:板载部分硬件测试 写在前面的话 这一年因为工作需要,开始接触无线通信方面的工作,越来越多的了解和接触到关于无线通信的知识点,也为各种数据通信方式而苦恼。这次无意看到面包板上的 MM32W3 开发板评测活动,被其内置蓝牙模块所吸引,随后申请并有幸被选中为体验者之一,非常激动。 开箱 开箱入眼就是这样一个小板子安静的躺在包装盒内: 拿出板子和卡片,背面如下,我估计这类开发板现在都是这样设计的包装了,正面板子芯片资源介绍,背面产品推广广告。 板子真容如下,背面就不往上放了,相机效果太差。 下面这个按键设计是我比较喜欢的地方,侧边放置,侧面按压,虽然实际使用效果一般,但是这个设计还是很 NICE。 开发板简介(手册搬运) MM32 eMiniBoard 蓝牙开发板,这个板子的名字基本上包含了芯片的一切特点,内核、特色资源(蓝牙)。 MM32 eMiniBoard 蓝牙开 发板具有如下特点: 支持 MindMotion MM32 Cortex-M 系列 MCU 开发评估 支持 Keil uVision v5.0 / IAR EWARM v7.80 以上的集成开发环境 支持 MindMotion MM32 FDS 固件开发平台 支持 MindMotion MM32 Program 编程软件 开发板 MCU 供电电源基于 3.3V 电压设计 支持高达 4KV EFT 抗干扰能力 Insight 系列 MM32 eMiniBoard 开发板用户手册 v0.90 内嵌 MM32-LINK-OB 在线仿真器,支持 SWD 调试接口以及智能连接的 CDC 虚拟串口 仿真器 USB 接口或目标 MCU USB 接口供电 4- 侧贴按键 4-LED 1-UART 连接器 1 无源扬声器 1-USB 连接器 1-16Mbit 的 SPI Flash 存储器 1-2048bit 的 I2C 存储器 1 模拟输入电位器 1 个内置扩展功能和 MCU 引脚功能选择开关与 MCU 管脚相同 ( 部分功能引脚未引出 ) 的 0.1 英寸间距的双排直针插座 芯片简介(手册搬运) MM32W3 系列是超低功耗的单模蓝牙芯片,射频采用 2.4GHz ISM 频段的频率, 2MHz 信道间隔,符合蓝牙规范。 MM32W373PSB 使用高性能的 ARM® Cortex®-M3 为内核的 32 位微控制器,最高工作频率可达 96MHz ,内置高速存储器,丰富的增强型 I/O 端口和外设连接到两条 APB 总线。 灵动微 MM32W373PSB 包含 2 个 12 位 ADC 、 2 个 12 位的 DAC 、 3 个 16 位通用定时器和 1 个 PWM 高级定时器,还包含标准的通信接口: 3 个 UART 接口、 2 个 I2C 接口、 1 个 SPI 接口和 1 个 USB 接口。 MM32W3 产品系列工作电压为 2.3V ~ 3.9V ,工作温度范围包含 -40 ℃ ~ +85 ℃常规型。多种省电工作模式保证低功耗应用的要求。 外设1:LED+KEY 进入正题,板载外设KEY+LED,这部分具体可参考上图KEY特写部分,原理图如下 LED的原理图还好,KEY的图就有点惨不忍睹了,连线混乱,看的我眼花缭乱,半天愣是没看出他的接线方式,上下拉方式我都分不清楚,确实不应该。 调试这个几个KEY真的浪费了点时间,但是还好,经过不懈学习总算搞懂它们了。 部分驱动程序如下: GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN; // 设置按键的引脚为浮空输入 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD; //选择按键的引脚 GPIO_InitStructure.GPIO_Pin = KEY2_GPIO_PIN ; //设置按键的引脚为浮空输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //选择按键的引脚 GPIO_InitStructure.GPIO_Pin = KEY3_GPIO_PIN ; //设置按键的引脚为浮空输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //选择按键的引脚 GPIO_InitStructure.GPIO_Pin = KEY4_GPIO_PIN ; //设置按键的引脚为浮空输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /* * 函数名:Key1_Scan * 描述 :检测是否有按键按下 * 输入 :GPIOx:x 可以是 A,B,C,D或者 E * GPIO_Pin:待读取的端口位 * 输出 :KEY_OFF(没按下按键)、KEY_ON(按下按键) */ uint8_t Key1_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY1_ON ) { /*等待按键释放 */ while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY1_ON); return KEY1_ON; } else return KEY1_OFF; } /* * 函数名:Key_Scan * 描述 :检测是否有按键按下(Key2,Key3,Key4) * 输入 :GPIOx:x 可以是 A,B,C,D或者 E * GPIO_Pin:待读取的端口位 * 输出 :KEY_OFF(没按下按键)、KEY_ON(按下按键) */ uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON ) { /*等待按键释放 */ while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON); return KEY_ON; } else return KEY_OFF; } 这里面自己宏定义的地方比较多,所以.h文件就不贴了,我把程序整理一下,工程直接发出来给大家参考。 这里要解释一下Buzzer这一部分,之所以加在这里是因为前面以为它是有源蜂鸣器,所以直接当LED驱动了。具体看后面蜂鸣器的驱动。 KEY这里主要看一下一脚设置模式和扫描函数就好,比较简单,就不多说了 GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN; // 设置按键的引脚为浮空输入 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD; //选择按键的引脚 GPIO_InitStructure.GPIO_Pin = KEY2_GPIO_PIN ; //设置按键的引脚为浮空输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //选择按键的引脚 GPIO_InitStructure.GPIO_Pin = KEY3_GPIO_PIN ; //设置按键的引脚为浮空输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //选择按键的引脚 GPIO_InitStructure.GPIO_Pin = KEY4_GPIO_PIN ; //设置按键的引脚为浮空输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /* * 函数名:Key1_Scan * 描述 :检测是否有按键按下 * 输入 :GPIOx:x 可以是 A,B,C,D或者 E * GPIO_Pin:待读取的端口位 * 输出 :KEY_OFF(没按下按键)、KEY_ON(按下按键) */ uint8_t Key1_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY1_ON ) { /*等待按键释放 */ while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY1_ON); return KEY1_ON; } else return KEY1_OFF; } /* * 函数名:Key_Scan * 描述 :检测是否有按键按下(Key2,Key3,Key4) * 输入 :GPIOx:x 可以是 A,B,C,D或者 E * GPIO_Pin:待读取的端口位 * 输出 :KEY_OFF(没按下按键)、KEY_ON(按下按键) */ uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON ) { /*等待按键释放 */ while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON); return KEY_ON; } else return KEY_OFF; } 外设2:蜂鸣器 这次开箱测试,蜂鸣器当然必不可少。可是用高低电平驱动时,发现蜂鸣器竟然不会叫。随后仔细查看资料后发现,这个蜂鸣器是无源蜂鸣器,且硬件驱动方式也比较特殊。有个直 流隔离电 容。电路如图所示。 蜂鸣器是普通无源蜂鸣器,或者说就是类似于电脑的扬声器。单片机 I/O 口来的是一定频率的交流信号,也就是正半周高电位,负半周低电位(接地或者负电压),这样在正半周时有电流流过三极管 B-E 间,三极管导通,低电位时给电容放电,同时三极管截止。 二极管的作用是吸收蜂鸣器线圈的反响脉冲避免损坏三极管(和继电器上并联二极管道理一样)这样,就可以通过软件控制让单片机 I/O 口输出不同频率方波,蜂鸣器就能发出不同频率的声音。不仅仅局限于一般有源蜂鸣器的单调滴滴声,通过软件设计可以有不同频率的操作音,持续的报警音,甚至是一首“ 致爱丽丝 ”乐曲。 这两端话是我在网上看到的,直接复制粘贴过来了,感觉解释的很到位,和这块板子就是差个驱动MOS管,但其实是一样的。置于效果呢,我从网上找了两个音乐素材(欢乐颂、遇见),拍了个视频有点大,后面看看能不能上传上来,或者有兴趣也可以下载程序自己体验一下,还是挺好玩的。 这些程序就不贴了,我会把工程文件直接放上来。 外设3:EEPROM(I2C) I2C这里,没什么亮点,芯片硬件配置的我头大,最后还是用模拟的方式,一次成功。 电路什么的我就不放上来了,效果图如下: 到这里我的这个测试基本上就要结束了,因为板载外设资源HK25Q16C和ADC电压采集部分,我搞了两天,也没搞出个结果,所以后面再说; 然后再说一下,后面主要再围绕蓝牙模块做个评测,因为这个才是我最关心的东西,也是厂家的亮点,一定要有。 最后,工程文件上传一下。