BLE开发笔记——第一个工程,IO的输出

CC2541本质上是一个8051内核的单片机,只要熟悉51单片机和c语言,也便很容易上手CC2541的程序设计吧。为了更好的熟悉IAR从简单的IO控制开始,逐步为以后进行蓝牙协议栈开发奠定基础。

开发环境配置好了,CC Debugger程序下载调试也弄好了,那就新建一个IAR工程试一下IO。

新建IAR工程

  • 创建工程:

    1

  • 在新出现的对话框中,Tool chain选择8051,Project Template选择Empty Project:

    2

  • 选择保存目录,输入工程名称,保存

    3

  • 保存WorkSpace,在IAR中每个工程都必须有一个Workspace,而一个Workspace中可以有多个工程,这里我必须要保存一个Workspace,file->save Workspace As就会弹出如下对话框,这里同样取名为LED:

    4

配置工程

  • 右击工程,点击Options…进入配置界面:

    5

  • 在弹出的对话框中进行Target配置,Device选择CC2541F256(根据板上芯片型号决定),Data Model选择large,Number of virtual选择16,Location for constants and strings选择ROM mapped as data。

    6

  • 进行linker设置,选中Output标签页,Format区勾选Allow C-SPY-specific extra output file:

    7

  • Extra Output标签页,勾选Generate extra output file,勾选Override default,更名为LED.hex,选择Out format为intel-extended:

    8

  • 进行Debugger设置,Setup标签页中Driver选择Texas Instruments:

    9

  • 配置Debugger的Texas Instruments,Download标签页中勾选Erase flash,然后点击OK,至此项目配置工作就完成了:

    10

添加源文件

  • 单击工具栏11新建按钮,新建文件,输入以下代码:

    #include <ioCC2541.h>
    
    int main(void) {
        P1SEL &= ~0x01;         // 配置管脚为IO功能
        P1DIR |= 0x03;          // 配置IO,P1.0为输出
    
        P1 |= 0x01;             // 配置P1.0管脚输出高电平
    
        while(1) {
    
        }
    }
    
  • 保存源文件为LED.c:

    12

  • 将LED.c源文件添加到工程,如下:

    13

  • 保存工程,单击工具栏的14编译按钮进行编译,保存工程为LED.eww,在确认另存为的对话框中选择

    15

  • 编译结果类似一下,说明白编译成功:

    16

测试

  • 连接好电脑、CC Debugger和CC2541板,确认CC Debugger指示为绿灯(保证CC Debugger已经识别到CC2541芯片),然后点击工具栏7下载和调试按钮,正常的话就会进入调试界面,然后点击工具栏的17GO按钮,使程序全速运行,测试芯片的P1.0管脚的电平,如果为3.3V左右的高电平,说明成功搞定IO输出。下面给出CC2541管脚MAP图:

    18

  • 编写简单的延时函数,测试IO的高低电平间隔输出,分别新建编写delay.c和delay.h文件,按照3中的方式添加到工程之中。

    delay.h代码:

    #ifndef __DELAY_H__
    #define __DELAY_H__
    
    void delay(unsigned int timeDelay);
    
    #endif
    

    delay.c代码:

    #include "delay.h"
    
    void delay(unsigned int timeDelay) {
        while(timeDelay--) {
            for(int i = 0; i < 320; i++);       // 执行空命令模拟延时1ms
        }
    }
    
  • 然后更改LED.c文件的代码如下:

    #include <ioCC2541.h>
    #include "delay.h"
    
    int main(void) {
        P1SEL &= ~0x01;         // 配置管脚为IO功能
        P1DIR |= 0x03;          // 配置P1.0为输出
    
        while(1) {
            P1 |= 0x01;         // 配置P1.0输出高电平
            delay(1000);        // 延时1000ms
            P1 &= (~0x01);      // 配置P1.0输出高电平
            delay(1000);        // 延时1000ms
        }
    }
    
  • 然后编译并下载,GO运行,万用表测量P1.0管脚电平,大约经过1s电平便切换一次,说明可用。


ble

1369 字

2015-10-26 17:34 +0800