这个是代码
airsensor.zip
(27.44 MB, 下载次数: 58)
2019-4-19 01:21 上传
点击文件名下载附件
代码
首先是我需要通过串口接收传感器的数据的格式
数据帧格式.png (73.15 KB, 下载次数: 0)
下载附件
2019-4-19 01:07 上传
本来计划是串口6来接收的,但是串口6没配置好,就先用串口1做这个了,稍后再移植,然后我自己写了个sensor程序来作为这个传感器的驱动程序,经过测试,第一帧数据是可以正常接收的
发送第一帧数据后.png (99.85 KB, 下载次数: 0)
下载附件
2019-4-19 01:13 上传
我再清除窗口再向板子发数据
发送第二帧数据后.png (29.54 KB, 下载次数: 0)
下载附件
2019-4-19 01:14 上传
回复我3次,我再向单片机发送数据
发送第三帧数据后.png (148.03 KB, 下载次数: 0)
下载附件
2019-4-19 01:15 上传
这就是我疑惑的地方,不知道为什么会出现这个错误下面是sensor程序#include "airsensor.h"#include "bsp.h"#include "string.h"
uint8_t ucAS_Len=19;uint8_t ucAS_Head = 0;uint8_t ucAS_Buf[512];uint16_t usAS_Pos = 0;const char buf5[] = "传感器异常,未收到数据\r\n";const char buf6[] = "传感器正常,开始接收数据\r\n";const char buf7[] = "传感器正常,结束完一帧数据\r\n";void AirSonsor_getdata(void){ uint8_t ucData;
while(1) { if (comGetChar(COM1, &ucData)) { bsp_LedToggle(2); //LED2标记接收到了数据 comSendBuf(COM1, (uint8_t *)buf6, strlen(buf6)); if(ucAS_Head ==0) { if(ucData==1) { ucAS_Buf[usAS_Pos]=ucData; usAS_Pos++;//1 comGetChar(COM1, &ucData); if(ucData==3) { ucAS_Buf[usAS_Pos]=ucData; usAS_Pos++;//2 comGetChar(COM1, &ucData); if(ucData==0x0c) { ucAS_Buf[usAS_Pos]=ucData; usAS_Pos++;//3 comGetChar(COM1, &ucData); } } } }
for(int i=usAS_Pos;i<ucAS_Len;i++)//3 { ucAS_Buf[usAS_Pos] = ucData; usAS_Pos++; comGetChar(COM1, &ucData); } bsp_LedToggle(3); comSendBuf(COM1, (uint8_t *)buf7, strlen(buf7)); break; } else { comSendBuf(COM1, (uint8_t *)buf5, strlen(buf5)); bsp_LedToggle(4);//led4表示接收失败 break; } }}
然后是主函数:#include &quot;bsp.h&quot; /* 底层硬件驱动 */#include &quot;airsensor.h&quot;#include &quot;string.h&quot;
/* 定义例程名和例程发布日期 */#define EXAMPLE_NAME &quot;V7-串口和PC机通信(驱动支持8个串口FIFO)&quot;#define EXAMPLE_DATE &quot;2018-12-12&quot;#define DEMO_VER &quot;1.0&quot;
static void Printf**(void);static void PrintfHelp(void);extern uint8_t RX_count;/*********************************************************************************************************** 函 数 名: main* 功能说明: c程序入口* 形 参: 无* 返 回 值: 错误代码(无需处理)**********************************************************************************************************/int main(void){ uint8_t ucKeyCode; uint8_t read; uint8_t flag=0; const char buf1[] = &quot;接收到串口命令1\r\n&quot;; const char buf2[] = &quot;接收到串口命令2\r\n&quot;; const char buf3[] = &quot;接收到串口命令3\r\n&quot;; const char buf4[] = &quot;接收到串口命令4\r\n&quot;; bsp_Init(); /* 硬件初始化 */ Printf**(); /* 打印例程名称和版本等信息 */ PrintfHelp(); /* 打印操作提示 */
bsp_StartAutoTimer(0, 100); /* 启动1个100ms的自动重装的定时器 */ //bsp_StartAutoTimer(1, 100); /* 主程序大循环 */ while (1) { /* CPU空闲时执行的函数,在 bsp.c */ bsp_Idle(); /* 判断定时器超时时间 */ if (bsp_CheckTimer(0)) { /* 每隔100ms 进来一次 */ /* 翻转LED1的状态 */ bsp_LedToggle(1); } if (RX_count==20) { /* 每隔100ms 进来一次 */ /* 翻转LED2的状态 */ flag=1; RX_count=0; } if(flag==1) { flag=0; AirSonsor_getdata(); } /* 处理按键事件 */ ucKeyCode = bsp_GetKey(); if (ucKeyCode > 0) { /* 有键按下 */ switch (ucKeyCode) { case KEY_DOWN_K1: /* 按键K1键按下 */ printf(&quot;按键K1按下\r\n&quot;); bsp_LedToggle(1); break; case KEY_DOWN_K2: /* 按键K2键按下 */ printf(&quot;按键K2按下\r\n&quot;); bsp_LedToggle(3); break;
case KEY_DOWN_K3: /* 按键K3键按下 */ printf(&quot;按键K3按下\r\n&quot;); bsp_LedToggle(4); break; default: break; } } }}
/*********************************************************************************************************** 函 数 名: PrintfHelp* 功能说明: 打印操作提示* 形 参:无* 返 回 值: 无**********************************************************************************************************/static void PrintfHelp(void){ printf(&quot;操作提示:\r\n&quot;); printf(&quot;1. 启动一个自动重装软件定时器,每100ms翻转一次LED2\r\n&quot;); printf(&quot;2. 串口接收到字符命令'1',返回串口消息接收到串口命令1\r\n&quot;); printf(&quot;3. 串口接收到字符命令'2',返回串口消息接收到串口命令2\r\n&quot;); printf(&quot;4. 串口接收到字符命令'3',返回串口消息接收到串口命令3\r\n&quot;); printf(&quot;5. 串口接收到字符命令'4',返回串口消息接收到串口命令4\r\n&quot;); printf(&quot;6. K1按键按下,串口打印按键K1按下\r\n&quot;); printf(&quot;7. K2按键按下,串口打印按键K2按下\r\n&quot;); printf(&quot;8. K3按键按下,串口打印按键K3按下\r\n&quot;);}
我在bsp_uart_fifo.c中定义了一个全局变量uint8_t RX_count=0;,让这个RX_count=_pUart->usRxCount;
程序.png (122.85 KB, 下载次数: 0)
下载附件
2019-4-19 01:19 上传
然后我在主函数里引用他,做为我判断fifo里有1帧数据,我在airsensor函数里去处理。请问这样做是不是不对,该怎么解决?请各位大佬们帮助,我会把程序放上去,求求帮助然后我留下我的QQ,有时间的大佬可以随时联系我:1151144104 |