本篇博文最后修改时间:2017年03月24日,19:45。
一、简介
本文以\SimpleBLECentral为例,介绍如何将普通IO口(P16)自定义为IO输出,实现电平翻转控制。
注:本文添加的IO口(P16)与协议栈的OLED引脚冲突,因此本文中需要关闭OLED。
二、实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:smart RF开发板(主芯片CC2541)
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
五、基础知识
暂无
六、实验步骤
1、编写并添加自定义的驱动
1)写一个驱动GUA_IO.c(存放在“……\BLE-CC254x-1.4.0\Projects\ble\SimpleBLECentral\Source\GUA”路径下)
//******************************************************************************
//name: GUA_IO.c
//introduce: 香瓜自定义的IO驱动
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group: 香瓜BLE之CC2541(127442605)
//changetime: 2017.03.24
//******************************************************************************
#include <ioCC2540.h>
#include "GUA_IO.h"
//******************************************************************************
//name: GUA_IO_Control
//introduce: 控制IO的电平
//parameter: nGUA_IO_Level:GUA_IO_LEVEL_HIGH or GUA_IO_LEVEL_LOW
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group: 香瓜BLE之CC2541(127442605)
//changetime: 2017.03.24
//******************************************************************************
void GUA_IO_Control(GUA_U8 nGUA_IO_Level)
{
if(nGUA_IO_Level == GUA_IO_LEVEL_HIGH)
{
P1_6 = 1;
}
else
{
P1_6 = 0;
}
}
//******************************************************************************
//name: GUA_IO_Init
//introduce: IO初始化
//parameter: none
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group: 香瓜BLE之CC2541(127442605)
//changetime: 2017.03.24
//******************************************************************************
void GUA_IO_Init(void)
{
P1SEL &= ~(1 << 6); //P16设置为IO口
P1DIR |= (1 << 6); //P16设置为输出
GUA_IO_Control(GUA_IO_LEVEL_LOW); //默认低电平
}
2)写一个驱动头文件GUA_IO.h(存放在“……\BLE-CC254x-1.4.0\Projects\ble\SimpleBLECentral\Source\GUA”路径下)
//******************************************************************************
//name: GUA_IO.h
//introduce: 香瓜自定义的IO驱动的头文件
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group: 香瓜BLE之CC2541(127442605)
//changetime: 2017.03.24
//******************************************************************************
#ifndef _GUA_IO_H_
#define _GUA_IO_H_
/*********************宏定义************************/
//类型宏
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif
#ifndef GUA_8
typedef signed char GUA_8;
#endif
#ifndef GUA_U16
typedef unsigned short GUA_U16;
#endif
#ifndef GUA_16
typedef signed short GUA_16;
#endif
#ifndef GUA_U32
typedef unsigned long GUA_U32;
#endif
#ifndef GUA_32
typedef signed long GUA_32;
#endif
#ifndef GUA_U64
typedef unsigned long long GUA_U64;
#endif
#ifndef GUA_64
typedef signed long long GUA_64;
#endif
//IO电平宏
#define GUA_IO_LEVEL_HIGH 0x01 //高电平
#define GUA_IO_LEVEL_LOW 0x00 //低电平
/*********************外部函数************************/
extern void GUA_IO_Control(GUA_U8 nGUA_IO_Level);
extern void GUA_IO_Init(void);
#endif
3)工程中添加GUA_IO.c
4)在IAR设置中添加驱动源文件路径
$PROJ_DIR$\..\..\SimpleBLECentral\Source\GUA
2、在应用层中使用
1)初始化(SimpleBLECentral.c的SimpleBLECentral_Init中)
//IO初始化
GUA_IO_Init();
2)应用层代码中添加驱动头文件(SimpleBLECentral.c中)
//GUA
#include "GUA_IO.h"
//GUA
3)添加测试代码(SimpleBLECentral.c的SimpleBLECentral_Init中)
//IO测试
GUA_IO_Control(GUA_IO_LEVEL_HIGH); //高电平
GUA_IO_Control(GUA_IO_LEVEL_LOW); //低电平
GUA_IO_Control(GUA_IO_LEVEL_HIGH); //高电平
GUA_IO_Control(GUA_IO_LEVEL_LOW); //低电平
七、注意事项
1、本文添加的IO口(P16)与协议栈的OLED引脚冲突,因此本文中需要关闭OLED。
在IAR设置宏中修改如下:
HAL_LCD=FALSE
八、实验结果
设置断点在测试代码处,并仿真全速运行至断点处。
单步执行测试代码,并用万用表测试P16的电压,可发现P16电压随测试代码变化。
因此,实验成功。