[MCU新闻] 测评:NuMaker-M032BTAI 蓝牙单片机尝鲜玩

[复制链接]
8959|17
 楼主| gaoyang9992006 发表于 2021-8-19 21:36 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2021-8-19 21:39 编辑

#申请原创#@21小跑堂近日参加新唐活动,获得了最新蓝牙单片机M032BT系列的开发板首发体验活动。非常开心,感谢新唐。 55026611e5a5055249.png
以下是厂家提供的手册上的图片,跟M032BT开发板的外观看起来几乎一模一样。
18624611e5d9b37e47.png

刚收到板子没有开发资料,无从下手,默认的程序也没看到有蓝牙信号,以为板子有问题或者手机有问题呢。
今天收到了官方提供的开发资料,烧录后发现还是不行,竟然报错了。
  1. In Hard Fault Handler
  2. r0  = 0x0
  3. r1  = 0xf5
  4. r2  = 0x40061000
  5. r3  = 0x3e
  6. r12 = 0xffffffff
  7. lr  = 0x4a69
  8. pc  = 0x3548
  9. psr = 0x21000015
我粗略看了一下程序,觉得没毛病啊。而且DEBUG除错操作发现进入了
  1.     /* Initialize RF PHY */
  2.     RF_Init();
产生的错误,而产生这个错误是在BLE.lib的,我就急不可耐的给新唐技术通过官网的渠道发了咨询。
然后才认真的看芯片的技术手册和BLE操作的相关说明文档,然后对照程序一步一步的看,发现了问题所在。新唐的BLE.lib是绝对没问题的。
是我错以为这是新唐针对M032BT的例子了,原来不是,是针对M031BT的,我被下面三行代码迷惑了
  1. #define _CHIP_M031BT                    0
  2. #define _CHIP_M032BT                    1
  3. #define _CHIP_SELECTION_                _CHIP_M031BT
以为厂家提供的代码已经在第二行设置为1了,没想到第三行才是坑。
需要修改成
  1. #define _CHIP_M031BT                    0
  2. #define _CHIP_M032BT                    1
  3. #define _CHIP_SELECTION_                _CHIP_M032BT
根据技术手册,蓝牙模块是挂载在SPI0内部端口的
而该端口的初始化如下所示,如果默认是M031BT,则编译对应的M031BT的管脚,而这两个型号的内部管脚是不同的地址。因此需要做如上修改。
53397611e5b99e462c.png
修改后,保存,重新编译烧录
串口打印消息:
  1. ----------------------------------
  2.   BLE demo: LED control start...
  3. ----------------------------------
  4. BLE device address from UID: c0:00:b5:a1:47:09

  5. Advertising...
这个时候打开手机蓝牙,发现已经可以看到我使用的这个工程的名字了:Nuvoton_LED
安装新唐提供的APK软件,扫描,然后找到上面的蓝牙信号名字,单击连接,然后就可以控制LED的开关了。
47972611e5cbecea65.jpg
在连接和开关断开的时候串口还打印出了相关信息
  1. Disconnected, ID:0, Reason:0x13
  2. Advertising...
  3. Status=0, Connected to 78:77:f6:7d:a1:08
  4. Connection updated
  5. Status: 0, Interval: 6, Latency: 0, Supervision Timeout: 500
  6. Connection updated
  7. Status: 0, Interval: 39, Latency: 0, Supervision Timeout: 500
结合厂家提供的测试例程,可以看出通过蓝牙进行数据收发非常简单,这大大降低了基于蓝牙的单片机应用开发难度,非常完美的一款具备蓝牙收发功能的单片机。
奉上该例程的main.c以供欣赏。
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V0.9
  4. * $Revision: 01 $
  5. * @brief
  6. *           Demonstrate BLE operation.
  7. *           Includes the basic initialization and the loop for kernel(BLE) operations.
  8. * @note
  9. *
  10. ******************************************************************************/
  11. #include <stdio.h>
  12. #include "rf_phy.h"
  13. #include "porting_flash.h"
  14. #include "porting_misc.h"
  15. #include "porting_spi.h"
  16. #include "mcu_definition.h"

  17. #pragma push
  18. //#pragma Otime
  19. #pragma Ospace

  20. /*!
  21.    \brief Initial necessary peripheral on MCU.
  22. */
  23. void SYS_Init(void)
  24. {
  25.     int8_t irqno;

  26.     /* Unlock protected registers */
  27.     SYS_UnlockReg();

  28.     /*---------------------------------------------------------------------------------------------------------*/
  29.     /* Init System Clock                                                                                       */
  30.     /*---------------------------------------------------------------------------------------------------------*/

  31. #if (_USE_MCU_CLK_==MCU_CLK_SOURCE_HXT) //HXT
  32.     GPIO_SetMode(PF, (BIT2 | BIT3), GPIO_MODE_INPUT);
  33.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk | CLK_PWRCTL_HIRCEN_Msk);
  34.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk | CLK_STATUS_HIRCSTB_Msk);
  35. #else                                   //HIRC
  36.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);
  37.     CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);
  38. #endif

  39.     /* Set both PCLK0 and PCLK1 as HCLK/PCLK_DIV */
  40. #if (PCLK_DIV==4)
  41.     CLK->PCLKDIV = CLK_PCLKDIV_APB0DIV_DIV4 | CLK_PCLKDIV_APB1DIV_DIV4;
  42. #elif (PCLK_DIV==2)
  43.     CLK->PCLKDIV = CLK_PCLKDIV_APB0DIV_DIV2 | CLK_PCLKDIV_APB1DIV_DIV2;  //48/2=24MHz
  44. #elif (PCLK_DIV==1)
  45.     CLK->PCLKDIV = CLK_PCLKDIV_APB0DIV_DIV1 | CLK_PCLKDIV_APB1DIV_DIV1;
  46. #endif //(PCLK_DIV==4)

  47.     //debug print use UART0
  48.     /* Select HIRC as the clock source of UART0 */
  49.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));

  50.     /* Enable UART peripheral clock */
  51.     CLK_EnableModuleClock(UART0_MODULE);

  52.     /*---------------------------------------------------------------------------------------------------------*/
  53.     /* Init I/O Multi-function                                                                                 */
  54.     /*---------------------------------------------------------------------------------------------------------*/
  55.     /* Set PA multi-function pins for UART0 RXD=PA.0 and TXD=PA.1 */
  56.     SYS->GPA_MFPL = (SYS->GPA_MFPL & ~(SYS_GPA_MFPL_PA0MFP_Msk | SYS_GPA_MFPL_PA1MFP_Msk)) |
  57.                     (SYS_GPA_MFPL_PA0MFP_UART0_RXD | SYS_GPA_MFPL_PA1MFP_UART0_TXD);

  58.     /* Set only BLE interrupt with the highest priority to make sure RF can handle event in time */
  59.     for (irqno = BOD_IRQn; irqno <= RTC_IRQn; irqno++)
  60.     {
  61.         NVIC_SetPriority((IRQn_Type)irqno, 1);
  62.     }
  63. #if (_CHIP_SELECTION_ == _CHIP_M031BT)
  64.     NVIC_SetPriority(GPIO_PCPDPEPF_IRQn, 0);
  65. #elif (_CHIP_SELECTION_ == _CHIP_M032BT)
  66.     NVIC_SetPriority(EINT135_IRQn, 0);
  67. #endif

  68.     /* Update System Core Clock */
  69.     /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock and CyclesPerUs automatically. */
  70.     SystemCoreClockUpdate();
  71.     /* Lock protected registers */
  72.     SYS_LockReg();
  73. }

  74. void RF_Open(void)
  75. {
  76.     /* Wait RF PHY stable */
  77.     CLK_SysTickDelay(200000);          // MUST wait for stable voltage( >= 1.8V) after power-up

  78.     /* Initialize GPIO reset pin */
  79.     MCU_GpioResetInit();

  80.     /* Do Gpio Reset */
  81.     MCU_GpioReset();
  82.     CLK_SysTickDelay(50000);

  83.     /* SPI IO remapping */
  84.     RF_SpiIoMapping();

  85.     /* initial SPI PDMA */
  86.     SPI_PDMA_Init();

  87.     /* Initialize RF PHY */
  88.     RF_Init();
  89. }

  90. /*!
  91.    \brief main loop for initialization and BLE kernel
  92. */
  93. int main(void)
  94. {
  95.     extern void BleApp_Main(void);
  96.     extern void BleApp_Init(void);
  97.     extern BleStackStatus Set_BleAddr(void);

  98.     /* Init System, IP clock and multi-function I/O. */
  99.     SYS_Init();

  100.     /* Open UART0 for debug */
  101.     UART_Open(UART0, 115200);

  102.     /* Enable the BLE RF PHY */
  103.     RF_Open();

  104.     printf("----------------------------------\n");
  105.     printf("  BLE demo: LED control start...\n");
  106.     printf("----------------------------------\n");

  107.     /* Set BLE device address */
  108.     Set_BleAddr();

  109.     /* Initial BLE App */
  110.     BleApp_Init();

  111.     while (1)
  112.     {
  113.         /* Run BLE kernel, the task priority is LL > Host */
  114.         if (Ble_Kernel_Root() == BLESTACK_STATUS_FREE)
  115.         {
  116.             BleApp_Main();

  117.             /* System enter Power Down mode & wait interrupt event. */
  118.             System_PowerDown();
  119.         }
  120.     }
  121. }
  122. #pragma pop







  
 楼主| gaoyang9992006 发表于 2021-8-19 22:05 | 显示全部楼层
原因:厂家提供的程序的宏定义,修改了一半就扔过来了,让大伙以为改好了呢,哈哈,剩下一半是考验我们是不是水货呢。
yangjiaxu 发表于 2021-8-20 13:11 | 显示全部楼层
哈哈哈哈,这个提供的资料文件名字也没改过来,看来是做的比较着急
 楼主| gaoyang9992006 发表于 2021-8-20 16:37 | 显示全部楼层
yangjiaxu 发表于 2021-8-20 13:11
哈哈哈哈,这个提供的资料文件名字也没改过来,看来是做的比较着急

是的,看日期是刚弄的,哈哈,厂家的工程师估计也刚调试好M031BT的,就给改了一半扔来了。
gzruan 发表于 2021-8-27 17:30 | 显示全部楼层
请问新塘带蓝牙功能的芯片只有这个型号吗?还有没别的带蓝牙型号芯片?
 楼主| gaoyang9992006 发表于 2021-8-29 12:35 | 显示全部楼层
gzruan 发表于 2021-8-27 17:30
请问新塘带蓝牙功能的芯片只有这个型号吗?还有没别的带蓝牙型号芯片?

一共两个型号:M031BT和M032BT系列,每个都有3个不同封装的芯片。
 楼主| gaoyang9992006 发表于 2021-10-22 14:53 | 显示全部楼层
准备继续玩这个板子,有空了。
七毛钱 发表于 2021-10-28 10:59 来自手机 | 显示全部楼层
期待高版主后续分享
 楼主| gaoyang9992006 发表于 2021-10-28 11:12 | 显示全部楼层
七毛钱 发表于 2021-10-28 10:59
期待高版主后续分享

后续做了手机APP跟BLE蓝牙模块通信。
https://bbs.21ic.com/icview-3173112-1-1.html
yljon 发表于 2021-11-19 14:40 | 显示全部楼层
厉害啦
koala889 发表于 2021-12-9 15:59 | 显示全部楼层
感觉这个版主涉猎的东西很多,
高手
 楼主| gaoyang9992006 发表于 2021-12-9 22:06 | 显示全部楼层
koala889 发表于 2021-12-9 15:59
感觉这个版主涉猎的东西很多,
高手

哈哈,谢谢支持。。。。。。。。。。
sadicy 发表于 2021-12-13 10:33 | 显示全部楼层
还没接触过蓝牙,学习了,
 楼主| gaoyang9992006 发表于 2021-12-14 12:58 | 显示全部楼层
sadicy 发表于 2021-12-13 10:33
还没接触过蓝牙,学习了,

也可以买个蓝牙串口模块学习
onlycook 发表于 2021-12-14 16:51 来自手机 | 显示全部楼层
不错,学习下,期待楼主继续跟新
carpsnow 发表于 2022-1-25 10:54 | 显示全部楼层
强!!学了了,感觉不错
andygirl 发表于 2022-2-11 11:31 | 显示全部楼层
看来刚推出不久啊,官方的测试还不够
东西看着还是真不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16404

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部