HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    串口通信和can通信(串口通信和can通信优缺点)

    发布时间:2023-05-23 13:52:40     稿源: 创意岭    阅读: 79        

    大家好!今天让创意岭的小编来大家介绍下关于串口通信和can通信的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    只需要输入关键词,就能返回你想要的内容,有小程序、在线网页版、PC客户端和批量生成器Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    官网:https://ai.de1919.comGqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    本文目录:Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    串口通信和can通信(串口通信和can通信优缺点)Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    如何实现串口转CAN的通信?Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    电脑装的是什么上位机软件?如果支持modbus协议,,那么用一个CAN转modbus的网关就可以解决。上海泗博有这样的产品MCA-240就可以:
    产品特点:
    支持Modbus主站设备访问带有CAN接口的设备;
    配置简单,可在短期内完成网络通信;
    具有CAN帧双向缓存功能;
    技术特性:
    带Modbus从站接口,支持功能码:03、04、16;
    串口波特率:300、600、1200、2400、9600、19.2K、38.4K、57.6K、115.2Kbps可选;防人体静电
    15KV,防浪涌400W;
    CAN接口支持双向数据传输,也可只用作CAN接收或发送;
    支持CAN2.0A和CAN2.0B;1.5KV光电隔离;波特率支持1M、500K、250K、125K、100K、62.5K、
    31.25K、20K、10Kbps;
    用户不必了解CAN和Modbus技术细节,即可通过免费软件MC-123 进行配置
    如果只是电脑的232串口通信,那么就用上海泗博的SCA-102就可以,:
    能够实现在PC或者带有RS232/RS485接口设备之间进行数据交换和双向传
    输,数据交换可以采用透明传输和透明带ID传输两种传输模式,并可以通
    过软件配置CAN和RS232/RS485的参数,操作简单,使用方便
    技术特性:
    支持CAN2.0A和CAN2.0B两种CAN总线协议;
    可以实现从RS232/RS485到CAN的透明传输和透明带ID传输两种方式;
    RS232/RS485支持波特率范围:1200 ~ 115200bps;
    CAN支持波特率范围:5K ~ 1000K;
    可设置断帧超时时间:2 ~ 20字符时间;
    串口接收缓存:4.5KB(15*300Byte);
    CAN接收缓存:1.6KB (200*8Byte);
    最多可设置13个CAN滤波器;

    串口通信和can通信(串口通信和can通信优缺点)Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    stm32can通信和串口的区别Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    一、简介
    STM32F103ZET6有3个USART(通用同步和异步收发器) + 2个UART(通用异步收发器)
    分别是USART1,USART2,USART3
    和UART4,UART5
    二、USART和UART有什么区别呢?
    当进行异步通信时,这两者是没有区别的。区别在于USART比UART多了同步通信功能,同步通信需要STM32提供时钟来同步的,
    这个同步通信功能可以把USART当做SPI来用,比如用USART来驱动SPI设备。同步通信的连接示例图:
    其中RX,TX,SCLK引脚的定义,在数据手册上都可以找到:百为stm32开发板光盘芯片数据手册数据手册STM32F103xC STM32F103xD STM32F103xE.pdf
    这个区别在初学STM32的时候我们不需要去深入研究,只要知道USART有很多功能,除了全双工异步通信之外,还包括支持同步通信和单线半双工通信,支持LIN(局部互连网),智能卡协议和IrDA红外通信,以及调制解调器(CTS/RTS)等操作。
    三、数据通信格式
    我们用得最多的是全双工异步通信功能,下面我们来研究下怎么通过串口1(USART1)来收发信息,和printf功能的实现。
    通常串口通信的数据格式如下图:
    我们需要设置的数据有通信速率,数据字长,奇偶检验位,停止位。一个典型的设置是115200波特率,8位数据,无奇偶校验,1位停止位。
    这个设置在固件函数库里面,我们是通过设置USART_InitStructure结构体,然后调用USART_Init函数来实现的:
    USART_InitStructure.USART_BaudRate = 115200; //设置通信波特率为115200
    USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置通信数据格式为8位数据
    USART_InitStructure.USART_StopBits = USART_StopBits_1; //设置停止位为1位
    USART_InitStructure.USART_Parity = USART_Parity_No ; //设置为无奇偶校验
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //设置为无硬件流控制,即无CTS/RTS控制
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //设置发送使能,接收使能
    USART_Init(USART1, &USART_InitStructure); //调用USART_Init,把上面的参数分别设置进USART的控制寄存器USART1->CR1,USART1->CR2,USART1->CR3
    USART_Cmd(USART1, ENABLE); //使能串口
    大家发现,在2.0固件库的USART例程里并没有看到USART1,因为是它用USARTx宏代替的,
    其中USARTx是platform_config.h里定义的,大概是这个样子:
    #ifdef USE_USART1
    #define USARTx USART1
    #define GPIOx GPIOA
    #define RCC_APB2Periph_GPIOx RCC_APB2Periph_GPIOA
    #define GPIO_RxPin GPIO_Pin_10
    #define GPIO_TxPin GPIO_Pin_9
    #endif
    只有定义了USE_USART1,上面的#ifdef USE_USART1和#endif之间的内容才会被编译,所以在platform_config.h里也需要定义USE_USART1:
    #define USE_USART1
    这里GPIO_Pin_9是串口1的发送引脚,GPIO_Pin_10是串口1的接收引脚,也可以从百为STM32开发板的电路图上看出来:
    四、串口引脚配置
    上面USART_Init函数配置了USART1的数据通信格式,但串口能工作的前提是需要配置相应的TX,RX的引脚,这个是通过GPIO_Configuration函数来配置的:
    void GPIO_Configuration(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //打开USART1时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //打开AFIO时钟
    /* 配置 USARTx_Tx 为复用推挽输出 */
    GPIO_InitStructure.GPIO_Pin = GPIO_TxPin;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOx, &GPIO_InitStructure);
    /* 配置 USARTx_Rx 为输入悬空 */
    GPIO_InitStructure.GPIO_Pin = GPIO_RxPin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOx, &GPIO_InitStructure);
    }
    五、收发数据
    配置好USART1使用的引脚,数据通信格式,下面就可以收发数据了,
    USART_GetFlagStatus函数可以读取收发状态等,读取状态标志可以是以下几个:
    发送数据示例:
    USART_SendData(USART1, 'a'); //发送一个字符a
    接收数据示例:
    u16 RxData;
    RxData = USART_ReceiveData(USART1); //从USART1接收数据到RxData变量
    下面是串口通信printf程序里的主要功能,上电打印一串信息,把接收到的数据回显到PC上:
    /* 用printf打印一串信息到PC的超级终端或串口调试软件上 */
    printf("nrUSART Printf Example: retarget the C library printf function to the USARTnr");
    while (1)
    {
    if(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET) //判断是否有数据要接收
    {
    i = USART_ReceiveData(USARTx); //接收数据
    printf("%cnr",i&0xff); //回显到PC的超级终端或串口调试软件上
    }
    }
    六、printf的实现
    上面的printf是怎么实现的呢,这个是C标准库里定义的函数,我们是怎样把它的输出重定向到串口的呢?
    我们知道printf是调用fputc函数来打印的,所以我们只要把fputc函数重定义就可以了:
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
    PUTCHAR_PROTOTYPE
    {
    /* 调用USARTx发送一个字符*/
    USART_SendData(USARTx, (u8) ch);
    /* 等待发送完成 */
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET)
    {
    }
    return ch;
    }
    另外还要加上头文件
    #include "stdio.h"
    还要注意的是,在工程里要勾上USE MicroLIB

    以上就是关于串口通信和can通信相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。Gqy创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司


    推荐阅读:

    串口测试工具软件(串口测试工具软件有哪些)

    如何测试电脑串口是否正常(如何测试电脑串口是否正常连接)

    422串口测试方法(422 串口)

    杭州红盟引擎科技有限公司怎么样(杭州红盟引擎科技有限公司怎么样上班)

    格斗网游排行榜(格斗网游排行榜前十)