打印

v7-串口fifo收发使用问题,求帮助!!!!

[复制链接]
281|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这个是代码





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 "bsp.h"                        /* 底层硬件驱动 */#include "airsensor.h"#include "string.h"
/* 定义例程名和例程发布日期 */#define EXAMPLE_NAME        "V7-串口和PC机通信(驱动支持8个串口FIFO)"#define EXAMPLE_DATE        "2018-12-12"#define DEMO_VER                "1.0"
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[] = "接收到串口命令1\r\n";        const char buf2[] = "接收到串口命令2\r\n";        const char buf3[] = "接收到串口命令3\r\n";        const char buf4[] = "接收到串口命令4\r\n";                        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("按键K1按下\r\n");                                        bsp_LedToggle(1);                                                break;                                                                                case KEY_DOWN_K2:                /* 按键K2键按下 */                                        printf("按键K2按下\r\n");                                        bsp_LedToggle(3);                                                                                break;
                                case KEY_DOWN_K3:                /* 按键K3键按下 */                                        printf("按键K3按下\r\n");                                                bsp_LedToggle(4);                                                break;                                                                                                default:                                        break;                        }                }        }}
/***********************************************************************************************************        函 数 名: PrintfHelp*        功能说明: 打印操作提示*        形    参:无*        返 回 值: 无**********************************************************************************************************/static void PrintfHelp(void){        printf("操作提示:\r\n");        printf("1. 启动一个自动重装软件定时器,每100ms翻转一次LED2\r\n");        printf("2. 串口接收到字符命令'1',返回串口消息接收到串口命令1\r\n");        printf("3. 串口接收到字符命令'2',返回串口消息接收到串口命令2\r\n");        printf("4. 串口接收到字符命令'3',返回串口消息接收到串口命令3\r\n");        printf("5. 串口接收到字符命令'4',返回串口消息接收到串口命令4\r\n");        printf("6. K1按键按下,串口打印按键K1按下\r\n");        printf("7. K2按键按下,串口打印按键K2按下\r\n");        printf("8. K3按键按下,串口打印按键K3按下\r\n");}
我在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

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

432

主题

439

帖子

0

粉丝