查看: 3738|回复: 0

Microduino BLE core 开发环境的搭建和跑马灯

[复制链接]
  • TA的每日心情
    开心
    2019-8-24 21:42
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2017-10-8 22:42 | 显示全部楼层 |阅读模式
    本帖最后由 topdog 于 2017-10-8 23:10 编辑

        美科科技有一款使用美国德州仪器仪表公司生产的cc2541芯片,针对低功耗蓝牙4.0的核心板,称为Microduino BLE core。   用这个核心板写了个跑马灯程序,一步一步介绍下BLE 4.0开发环境的架设,工程的搭建,烧录的方法。
       管脚图:          6.JPG

       蓝牙(bluetooth)是蓝牙协议的简称,他是蓝牙协议小组,结合瑞典的传说来命名蓝牙协议的,官方网站 https://www.bluetooth.com/zh-cn 。根据蓝牙版本的不同,后面加上版本号,cc2541对应BLE 4.0。
       蓝牙堆栈下载地址BLE-STACK :   http://www.ti.com.cn/tool/cn/ble-stack 。最新的是BLE-CC254x-1.4.2.2 。(本例用不到)
       德州仪器公司提供了开发者的技术论坛: http://www.deyisupport.com/question_answer/default.aspx
       开发工具是cc-dubegger:购买地址
       Microduino BLE core 的内核是8051,开发环境使用IAR Embedded Workbench,下载地址:https://www.iar.com/iar-embedded-workbench/#!?architecture=8051 。最新版本10.10,IAR高版本可以打开低版本写的程序,但是再用低版本就打不来了,所以要做好备份。安装好IAR每次必须认证一下,此外,打开IAR License Manager,tools-->Extract optional packages-->IRA Library Source for 8051 .
        1.JPG
          下面我们结合创建一个跑马灯来搭建工程。打开IAR Embedded Workbench,创建一个新的工程:
           2.JPG
           cc2541的内核是增强的8051,这里我们创建一个空的8051工程,保存到文件夹。
           3.JPG
      new file -->save AS -->led.c  输入代码。
        4.JPG
      并且在工程里面add led.c
       5.JPG
         如果把蓝牙工程比作一块一块工地,就要给每个工地(Workspace)命名一下, file-->save workspace As...-->led.eww  
         cpu配置:点击led-debug 右键 options -->geneal options
        7.JPG
       linker 选择   $TOOLKIT_DIR$\config\devices\Texas Instruments\lnk51ew_cc2541F256.xcl
        8.JPG
       debugger选择  $TOOLKIT_DIR$\config\devices\Texas Instruments\ioCC2541F256.ddf
        9.JPG
      子项选项配置:
        10.JPG
       [kenrobot_code]#include <ioCC2541.h>

    typedef unsigned char uint8;
    typedef unsigned short int  uint16;


    #define LED1 P1_0       //定义P1.0(D8)口为LED1控制端
    #define LED2 P1_2       //定义P1.2(D10)口为LED2控制端
    #define LED3 P1_4       //定义P1.4(D12)口为LED3控制端
    #define LED4 P0_1       //定义P0.1口为LED4控制端

    /****************************************************************************
    常用宏定义
    ****************************************************************************/
    #define BV(x) (1<<(x))


    /****************************************************************************
    名    称: DelayMS()
    功    能: 毫秒延时,系统时钟不配置时默认使用内部16M
    入口参数: msec 延时参数,注意,最大数值为65536ms
    出口参数: 无
    ****************************************************************************/
    void DelayMS(uint16 msec)
    {
        uint16 i,j;
       
        for (i=0; i<msec; i++)
            for (j=0; j<536; j++);
    }

    /****************************************************************************
    名    称: LedSet()
    功    能: 点亮或熄灭所有LED灯   
    入口参数: m为0时LED灯亮  m为1时LED灯灭
    出口参数: 无
    ****************************************************************************/
    void LedSet(uint8 m)
    {
        LED1 = m;
        LED2 = m;
        LED3 = m;
        LED4 = m;
    }

    /****************************************************************************
    名    称: InitLed()
    功    能: 设置LED灯相应的IO口
    入口参数: 无
    出口参数: 无
    ****************************************************************************/
    void InitLed(void)
    {
            P1DIR |=BV(0) | BV(2) | BV(4); //P1.0(D8),P1.2(D10),P1.4(D12)定义为输出口
            P1SEL &= ~( BV(0) | BV(2) | BV(4));        //P1.0(D8),P1.2(D10),P1.4(D12)定义为一般GPIO
            P0DIR |= 0x02;    //P0.1(D2)定义为输出口
            P0SEL &= ~0x01;   // P0.1(D2)定义为一般GPIO

            //只有初始化过GPIO后,对GPIO的操作才会生效
        LedSet(0);      //使所有LED灯默认为熄灭状态
    }


    void main(void)
    {
        uint8 i;
       
        InitLed();               //设置LED灯相关IO口
       
        while(1)
        {  
            LED1 = !LED1;         //流水灯,初始化时LED为熄灭执行后则点亮
            DelayMS(200);         
            LED2 = !LED2;         
            DelayMS(200);            
            LED3 = !LED3;        
            DelayMS(200);
            LED4 = !LED4;        
            DelayMS(200);   
            
            LED4 = !LED4;       //与上述过程相反
            DelayMS(200);   
            LED3 = !LED3;        
            DelayMS(200);   
            LED2 = !LED2;         
            DelayMS(200);  
            LED1 = !LED1;         
            DelayMS(200);
            
            for (i=0; i<3; i++)  //所有灯闪烁3次
            {
               LedSet(0);    //关闭所有LED灯
               DelayMS(200);
               LedSet(1);    //打开所有LED灯
               DelayMS(200);
            }
            
            LedSet(0);       //使所有LED灯熄灭状态
            DelayMS(500);
        }
    }
    [/kenrobot_code] 程序使用了4个led,配置了P1DIR,P0DIR寄存器。程序说明见注释。
    点击project-->rebuild all 没有报错,再点击 downlond and debug ,这样程序就烧录到了Microduino BLE core上了。
    11.JPG


    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    ArduinoJason6教程由ArduinoJson作者Benoit亲自出马一对一教学
    ArduinoJason6教程由Ardui
    这几天我觉得社区教学好像缺了点什么,呃呃~我想一想好像是缺少了ArduinoJson6的教学
    Arduino+L298N小车实例教程
    Arduino+L298N小车实例教
    (第一次写教程,如有错漏,敬请拍砖)Arduino+L298N小车实例教程Arduino小车是一个非
    零知开源分享-蓝牙模块与手机APP通信
    零知开源分享-蓝牙模块与
    本篇文章中将讲解蓝牙模块与安卓手机APP进行通信。1、说明MCU:零知开发板-标准板模
    DHT库无法被找到
    DHT库无法被找到
    今天在安装了DHT库之后在编译时却显示无法找到库,请问我是在哪里安装出错了,谢谢大
    (可远程)ESP8266读DHT11温湿度,APP inventor制作app实时显示
    (可远程)ESP8266读DHT11
    原理讲解 原理简述:利用发布订阅模式。第一步,先读取DHT11温湿度数值,第二步,新
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表