所有课程见此链接:
4.14蓝牙控制实验
学习使用蓝牙模块,并通过风云串口助手控制。
首先根据开发板硬件原理图确定蓝牙模块与CC2530芯片的连接引脚,如图4-17所示。
图4-17 蓝牙模块接口图
此节可参考4.6节串口数据收发实验以及查阅风云蓝牙模块说明书进行学习。
蓝牙模块采用风云蓝牙模块,引脚定义:
蓝牙模块 TXD:蓝牙模块的发送端,正常通信必须接另一个设备的 RXD。
蓝牙模块 RXD:蓝牙模块的接收端,正常通信必须接另一个设备的 TXD。
蓝牙模块 STATE:蓝牙模块的状态引脚,与蓝牙 led 表示的状态一致(此引脚不常用) 。
蓝牙模块 EN:蓝牙模块的使能端(此引脚不常用) 。
蓝牙模块 5V:蓝牙模块的电源引脚。
蓝牙模块 GND:蓝牙模块的接地引脚
注意:通常仅使用 TXD、RXD 、5V 、 GND 即可通信
主函数部分程序如下:
#include <iocc2530.h>
//LED灯IO定义
#define LED1 P1_0
#define LED2 P1_1
unsigned char temp;
void initUART0(void);
/****************************************************************
串口(UART0)初始化函数:
****************************************************************/
void initUART0(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
P2DIR &= ~0XC0; //P0优先作为UART0
U0CSR |= 0x80; //串口设置为UART方式
U0GCR |= 8;
U0BAUD |= 59; //波特率设为9600
UTX0IF = 1; //UART0 TX中断标志初始置位1
U0CSR |= 0X40; //允许接收
IEN0 |= 0x84; //开总中断,接收中断
}
/****************************************************************
主函数
****************************************************************/
void main(void)
{
/******LED P1_0,P1_1方向初始化******/
P1DIR |= 0x03; //P1_0,P1_1设置为输出模式
LED1 = 1; //熄灭LED1
LED2 = 1; //熄灭LED2
initUART0();
while(1)
{
if(temp == 0x01)
{
LED1 = 0; //点亮LED1
}
if(temp == 0x02)
{
LED2 = 0; //点亮LED2
}
if(temp == 0x11)
{
LED1 = 1; //熄灭LED1
}
if(temp == 0x22)
{
LED2 = 1; //熄灭LED2
}
}
}
/****************************************************************
一旦有数据从串口传至CC2530,则进入中断,将接收到的数据赋值给变量temp.
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; //清中断标志
temp = U0DBUF;
}
将风云蓝牙模块接插到开发板相应位置,注意接插方向,请按照正确说明接插进去,然后下载程序,安装给手机安装风云蓝牙串口助手,如图4-18,手机连接蓝牙模块,发送指令如下:
发送0x01指令,开发板D3(LED1)点亮,发送0x11指令,开发板D3(LED1)熄灭;
发送0x02指令,开发板D4(LED2)点亮,发送0x22指令,开发板D4(LED2)熄灭。