初级会员
- 积分
- 67
- 金钱
- 67
- 注册时间
- 2016-7-9
- 在线时间
- 8 小时
|
3金钱
[mw_shl_code=applescript,true]#include "uart_protocol.h"
#include "drv_parameter.h"
#include "Drv_Uart.h"
#include "stm8s_it.h"
#include "macro_bits_define.h"
extern u8 UART_RX_Buffer[3];
extern u8 Buffer_W;
extern u8 Buffer_Time;
extern u8 Buffer_Count;
SysUartMsgPackageType SysUartMsgPackage;
void sys_uart_msg_process(void)
{
u8 Cmd = 0, Msg = 0;
if(Buffer_Count == 3)
{
Buffer_W = 0;
Buffer_Count = 0;
if((UART_RX_Buffer[0] == g_Boardpara.List.DeviceAddress)
|| (UART_RX_Buffer[0] == 0x00))
{
Cmd = UART_RX_Buffer[1];
Msg = UART_RX_Buffer[2];
sys_uart_protocol_parse(Cmd, &Msg);
}
}
if(Buffer_Time == 0)
{
Buffer_W = 0;
Buffer_Count = 0;
for(u8 i=0; i<3; i++)
{
UART_RX_Buffer = 0;
}
}
}
//============================================================================
// 名称:SysUartMsgParse
// 功能:系统串口协议解析
// 参数:Cmd:命令码
// liv_Msg:数据
// 返回:0为成功,1为数据包太短,校验出错
// 说明:无
//============================================================================
u8 sys_uart_protocol_parse(u8 Cmd, u8* Msg)
{
u8 res[10];
switch (Cmd)
{
case UARTCMD_SetAddr: //设置设备地址
{
SysUartMsgPackage.Address = *Msg;
g_Boardpara.List.CheckNum = Def_CheckNum;
g_Boardpara.List.DeviceAddress=*Msg;
res[0] = para_save(PARA_ADDRESS_FACT); //保存出厂参数,返回FLASH操作状态:错误或者正确
sys_uart_send_msg(UARTCMD_SetAddr, 1, res); //返回FLASH操作状态
}
break;
case UARTCMD_GetAddr: //读取设备地址
{
res[0] = *Msg;
if(res[0]==0xAA)
{
res[0]=g_Boardpara.List.DeviceAddress; //设备地址
sys_uart_send_msg(UARTCMD_GetAddr, 1, res); //返回设备地址
}
}
break;
case UARTCMD_GetSampleResult: //读取一次采样数据
{
res[0] = *Msg;
if(res[0]==0xBC)
{
Start_Measures();
}
}
break;
default:
{
return 1;
}
}
return 0;
}
//============================================================================
// 名称:SysUartMsgSend
// 功能:串口1消息发送函数
// 参数:Address:从机地址
// DeviceId:从机设备代号
// Cmd:数据包命令码
// Len:有效数据长度,1个字节
// Dat:有效数据
// 返回:无
// 说明:无
//============================================================================
void sys_uart_send_msg(u8 Cmd, u8 Len, u8 *Dat)
{
u8 SendBuffer[10];
u8 i = 0, j;
SendBuffer[i++] = g_Boardpara.List.DeviceAddress;
SendBuffer[i++] = Cmd;
for (j = 0; j < Len; j++)
{
SendBuffer[i++] = Dat[j];
}
Uart1_SendString(SendBuffer,i);
}
[/mw_shl_code]
这是一个超声波模块I2C发送数据的i2c协议函数,苦恼的是不知道这个的器件地址,资料上说的默认是0XE8,但是之前测试UART串口通信的时候,地址是0X00。I2C通信的时候试了00地址也没用,一直都是返回FF,求大神帮帮忙,搞了几天了,很苦恼啊。
|
|