全国服务热线:

15861139266

如何用C语言在Linux下给cc2530实现一个简单的上位机(上),苏州上位机培训,苏州机器视觉培训
发布时间:2023-05-19 13:46:53 点击次数:309

如何用C语言在Linux下给cc2530实现一个简单的上位机(上)

环境简介

1. 软硬件环境

下位机:CC2530 OS:vmware + ubuntu

在这里彭老师采用的是CC2530,读者也可以采用其他的板子,我们只需要该板子有串口,可以和PC通信,同时板子上有可设置的led灯、继电器以及可以采集数据的传感器即可。

2. 硬件连接图

硬件连接图如下:

82.7.png

该款CC2530已经集成了CH340芯片,usb线连接电脑,即可被识别。

3. pc下识别串口

如果该串口被PC获取,名字为COMn【n为某整数】。

82.8.png

4. ubuntu下识别串口

首先需要vmware抓取串口【串口在同一时刻要么被windows抓取要么被vmware抓取】,按下图所示,点击连接即可:

82.9.png


但是往往ubuntu中没有ch340的驱动,经过实际测试,ubuntu14及之前的版本都没有这个驱动,ubuntu16以上的版本有这个驱动。

如果没有ch340驱动可以用以下方法安装对应的驱动:

83..png

1 make 

2 sudo make load

3 ls /dev/ttyUSB0


按照上述步骤,会生成设备文件**/dev/ttyUSB0**。

大林上位机机器视觉_苏州电工培训_苏州PLC培训_苏州上位机培训_苏州机器视觉培训_苏州工业机器人培训_最适合电工及plc编程人员学习的上位机机器视觉课程 大林老师:15861139266(微信同号)

ls /dev/ttyUSB0 -l

crw-rw---- 1 root dialout 188, 0 Jan 15 05:45 /dev/ttyUSB0

c : 字符设备 rw-rw---- :文件操作权限

188, 0 : 主次设备号

3、4节提到的usb转串口驱动和linux下驱动源码后台【GH】回复 ch340 即可获得

83.1.png

【注意】 如果是其他开发板,自行安装其他的串口驱动。

二、模块设计

上位机和下位机的通信往往都是通过串口,linux下往往生成字符设备ttyUSB0【有的是ttyS0】,操作串口设备就只需要操作该字符设备即可。

下面我们设计上下位机的软件模块。

1. 信令

设计上位机,首先需要设计上位机下发给下位机的指令格式,上位机按照该指令格式发送命令给下位机,下位需严格按照该指令格式进行解析指令。

83.2.png

含义如下:


device:要操作的设备

data :对应的设备及其额外的数据

CRC :校验码

# :信令终止符

信令格式可以根据需要扩展或者精简。


其中device定义如下【可以根据实际情况进行扩展】:


#define DEV_ID_LED_ON    0X1

#define DEV_ID_LED_OFF    0X2

#define DEV_ID_DELAY 0X3

#define DEV_ID_GAS  0X4

【注意】 为便于理解,我们暂不考虑效率问题。


2. 上传数据

下位机需要采集传感器的数据并通过串口上传,数据结构定义如下:


struct data{

 unsigned char device;

 unsigned char crc;   

 unsigned short data;

};

device 设备

data 采集的数据

crc 校验码

3. 功能模块

现在就可以开始设计软件的各个功能模块了。


下位机

83.3.png

下位主要任务就是循环接收上位机通过串口下发的数据,然后解析该指令内容,操作对应的硬件。


上位机

83.4.png

上位机主要任务是打印菜单,由用户针对菜单做出选择,然后按照指令格式封装命令,并通过串口将该命令下发给下位机。


三、 下位机功能函数

cc2530的操作原理,本文不讨论,如果是其他开发板,只需要修改串口操作函数。


1. LED初始化

/****************************************************************************

* 名    称: InitLed()

* 功    能: 设置LED灯相应的IO口

* 入口参数: 无

* 出口参数: 无

****************************************************************************/

void InitLed(void)

{

    P1DIR |= 0x01;               //P1.0定义为输出口

    LED1 = 0;   

}

2. 初始化UART

/****************************************************************

* 名    称: InitUart()

* 功    能: 串口初始化函数

* 入口参数: 无

* 出口参数: 无

*****************************************************************/

void InitUart(void)

    PERCFG = 0x00;           //外设控制寄存器 USART 0的IO位置:0为P0口位置1 

    P0SEL = 0x0c;            //P0_2,P0_3用作串口(外设功能)

    P2DIR &= ~0xC0;          //P0优先作为UART0

    

    U0CSR |= 0x80;           //设置为UART方式

    U0GCR |= 11;           

    U0BAUD |= 216;           //波特率设为115200

    UTX0IF = 0;              //UART0 TX中断标志初始置位0

    U0CSR |= 0x40;           //允许接收 

    IEN0 |= 0x84;            //开总中断允许接收中断  

}




1.png

立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607082@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1

技术支持: 易动力网络