General-P 发表于 2022-8-17 22:49

【雅特力AT32WB415系列蓝牙BLE 5.0 MCU测评】3.0 蓝牙通信移植

<div class='showpostmsg'><p style="text-align: center;"><span style="font-size:20px;">蓝牙通信移植</span></p>

<p><span style="font-size:18px;">一、前言</span></p>

<p><span style="font-size:18px;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size:16px;">在前面的测评中我都是使用雅特力官方的AT32 IDE进行测试的,但鉴于此次蓝牙通信方面的工程量相当庞大,而且移植稳定性没有太大的保障,在研究了几天之后,我觉得在蓝牙通信方面测试的代码还是使用官方蓝牙例程所使用的MDK5进行测评测试。</span></p>

<p><span style="font-size:18px;">二、蓝牙工程初识</span></p>

<p><span style="font-size:18px;">&nbsp; &nbsp; </span><span style="font-size:16px;">我们可以在雅特力官方的文档中找到官方的蓝牙例程,其中第一个是雅特力官方编写的蓝牙开发手册,第二个附件就是我们需要的蓝牙例程。WB415的蓝牙模块集成在MCU当中的,所有在测试蓝牙功能时,我们需要两个工程,分别对WB415的蓝牙功能和MCU功能进行编写,其中蓝牙和MCU是通过内部的串口进行通信的。</span></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">通过查看手册,了解到编写蓝牙功能的工程是ARM9工程。我们可以到KEIL的官网下载相应的ARM9拓展包,这样就可以打开工程了,接下来是ARM9的安装过程,整体没有什么坑,基本按照默认的来就可以了。</span></p>

<p></p>

<p>&nbsp;</p>

<p>&nbsp; &nbsp;</p>

<p></p>

<p></p>

<p></p>

<p></p>

<p></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">上图就是官方的蓝牙部分例程,编译后会生成相应的bin文件,后面我们需要通过ICP工具将bin文件下载到开发板中。</span></p>

<p></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">同样我们打开MCU部分的工程。在编译后也会生出相应的hex文件,在工程目录下的objects文件夹中可以找到</span></p>

<p></p>

<p>&nbsp;</p>

<p></p>

<p></p>

<p><span style="font-size:18px;">三、下载运行</span></p>

<p><span style="font-size:18px;">&nbsp; &nbsp;</span><span style="font-size:16px;"> 在雅特力官网可以下载到相应的ICP下载工具</span></p>

<p></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">打开ICP工具后,首先需要连接AT-Link,如果AT-Link版本过低,工具也会提醒自动帮你更新,然后选择要下载的对应文件即可</span></p>

<p></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">下载蓝牙的bin文件时需要将下载的起始地址改为00000000,不然会和后面MCU的hex文件地址冲突,导致无法下载</span></p>

<p></p>

<p>&nbsp;&nbsp;&nbsp;<span style="font-size:16px;">&nbsp;选择好后即可点击下载,首次下载前会跳出两个提示,不用管他继续下载就好了</span></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">下载好后,打开手机上的LightBlue软件(手机百度就可以下载到),然后选择WB415的蓝牙进行连接(我试了几次都是下载后,要断电重启,手机才能检索到蓝牙,不知道是不是自己操作的问题),连接成功后,点击前缀为0000c101的会话窗口</span></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">发送01,开发板上的红灯,对应亮起,00熄灭。</span></p>

<p>&nbsp;</p>

<p></p>

<p></p>

<p>&nbsp; <span style="font-size:16px;">&nbsp; 发送02</span></p>

<p></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">按下开发板上的按键后,黄灯亮起。</span></p>

<p></p>

<p><span style="font-size:18px;">四、代码分析&nbsp; &nbsp;&nbsp;</span></p>

<p>&nbsp; &nbsp; <span style="font-size:16px;">控制方面主要时通过MCU工程中的at_cmd_handler函数进行控制处理,后续自己编写相应的控制函数也应在相应的控制逻辑进行编写</span></p>

<pre>
<code class="language-cpp">void at_cmd_handler(void)
{
uint8_t msg_id = SIZEOFMSG-1, i;
if(recv_cmp_flag == SET)
{
      for(i = 0; i &lt;= SIZEOFMSG; i++)
      {
      if(memcmp(recv_data, at_cmd_list.at_cmd_string, strlen(recv_data)) == 0)
      {
          printf("%s", recv_data);
          msg_id = i;
          break;
      }
      }
      
      switch(at_cmd_list.msg_id)
      {
      case AT_CMD_IOSET0:
      {
          at32_led_off(LED2);
          at_cmd_send(AT_RESULT_OK0);
          break;
      }
      case AT_CMD_IOSET1:
      {
          at32_led_on(LED2);
          at_cmd_send(AT_RESULT_OK1);
          break;
      }                       
      case AT_CMD_IOGET:
      {
          if(gpio_output_data_bit_read(GPIOB, GPIO_PINS_7))
          {
            at_cmd_send(AT_RESULT_OK1);
          }
          else
          {
            at_cmd_send(AT_RESULT_OK0);
          }
          break;
      }
      default:
      {
          at_cmd_send(AT_RSP_ERROR);
          break;
      }
      }         
    recv_cmp_flag = RESET;
    memset(recv_data, 0, strlen(recv_data));
}
}</code></pre>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

wangerxian 发表于 2022-8-18 15:39

<p>可以测试测试通信速率~</p>
页: [1]
查看完整版本: 【雅特力AT32WB415系列蓝牙BLE 5.0 MCU测评】3.0 蓝牙通信移植