0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样用虚拟串行端口使PIC和PC相互通信

454398 来源:工程师吴畏 2019-08-01 16:54 次阅读

在本教程中,我们将介绍如何使用虚拟串口让PIC和PC相互通信

串口示意图

先决条件

由于涵盖了很多主题本教程中,您熟悉一般电子微控制器非常重要。以下是您在尝试此项目之前应该熟悉的主题的简短列表:

微控制器 - PIC18

PIC UART模块

Visual Studio

FTDI:串行通信仍然有效

过去的计算机具有并行和串行端口,允许它们与外部硬件通信。与使用起来非常复杂的较新USB端口不同,串行和并行端口是业余爱好者最好的朋友。

然而,技术已经转移并让我们陷入黑暗,没有更多用户友好的端口可以玩FTDI(Future Technology Devices International)是一家成立于1992年的半导体设备公司。自那时起,它们在电子产品界(尤其是业余爱好者)中声名鹊起。因为他们生产的IC可以通过串口桥接USB端口。换句话说,他们的IC将处理USB端,并为用户提供IC上的物理串行端口连接,以及计算机上的虚拟串行端口。

在本教程中,我们将使用VB.net生成一个可以使用虚拟串口与PIC通信的表单程序。

这个项目选择了VB.net,因为根据作者的观点和经验,VB.net是处理串口时更加用户友好。与C ++和C#不同,VB.net更宽容,使代码更容易理解。可以在几行简短的代码中在VB.net中设置串口。相比之下,在C ++或C#中,只需要更多的行来初始化端口。这并不意味着VB.net整体语言更好;它只是一种非常适合业余爱好的PIC-to-PC通信语言。

PIC串行通信

该项目的第一步是配置PIC单片机,以便我们可以使用UART模块。该初始化代码可在setup.h中找到,它将UART模块配置为在异步模式下运行,使用8位,并以10417波特的速度运行。它还配置PIC以在通过UART接收字节时触发中断;这样我们就可以立即处理输入数据以防止数据丢失。

这里的PIC代码也有一些OLED例程,因此我们可以显示当前存储在temp_text数组中的文本。每当触发接收中断时,UART字节都存储在temp_text中,并且strPos会递增。

主循环将不断清除OLED屏幕,打印temp_text数组中的数据,然后运行一个小延迟(这可以提高OLED性能)。主循环还扫描B0输入引脚,如果引脚打开,则PIC会将temp_text中的数据发送到UART,通过串口发送。

VB.net表单应用程序

要使Windows识别FTDI,相应的驱动程序需要安装(这些驱动程序可以在FTDI网站上找到)。

VB.net表单程序分两个阶段创建。第一阶段是设计表单本身,第二阶段是对表单进行编码。

无论您对Microsoft的看法是什么,在制作GUI应用程序时,VS Express都必须是其中之一。最神奇的IDE曾经构思过。您可以直接在表单中拖动所需的对象,定位它们,并更改其外观和属性,而不是逐行编码按钮和元素。但是,您应该已经知道这一点,因为这是一个预先请求!因此,使用新表单,添加您在下面的图像中看到的所有功能,或者只需打开附加的VB.net项目并复制您想要的内容。虽然布局和对象名称不是很重要,但是必须拖入一个串口对象,该对象可以在工具箱中找到。

下一步是将程序编码为向表单中的对象添加功能并使串行端口正常工作。第一个重要功能是获取可用的当前串行端口列表。单击刷新按钮时,将清除包含所有串行端口名称的组合框。然后循环遍历所有可用的串行端口,将每个串行端口名称添加到组合框。

找到串口后,打开时间将在PIC和PC之间建立连接的虚拟端口。单击打开端口按钮时,将串行端口配置为使用波特率10417(必须与PIC波特率相同),不使用奇偶校验位,并使用一个停止位。然后,通过首先将端口名称设置为组合框中的选定项目并打开open()函数来打开串行端口。请注意,此函数会执行try/catch中的所有操作,因为IO可能会出现许多错误。

那么,既然我们已经打开了一个端口,我们需要开始向PIC发送数据。这就是VB.net串口的美妙之处。我们可以使用的第一个函数是WriteLine,它基本上写一个字符串行并用一个新行终止它(通常是回车换行符)。但PIC通常不希望接收字符串,而可能更喜欢字节数据。再次,这在VB.net中是微不足道的,只需使用Write()函数完成,其中第一个参数是要发送的字节数组,第二个参数是从数组开始的位置,最后一个参数是数字要发送的字节数。

表单应用程序中的最后一个重要功能是通过串口接收数据。同样,与许多VB.net函数一样,这是微不足道的,可以使用以下两个函数之一来完成:ReadLine()和Read()。 ReadLine在接收以新行终止的字符串时很有用,但它可能导致程序挂起,因为它会等待直到收到整行。第二个读取函数是Read(),其工作方式与Write相同,其中第一个参数是用于存储数据的数组,第二个参数是从数据开始存储数据的位置,最后一个参数是从缓冲区读取的字节数。

可以使用大多数电路构造技术制作PIC电路,但最好使用临时电路。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PC
    PC
    +关注

    关注

    9

    文章

    2078

    浏览量

    154155
  • PIC
    PIC
    +关注

    关注

    8

    文章

    507

    浏览量

    87546
  • 串行端口
    +关注

    关注

    0

    文章

    31

    浏览量

    11663
收藏 人收藏

    评论

    相关推荐

    如何实现51单片机与PC机的串行通信

    51单片机与PC机的串行通信是一种常见的通信方式,它允许单片机通过串行接口与PC机进行数据交换。
    的头像 发表于 10-21 11:35 790次阅读

    怎样用THS3201实现输出功率可调?

    怎样用THS3201实现输出功率可调?
    发表于 08-26 08:28

    如何让两个ESP8266可以连续地相互通信

    客户端,它也起作用,但现在我想设置两个ESP8266以便它连续相互通信,为此我花了很多天的时间,但没有找到任何可以帮助我这样做的示例代码,如果有任何示例代码准备好,请发送我。谢谢。。
    发表于 07-12 10:12

    TUSB2036通用串行总线的2或3端口集线器数据表

    电子发烧友网站提供《TUSB2036通用串行总线的2或3端口集线器数据表.pdf》资料免费下载
    发表于 07-09 10:43 0次下载
    TUSB2036通<b class='flag-5'>用串行</b>总线的2或3<b class='flag-5'>端口</b>集线器数据表

    ESP32 WIFI SOFTAP模式可以有多个STA连接到它并让STA相互通信吗?

    我不清楚SOFT AP是否可以像一个普通的 AP 那样,可以有多个 STA 连接到它并让 STA 相互通信?
    发表于 06-20 06:27

    两块esp32-c3如何实现蓝牙相互通信

    各位大佬,求问两块esp32-c3如何实现蓝牙相互通信?应该参考vscode的esp-idf中哪个例程呢?
    发表于 06-11 06:18

    使用USBUART组件与主机PC通信,如果在串行端口打开的情况下终止固件,主机端为什么会报错?

    我正在使用 USBUART 组件与主机 PC 通信,我一直在寻找某种机制来关闭 MCU 端的串行端口,或者至少通知主机我将关闭端口。 我遇到
    发表于 06-03 08:41

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?
    发表于 05-07 06:55

    stm32f100怎样用重映射功能?

    的是stm32f100c8t6b芯片,现在想用将PB1映射为TIM1_CH3N,在调用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)时, GPIO_PinAFConfig和GPIO_AF_TIM1都没定义,stm32f100
    发表于 05-07 06:06

    在嵌入式设计中扩展串行端口的入门知识

    大多数嵌入式系统都至少提供两个串口。然而,有些系统需要更多。因此,这需要以某种方式扩展串行端口的数量。设计人员可用的一些选择包括 USB 到串行端口、I2C 到
    发表于 05-03 09:30 249次阅读
    在嵌入式设计中扩展<b class='flag-5'>串行</b><b class='flag-5'>端口</b>的入门知识

    STM32 USB虚拟串口正常通信PC提示无法识别的原因?

    STM32 USB虚拟串口与PC通信过程中频繁插拔导致PC提示USB设备无法识别,但查看设备管理器串口的枚举和状态都是正常的,而且与串口调试工具的
    发表于 04-15 08:13

    STM32F412G-DISCO怎样用MX生成fatfs的代码?

    STM32F412G-DISCO怎样用MX生成fatfs的代码? SD卡例程能跑,但mx生成的代码不能正常运行,我生成代码后是不是还要配置一些东西?(我生成后只写了测试代码) 问题解决了,虽然我不知道我为什么不能直接使用mx生成的代码去操作sd卡,但我通过复制粘贴例程的代码完成了测试。
    发表于 03-12 08:15

    什么是串行端口?有哪几种分类?

    端口有几种不同的分类,包括以下几种: 1. RS-232:RS-232是一个标准的串行通信接口,最早用于连接计算机和调制解调器、打印机等外部设备。它使用9针的D型插座,每个针脚有不同的功能,如数据传输、数据接收、控制信号等。RS
    的头像 发表于 02-02 15:40 2078次阅读

    求助,是否可以使用PIC监控串行端口

    是否可以使用 PIC 监控串行端口
    发表于 01-22 06:28

    通过双线RS485串行端口PC进行通信,波特率设置460800 bps不起作用的原因?

    在我的一个项目中,我通过双线 485 串行端口PC 进行通信,波特率为 115200 bps,但 TESTBOARD_150PC_OUT
    发表于 01-18 10:18