本帖最后由 damiaa 于 2015-3-31 09:26 编辑
BitCloud是ATMEL的ZIGBEE版本,目前支持智能家居智能能源,智能传感等profiles。
目前最新的BitCloud已经升级到3.2版本了。
找了好久,终于在本论坛找到一个视频,不敢吝啬,就引荐出来:
http://e7.eeworld.com.cn/html/video/2014/06/12/5.html
BitCloud开发包编译环境为IAR 目前我用IAR7.30.4
关于BitCloud 设备类型 PINID和CHANNEL,地址等参数的修改
设备类型:csdefaults.h 中定义下面三种之一:
//DEVICE_TYPE_COORDINATOR (0) - the coordinator\n
//DEVICE_TYPE_ROUTER (1) - a router\n
//DEVICE_TYPE_END_DEVICE (2) - an end device
编译缺省情况设置:
#ifndef CS_DEVICE_TYPE
#define CS_DEVICE_TYPE DEVICE_TYPE_ROUTER
#endif
运行时设置(要在没加入网络时设置):
DeviceType_t deviceType = DEVICE_TYPE_END_DEVICE;
bool rxOnWhenIdle = false;
CS_WriteParameter(CS_DEVICE_TYPE_ID,&deviceType);
CS_WriteParameter(CS_RX_ON_WHEN_IDLE_ID, &rxOnWhenIdle);
这个在WsnDemoApp.c中static void appInitialization(void)中有使用
设备地址:
IEEE/extended 地址
configuration.h中 CS_UID配置 如果配置为 CS_UID 为 0 就会从扩展EEPROM中用BSP_ReadUid()函数读。
Short/network 地址
// Determines whether the static or automatic addressing mode will be used for the
如果configuration.h中#define CS_NWK_UNIQUE_ADDR 1 CS_NWK_ADDR作为短地址,
如果configuration.h中#define CS_NWK_UNIQUE_ADDR 0自动分配地址
CHANNEL:
决定由下面:
CS_CHANNEL_PAGE 2.4G不设置
CS_CHANNEL_MASK 17个通道设置
Network Id
CS_EXT_PANID is the 64-bit (extended) identifier
PANID 16位
编译时:csdefaults.h 中#define CS_NWK_PANID 0x1234
运行时修改:
bool predefPANID = true;
uint16_t nwkPANID = 0x1111;
CS_WriteParameter(CS_NWK_PREDEFINED_PANID_ID,&predefPANID);
CS_WriteParameter(CS_NWK_PANID_ID, &nwkPANID);
BitCloud硬件的配置及操作:
BSP目录中的文件都是关于板子本身的。Buttons.c joystick.c lcd.c leds.c 定义了按键,摇杆,LCD,LED的硬件接口函数,
还有I2C,SPI,UART等CPU设备接口也定义了。
Button
buttons.h
buttons.c
中定义和申明了
result_t
BSP_OpenButtons(void(*pressed)(uint8_t bn),void(*released)(uint8_t bn));//开始初始化时使用
这三个函数第一个定义了两个回调函数,
按下,弹起两个函数,自己要加上。
第二个释放按键(不用了)。第三个读按键。
LCD
LCD.C中定义了有关的LCD操作和初始化函数
bspTempSensor.c定义了温度传感器的初始化和读函数
关于UART:
//Define a buffer for received data
uint8_t rxBuffer[RX_BUFFER_LENGTH];
//Callbacks' declarationsvoid usartBytesReceived(uint8_t readBytesLen);
void usartWriteConfirm(void);
.mode = USART_MODE_ASYNC; //Use asynchronous mode (UART)
.flowControl = USART_FLOW_CONTROL_NONE;
.baudrate = USART_BAUDRATE_38400;
.dataLength = USART_DATA8;
.parity = USART_PARITY_NONE;
.stopbits = USART_STOPBIT_1;
.rxBuffer = rxBuffer;
.rxBufferLength = USART_RX_BUFFER_LENGTH;
.txBuffer = NULL;
.txBufferLength = 0;
.rxCallback = usartBytesReceived;
.txCallback = usartWriteConfirm;}
...
HAL_OpenUsart(&usartDescriptor);
HAL_OpenUsart带参数usartDescriptor结构 初始化串口
HAL_WriteUsart写串口:
Static char msgBuffer[] = "Message for UART";
HAL_WriteUsart(&usartDescriptor, (uint8_t*)msgBuffer, sizeof(msgBuffer));
uint8_t usartRxBuffer[APP_USART_BUFFER_SIZE]; //Callback function specified in the usart descriptor
static void usartBytesReceived(uint16_t bytesToRead)
//注意串口的回调函数是在初始化结构中指出的。结构中有两个回调函数
.rxCallback = usartBytesReceived;
.txCallback = usartWriteConfirm; 它们分别由用户处理串口接收 发送相关的事情。
{
HAL_ReadUsart(&usartDescriptor, usartRxBuffer, bytesToRead); ...
}