查看: 2840|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2019-4-6 23:04
  • 签到天数: 67 天

    [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


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

    本版积分规则

    热门推荐

    利用MICRO:BIT制作的飞机小游戏
    利用MICRO:BIT制作的飞机
    一.项目名称: 利用MICRO:BIT制作的飞机小游戏二.制作目的: 带孩子多了解micro:bit
    全过程展示:PWM自定义、测速、PID调速、PID自整定
    全过程展示:PWM自定义、
    有一天,电控小白在某宝上买来了一块Arduino Mega2560、一款直流电机。小白想:“这款
    OneNET之星再度闪耀 物联网创客马拉松大赛正式启动
    OneNET之星再度闪耀 物联
    4月9日,2019中国移动OneNET之星2.0物联网创客马拉松正式上线。大赛由中国移动集
    求助!!!!
    求助!!!!
    想借助数据上传工具将串口数据传到乐联网,结果一直上传失败,实在不知道怎么修
    BLE胸带+GPS墨水屏运动心率表(0421更新代码及原理图)
    BLE胸带+GPS墨水屏运动心
    0421了更新代码原理状语从句:打图产品板的PCB已经到达本市。 项目简介: 我喜欢
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表