• 工作总结
  • 工作计划
  • 心得体会
  • 述职报告
  • 事迹材料
  • 申请书
  • 作文大全
  • 读后感
  • 调查报告
  • 励志歌曲
  • 请假条
  • 创先争优
  • 毕业实习
  • 财神节
  • 高中主题
  • 小学一年
  • 名人名言
  • 财务工作
  • 小说/有
  • 承揽合同
  • 寒假计划
  • 外贸信函
  • 励志电影
  • 个人写作
  • 其它相关
  • 生活常识
  • 安全稳定
  • 心情短语
  • 爱情短信
  • 工会工作
  • 小学五年
  • 金融类工
  • 搞笑短信
  • 医务工作
  • 党团工作
  • 党校学习
  • 学习体会
  • 下半年工
  • 买卖合同
  • qq空间
  • 食品广告
  • 办公室工
  • 保险合同
  • 儿童英语
  • 软件下载
  • 广告合同
  • 服装广告
  • 学生会工
  • 文明礼仪
  • 农村工作
  • 人大政协
  • 创意广告
  • 您现在的位置:六七范文网 > 毕业实习 > 正文

    计算机通信技术仪器中应用,课程实验报告基于stm32仪器通信

    来源:六七范文网 时间:2021-08-02 07:15:36 点击:

     西安电子科技大学

     计算机通信技术在仪器中的应用

     课程实验报告

     机电工程学院 1 班 姓名

      学号 小组排名(个人排位/总人数):

     10/12 实验日期

     2020 年

     11 月 25 日

     评定项目 A B C D 评定项目 A B C D 算法正确

      界面美观,布局合理

      程序结构合理

      操作熟练

      语法语义正确

      解析完整

      实验结果正确

      文字流畅

      报告规范

      排位评分

      指导教师评语:

     指导教师:

     年

      月

      日 实验报告内容基本要求及参考格式

     一、实验目的 二、实验所用仪器(或实验环境)

     三、实验基本原理及步骤(或方案设计及理论计算)

     四、实验数据记录(或仿真及软件设计)

     五、实验结果分析及回答问题(或测试环境及测试结果)

      成绩

     1. 研究内容 本小组按照实验要求,使用 STM32F103 开发板进行了 RS232,RS485,CAN通信实验。STM32F103 是意法半导体推出的一款基于 Cortex-M3 内核的高性能微控制器,支持最高 72MHz 工作频率,片内集成了定时器、ADC、IIC、SPI 等常用模块。STM32F103 以凭借其优越的性能获得了用户的广泛认可,在嵌入式控制器领域占有重要的地位。STM32F103 片上资源如图 1 所示。本实验所用的STM32F767IGT6 芯片采用 LQFP 封装,共 176 个引脚,详细管脚如图 2 所示。

     本实验使用的平台是由正点原子推出的一款基于 STM32F103 的开发板,板上集成了大量常用外围接口(如 RS232 接口、RS485 接口、CAN 通信接口、LCD 彩屏等),且具有完备的实验指导书,是学习 STM32 的优秀平台。

     图 1 STM32F103 片上资源

      图 2

     STM32F103ZET6 管脚

      图 3

     开发板 PCB 图

     1.1 RS232 双机通信

     RS232 标准接口是常用的串行通信接口标准之一。RS232 具有采用负逻辑传送,传送距离较远,有两种物理接口,可灵活的波特率选择,信号线少等特点。规定逻辑“1”的电平为-5~-15V,逻辑“0”的电平为+5~+15V,抗干扰能力强。

     STM32 开发板集成了 RS232 专用电平控制芯片 SP3232,该芯片实现了 RS232电平与 TTL 电平之间的转换。用户可使用 STM32 片上 USART 通信接口向 SP3232芯片发送数据,进而实现 RS232 双机通信。

     1.2 RS485 多机通信 上述 RS232 接口只能实现点到点的通信,随着智能仪表及计算机技术的发展,要求仪器仪表具有联网通信接口,RS485 应运而生。RS485 通信网络通常采用总线结构,可以很容易实现多机组网通信。

     RS485 的关键特性有:差分传输增加噪声抗扰度,减少噪声辐射、长距离链

     路,最长可达 4000 英尺)、数据速率高达 10Mbps(40 英寸内,约 12.2 米)、同一总线可以连接多个驱动器和接收器、宽共模范围允许驱动器和接收器之间存在地电位差异,允许最大共模电压-7-12V。

     RS485 通信网络通常采用总线结构,可以很容易实现多机组网通信。STM32 开发板集成了 RS485 专用电平控制芯片 SP3485,可将 USART 数据转换成 RS485 电平并发送。基于以上原理,本小组进行了 RS485 组网通信实验。

     1.3 CAN 多机通信 CAN(控制器局域网络)是国际上应用最广泛的现场总线之一,CAN 协议作为一种多线路网络通信系统,以其时分多主、非破坏性总线仲裁和自动检错重发等灵活、可靠的通信技术,及低廉的价格,被广泛地应用于工业自动化生产线、汽车、传感器、医疗设备、智能化大厦、电梯控制、环境控制等分布式实时系统。CAN 总线接口集成了物理层和数据链路层的协议,可完成对通信数据的成帧处理。CAN 属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较之许多 RS-485 基于 R 线构建的分布式控制系统而言,基于 CAN 总线的分布式控制系统在以下方面具有明显的优越性。

     STM32 具有片内 CAN 控制模块,STM32 开发板集成了 CAN 数据收发专用芯片TJA1050,该芯片可以实现 CAN 电平与 TTL 电平的转换,进而实现使用单片机收发 CAN 数据。基于以上原理,本小组进行了 CAN 总线组网通信实验。

     2. 设计思路及方案 2.1 RS232 双机通信 STM32 开发板集成了 RS232 电平控制芯片 SP3232(原理图如图 4 所示),因此在进行实验时无需搭建外围电路,只需以 USART 协议为基础,对通信代码进行改进,即可完成通信。开发平台提供了 RS232 点对点的标准通信接口,可实现双机通信,板载 RS232 物理接口如图 5 所示。

     图 4

     RS232 模块电路图

     图 5 板载 RS232 标准接口

     2.2 RS485 多机通信 与 RS232 相同,开发板也集成了 RS485 电平控制芯片 SP3485(原理图如图6 所示),因此在进行 RS485 实验时,软件层面采用与 RS232 类似的方案,即以USART 协议为基础,对通信代码进行改进,进而完成实验。只需以 USART 协议为基础,RS485 采用总线结构,多机组网实现多机通信。板载 RS485 物理接口如图 7 所示。

     图 6 RS485 模块电路图

      图 7 板载 RS485 接口

     2.3 CAN 多机通信 CAN 总线接口提供了专门的数据链路层协议,故不能再采用 USART 协议,而是利用 STM32 片内CAN 控制模块结合电平转换芯片 TJA1050 实现数据收发,同样,CAN 通信实验也采用总线结构组网,完成多机通信。CAN 模块电路图以及板载物理接口如图 8 以及图 9 所示。

     图 8

     CAN 模块电路图

     图 9 板载 CAN 通信接口

     3. 资源使用情况 本小组在实验过程中充分利用了 STM32 片内资源以及开发板资源。在进行RS232 实验时,使用了 STM32 片内的 USART 串口模块,板上的 RS232 电平控制芯片 SP3232 以及标准接口等资源;在进行 RS485 实验时,使用了 STM32 片内的 USART 串口模块,板上的 RS485 电平控制芯片 SP3485 等资源;在进行CAN 实验时,使用了 STM32 片内的 CAN 总线模块,以及板上的 CAN 电平控制芯片 TJA1050。此外,为保证通信效果,本小组还使用了按键、定时器、LCD显示器等辅助资源。

     4. 软件流程图 4.1 RS232

     4.2 RX485

     4.3 CAN 通信

     5. 调试过程 在调试过程中,为了直观的观察程序的执行情况,本小组广泛地使用了“串口助手”软件,该软件搭配 CH340 模块使用,可将 STM32 串口输出的 USART信号转化成 PC 即可以识别的 USB 信号,并在软件客户端显示接收到的数据。通过该软件,我们可以很容易地对 bug 进行定位,同时可以验证通信数据的正确性。图 10 是该软件的界面图,我们只需配置好波特率并打开相应的端口即可实现 STM32 到 PC 机的通信。

     图 10 串口调试软件 经过调试,本小组完成了本课程所要求的三种通信实验,实验结果如图 11 所示。

      (a) RS232 双机通信

      (b) RS485 多机通信

      (c) CAN 多机通信 图 11 仪器通信实验效果图

      限于测试条件,需要多机通信的实验(RS485 实验、CAN 实验)暂时使用两台机器进行测试,再需要多机通信的场合,只需要用按照总线结构进行拓展即可。

     6. 源代码 6.1 RS232 实验 #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h"

      int main(void)

     {

      u16 i,cnt=0;

     u8 key;

     u8 USART_TX_BUF[]={0, 1, 2,3,4,5,6,7,8,9};

     delay_init();

      //延时函数初始化

      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

     //设置 NVIC 中断分组 2:2 位抢占优先级,2 位响应优先级

     uart_init(115200);

     //串口初始化为 115200

      LED_Init();

     //LED 端口初始化

     KEY_Init();

     //初始化与按键连接的硬件接口

     LCD_Init();POINT_COLOR=RED;

     BACK_COLOR=0xb509;

     LCD_Clear(0xb509);

     LCD_ShowString(30,50,200,16,16,"********** STM32 ***********");

      LCD_ShowString(30,70,200,16,16,"******* TEST 232 TEST ******");

      LCD_ShowString(30,90,200,16,16,"Press KEY_UP to Send Data");

     LCD_ShowString(30,110,200,16,16,"********** NO.4 **********");

     LCD_ShowString(30,130,200,16,16,"Receive:");

     LCD_ShowString(30,170,200,16,16,"Send:");

      LCD_Draw_Circle(20,40,8);

     LCD_DrawRectangle(10,30,240,300);

      while(1)

      {

      LED0=!LED0;

      delay_ms(500);

      for(i=0;i<10;i++)

     {

     USART_SendData(USART2,USART_TX_BUF[i]);//发送 5 个字节

      LCD_ShowNum(30,190,(u8)USART_TX_BUF[i], 1, 24);

     //显示数据

      delay_ms(1000);

      }

     // LCD_ShowString(30,190,5,16,16,"

     ");

     //显示数据

     }

      }

      6.2 RS485 实验 #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h"

      #include "rs485.h"

     int main(void)

     {

     u8 key;

     u8 i=0,t=0;

     u8 cnt=0;

     u8 rs485buf[5];

      BACK_COLOR=0x1509;

     delay_init();

      //延时函数初始化

      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组 2:2 位抢占优先级,2 位响应优先级

     uart_init(115200);

      //串口初始化为 115200

     LED_Init();

     //初始化与 LED 连接的硬件接口

     LCD_Init();

      //初始化 LCD

     KEY_Init();

     //按键初始化

      RS485_Init(9600); //初始化 RS485

     LCD_Clear(0x1509);

      POINT_COLOR=RED;//设置字体为红色

     LCD_ShowString(30,50,200,16,16,"********** STM32 ***********");

      LCD_ShowString(30,70,200,16,16,"******* TEST 485 TEST ******");

      LCD_ShowString(30,90,200,16,16,"Press KEY_UP to Send Data");

     LCD_ShowString(30,110,200,16,16,"********** NO.4 **********");//显示提示信息

     POINT_COLOR=BLUE;//设置字体为蓝色

      LCD_ShowString(30,150,200,16,16,"Count:");

      //显示当前计数值

      LCD_ShowString(30,170,200,16,16,"Send Data:");

     //提示发送的数据

      LCD_ShowString(30,210,200,16,16,"Receive Data:");

     //提示接收到的数据

      while(1)

     {

      key=KEY_Scan(0);

      if(key==KEY0_PRES)//KEY0 按下,发送一次数据

      {

     for(i=0;i<5;i++)

     {

      rs485buf[i]=cnt+i;//填充发送缓冲区

      LCD_ShowxNum(30+i*32,190,rs485buf[i],3,16,0X80); //显示数据

      }

     RS485_Send_Data(rs485buf,5);//发送 5 个字节

     }

     RS485_Receive_Data(rs485buf,&key);

      if(key)//接收到有数据

      {

     if(key>5)key=5;//最大是 5 个数据.

      for(i=0;i<key;i++) LCD_ShowxNum(30+i*32,230,rs485buf[i],3,16,0X80); //显示数据

     }

      t++;

     delay_ms(10);

      if(t==20)

      {

     LED0=!LED0;//提示系统正在运行

      t=0;

     cnt++;

     LCD_ShowxNum(30+48,150,cnt,3,16,0X80); //显示数据

      }

      }

     } 6.3 CAN 实验 #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h"

     #include "can.h"

     int main(void)

     {

     u8 key;

     u8 i=0,t=0;

     u8 cnt=0;

     u8 canbuf[8];

     u8 res;

     u8 mode=CAN_Mode_LoopBack;//CAN 工作模式;CAN_Mode_Normal(0):普通模式,CAN_Mode_LoopBack(1):环回模式

      delay_init();

      //延时函数初始化

      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组 2:2 位抢占优先级,2 位响应优先级

     uart_init(115200);

      //串口初始化为 115200

     LED_Init();

     //初始化与 LED 连接的硬件接口

     LCD_Init();

      //初始化 LCD

      KEY_Init();

     //按键初始化

     CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack); //CAN 初始化环回模式,波特率 500Kbps

      POINT_COLOR=RED;//设置字体为红色

      LCD_ShowString(30,50,200,16,16,"********** STM32 ***********");

      LCD_ShowString(30,70,200,16,16,"******* TEST CAN TEST ******");

      LCD_ShowString(30,90,200,16,16,"Press KEY_UP to Send Data");

     LCD_ShowString(30,110,200,16,16,"********** NO.4 **********");

     LCD_ShowString(60,130,200,16,16,"LoopBack Mode");

     POINT_COLOR=0xe232;

      LCD_ShowString(60,150,200,16,16,"KEY0:Send WK_UP:Mode");//显示提示信息

     POINT_COLOR=BLUE;//设置字体为蓝色

      LCD_ShowString(60,170,200,16,16,"Count:");

      //显示当前计数值

      LCD_ShowString(60,190,200,16,16,"Send Data:");

     //提示发送的数据

      LCD_ShowString(60,250,200,16,16,"Receive Data:"); //提示接收到的数据

      while(1)

     {

      key=KEY_Scan(0);

      if(key==KEY0_PRES)//KEY0 按下,发送一次数据

      {

     for(i=0;i<8;i++)

     {

      canbuf[i]=cnt+i;//填充发送缓冲区

      if(i<4)LCD_ShowxNum(60+i*32,210,canbuf[i],3,16,0X80); //显示数据

      else LCD_ShowxNum(60+(i-4)*32,230,canbuf[i],3,16,0X80); //显示数据

      }

      res=Can_Send_Msg(canbuf,8);

      //发送 8 个字节

      if(res)LCD_ShowString(60+80,190,200,16,16,"Failed");

     //提示发送失败

     else LCD_ShowString(60+80,190,200,16,16,"OK

     ");

     //提示发送成功

     }else if(key==WKUP_PRES)//WK_UP 按下,改变 CAN 的工作模式

      {

     ...

    推荐访问:仪器 通信技术 课程