新唐M032BT微控制器集成了工作频率达 72MHz Arm® Cortex®-M0 内核以及 256 KB Flash 和 64 KB SRAM,可工作于 1.8V ~ 3.6V 低电压界面,支持双模蓝牙低功耗 BLE 5.0 与无线 2.4 GHz 传输技术 来看下这款MCU的主要技术指标: 内核 ( Core ) Arm® Cortex®-M0,工作频率可达 72 MHz 内存 ( Memory ) 256 KB Flash 64 KB SRAM 2048 Bytes SPROM ( Security Protection ROM) 支持程序更新方式: 在线系统更新 ISP ( In-System Programming ) 在线电路更新 ICP ( In-Circuit Programming ) 在线应用程序更新 IAP ( In-Application Programming ) 时钟控制 ( Clock control ) 外部 4 ~ 32 MHz 高速晶振 外部 32.768 KHz低速晶振 内部 48 MHz 高速震荡器 ( HIRC48 ) 全温误差 2 % 内部 38.4 KHz 低速晶振 ( LIRC ) 内部 PLL 可达 144 MHz 定时器 ( Timers ) 4 个 32 位定时器 1 个 24 位倒数 SysTick 定时器 RTC 脉冲宽度调制器 ( PWM ) 12 路 144 MHz 带 12 位预分频和刹车功能的 16 位 PWM 蓝牙低功耗5.0、2.4 GHz收发器 支持低功耗蓝牙 BLE 5.0 2.4 GHz 协议 接收灵敏度 RX sensitivity: -93 dBm at 1 Mbps 空气传输速率 Data rate: 1 Mbps and 2 Mbps 可编程发射功率范围 TX power: -20 dBm to +6 dBm 模拟( Analog ) 16 通道转换速率可达 2 MSPS 的 12 位 ADC 支持两个模拟比较器 (ACMP) 直接内存访问 ( PDMA ) 7 通道直接内存访问 ( PDMA ) 通讯接口 ( Connectivity ) 六组高速 6 MHz UART 介面 两组 USCI 可设为UART、SPI、I²C 两组 I²C/ 一组 SMBus 一组 QSPI 高级通讯接口 支持 USB 2.0 全速装置 (无需外挂晶振设计) 96位唯一标识符 ( UID ) 可做为安全密钥 128位唯一客户标识符 ( UCID ) 运行特性 工作电压: 1.8 V 至 3.6 V 工作温度: - 40 ℃ 至 85 ℃ 封装 QFN68 (8 mm x 8 mm) 本次的测评重点就是这块开发板的蓝牙功能。
先给开发板上电,看看板子里安装的出厂程序:
按任意键后就停在了“GPIO test.....”,不再有任何反应,LEDR1长亮。 还是测试下例程吧!打开BSP包里面SampleCode目录下的NuMaker-M03xBT目录,里面有个专门的BLE例程目录,包含两个BLE例程:TRSP_LED和TRSP_UART。先看下TRSP_LED例程。 在测试例程前,先安装下配套的BLE测试APP,这个APP也在BSP包里,目前只支持安卓,水果机的还没提供。
安装完成后打开NuBLE APP,点击左上角的设置按钮,界面如下:
可以选择LED或者Uart测试,先测试LED控制。
打开TRSP_LED例程,在main.c主程序找到这部分:
感谢先行踩坑的小伙伴,测试时特别注意了这点。根据条件编译的设置,显然选择了M031BT,而测试开发板是M032BT,肯定是有差别的。所以在mcu_definition.h文件中做如下修改: #define _CHIP_M031BT 0 #define _CHIP_M032BT 1 #define _CHIP_SELECTION_ _CHIP_M032BT
此时主程序条件编译部分已有变化:
编译,下载后运行:
等待建立蓝牙连接。打开APP,点击左下角的“SCAN BLE”按钮,很快就找到了开发板蓝牙:
点击Nuvoton LED蓝牙设备,与开发板建立蓝牙连接,此时串口终端也有了新的提示信息:
此时点击APP上的LED控制按钮ON或OFF,就可以控制开发板上LED R1的点亮与熄灭。
再来看下TRSP_UART例程,编译,下载运行,打开APP和开发板建立蓝牙连接,在串口终端输入“8888888”后回车,APP显示收到数据。在APP上输入“12345678”,点击发送按钮,此时串口终端显示收到了“12345678”数据。
串口终端显示:
APP界面显示:
最后看下TRSP_UART例程的主程序: int main(void) { extern void BleApp_Main(void); extern void BleApp_Init(void); extern BleStackStatus Set_BleAddr(void); extern volatile uint8_ttx_data_transmit_enable; /* Init System, IP clock and multi-functionI/O. */ SYS_Init(); /* Initial UART */ UART_Init(); /* Enable the BLE RF PHY */ RF_Open(); printf("--------------------------------\n"); printf(" BLE demo: TRSP_UART start...\n"); printf("--------------------------------\n"); /* Set BLE device address */ Set_BleAddr(); /* Initial BLE App */ BleApp_Init(); while(1) { /* Run BLE kernel, the task priority isLL > Host */ if (Ble_Kernel_Root() ==BLESTACK_STATUS_FREE) { BleApp_Main(); /* Make sure UART TX is empty andRX is idle, and the there is no BLE transmit */ if (((UART0->FIFOSTS &(UART_FIFOSTS_RXIDLE_Msk | UART_FIFOSTS_TXEMPTYF_Msk)) ==(UART_FIFOSTS_RXIDLE_Msk | UART_FIFOSTS_TXEMPTYF_Msk)) && (tx_data_transmit_enable == 0)) { /* System enter Power Down mode& wait interrupt event. */ System_PowerDown(); } } } }
注意这里:
这些函数等是搜索不到源码的,这部分以Lib方式提供。
|