【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送

这篇具有很好参考价值的文章主要介绍了【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 背景说明

        使用小华(华大)的MCU HC32F07X实现 CAN 通讯配置和使用

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

二 原理分析

【1】CAN原理说明(参考文章《CAN通信详解》):

        CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。

        (i)CAN通信形式:CAN 使用称为 CANH / CANL 的通信线路执行传输和接收。电位差较小的电信号称为隐性信号,其逻辑值为1。电位差较大的电信号称为显性信号,其逻辑值0。如果通信总线上发生显性和隐性冲突,则显性优先。总线空闲时保持隐性。

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

        (ii)CAN数据格式:CAN的数据定义了有5种帧类型:

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

        (ii)CAN数据帧:数据帧一般由 7 个段构成,即:

(1) 帧起始。表示数据帧开始的段。
(2) 仲裁段。表示该帧优先级的段。
(3) 控制段。表示数据的字节数及保留位的段。
(4) 数据段。数据的内容,一帧可发送 0~8 个字节的数据。
(5) CRC 段。检查帧的传输错误的段。
(6) ACK 段。表示确认正常接收的段。
(7) 帧结束。表示数据帧结束的段

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

        图中 D 表示显性电平, R 表示隐形电平。

        更多具体内容不再赘述,可以参考上面的文章链接或者自行搜索。

【2】HC32F07X的CAN外设

        芯片CAN外设的主要特性:

■ 完全支持 CAN2.0A/CAN2.0B 协议。
■ 向上兼容 CAN-FD 协议。
■ 支持最高通信波特率 1Mbit/s
■ 支持 1~1/256 的波特率预分频, 灵活配置波特率。
■ 10 个接收缓冲器
- FIFO 方式
- 错误或者不被接收的数据不会覆盖存储的消息
■ 1 个高优先主发送缓冲器 PTB
■ 4 个副发送缓冲器 STB
- FIFO 方式
- 优先级仲裁方式
■ 8 组独立的筛选器
- 支持 11 位标准 ID 和 29 位扩展 ID
- 可编程 ID CODE 位以及 MASK 位
■ PTB/STB 均支持支持单次发送模式
■ 支持静默模式
■ 支持回环模式
■ 支持捕捉传输的错误种类以及定位仲裁失败位置
■ 可编程的错误警告值
■ 支持 ISO11898-4 规定时间触发 CAN 以及接收时间戳

        系统框图如下:

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

        更多详细的内容可以参考HC32F07X芯片的DATASHEET。

三 CAN通讯硬件设计

        以下推荐了两个CAN收发的硬件电路,可以将外部的 CANH/CANL 差分信号,转换为 CAN_TX/CAN_RX 信号用以内部MCU处理。一个是官方提供的,一个是开发板提供的,都可以正常使用。

        注意CAN通信需要5V,用以给收发器供电

【1】推荐电路1

        参考官方的硬件设计指南《AN_HC32L072_HC32L073_HC32F072系列硬件开发指南_Rev1.1》,里面对于CAN通信收发的硬件电路有如下推荐电路,其中使用了NXP的 TJA1042 作为收发器

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

【2】推荐电路2

        使用的周立功开发板中也引出了CAN功能,其中使用了NXP的TJA1051T作为收发器

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

四 CAN通讯软件配置

        选用引脚 PD00(CAN_RX)、PD01(CAN_TX)、PC12(CAN_STB)实现CAN通信功能,使用时钟频率为48MHz(官方例程使用的是外部8M晶振),CAN通讯波特率为1M,标准帧ID号为1。

【1】系统时钟配置

static void App_SysClkInit(void)
{
    stc_sysctrl_clk_cfg_t stcCfg;
    stc_sysctrl_pll_cfg_t stcPLLCfg;

    Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE);    ///< 使能FLASH模块的外设时钟
    Flash_WaitCycle(FlashWaitCycle1);
    Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz);             ///< PLL使用RCH作为时钟源,因此需要先设置RCH

    stcPLLCfg.enInFreq    = SysctrlPllInFreq4_6MHz;     ///< RCH 4MHz
    stcPLLCfg.enOutFreq   = SysctrlPllOutFreq36_48MHz;  ///< PLL 输出48MHz
    stcPLLCfg.enPllClkSrc = SysctrlPllRch;              ///< 输入时钟源选择RCH
    stcPLLCfg.enPllMul    = SysctrlPllMul12;            ///< 4MHz x 12 = 48MHz
    Sysctrl_SetPLLFreq(&stcPLLCfg);

    ///< 选择PLL作为HCLK时钟源;
    stcCfg.enClkSrc  = SysctrlClkPLL;
    ///< HCLK SYSCLK/2
    stcCfg.enHClkDiv = SysctrlHclkDiv1;
    ///< PCLK 为HCLK/8
    stcCfg.enPClkDiv = SysctrlPclkDiv1;
    ///< 系统时钟初始化
    Sysctrl_ClkInit(&stcCfg);
}

【2】CAN初始化GPIO

//CAN通信引脚定义
#define CAN_RX_PORT     (GpioPortD)
#define CAN_RX_PIN      (GpioPin0)
#define CAN_TX_PORT     (GpioPortD)
#define CAN_TX_PIN      (GpioPin1)
#define CAN_STB_PORT    (GpioPortC)
#define CAN_STB_PIN     (GpioPin12)

#define  APB1_CLK       48000000    //CAN 的输入时钟
#define  CAN_BAUD       1000000     //CAN 的波特率

/**************************************************************************
* 函数名称: COM_Init
* 功能描述: CAN通信初始化GPIO
**************************************************************************/
void COM_Init(void)
{
    stc_gpio_cfg_t stcGpioCfg;

    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
    
    stcGpioCfg.enDir = GpioDirIn;       ///< 端口方向配置->输入
    stcGpioCfg.enDrv = GpioDrvL;        ///< 端口驱动能力配置->高驱动能力
    stcGpioCfg.enPu  = GpioPuDisable;   ///< 端口上下拉配置->无
    stcGpioCfg.enPd  = GpioPdDisable;
    stcGpioCfg.enOD  = GpioOdDisable;   ///< 端口开漏输出配置->开漏输出关闭
    stcGpioCfg.enCtrlMode = GpioAHB;    ///< 端口输入/输出值寄存器总线控制模式配置->AHB
    Gpio_Init(CAN_RX_PORT, CAN_RX_PIN, &stcGpioCfg);
    
    stcGpioCfg.enDir = GpioDirOut;
    Gpio_Init(CAN_TX_PORT, CAN_TX_PIN, &stcGpioCfg);
    Gpio_Init(CAN_STB_PORT, CAN_STB_PIN, &stcGpioCfg);
    
    ///<CAN RX\TX复用功能配置
    Gpio_SetAfMode(CAN_RX_PORT, CAN_RX_PIN, GpioAf1);
    Gpio_SetAfMode(CAN_TX_PORT, CAN_TX_PIN, GpioAf1);
    ///<STB 低-PHY有效
    Gpio_ClrIO(CAN_STB_PORT, CAN_STB_PIN);
}

【3】CAN波特率自适应配置接口

/**************************************************************************
* 函数名称: COM_BaudCfg
* 功能描述: CAN通信波特率自动配置
* 其他说明: 48MHz主频,1M波特率计算得到:SJW=2, PRESC=1-1, SEG_2=15, SEG_1=30
             若输入500K波特率,PRESC为2-1; 输入250K波特率,PRESC为4-1
**************************************************************************/
void COM_BaudCfg(stc_can_init_config_t *p_stcCanInitCfg, uint32_t src_clk, uint32_t baud)
{
    uint32_t i,value = baud,record = 1;
    uint32_t remain = 0,sum_prescaler = 0;
    while(( baud == 0 )||( src_clk == 0 ));
    sum_prescaler = src_clk / baud;
    for ( i = 73; i > 3; i-- ) {
        remain = sum_prescaler - ((sum_prescaler / i)*i);
        if( remain == 0 ) {
          record = i;
          break;
        } else {
          if (remain < value) {
              value = remain;
              record = i;
          }
        }
    }

    /* 设置重新同步跳跃宽度为2个时间单位 */
    p_stcCanInitCfg->stcCanBt.SJW = 2;
    p_stcCanInitCfg->stcCanBt.PRESC = (sum_prescaler/record) - 1;
    p_stcCanInitCfg->stcCanBt.SEG_2 = (record - 3) / 3;
    p_stcCanInitCfg->stcCanBt.SEG_1 = (record - 3) - p_stcCanInitCfg->stcCanBt.SEG_2;
}

        【注】:CAN波特率的计算和配置,也可以使用CAN波特率计算器工具来计算得到(下载地址:CAN波特率计算器下载):

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

【4】CAN初始化配置(其中,波特率配置为1M,滤波器配置标准帧ID为1

/**************************************************************************
* 函数名称: COM_Cfg
* 功能描述: CAN通信初始化配置
**************************************************************************/
void COM_Cfg(void)
{
    stc_can_init_config_t   stcCanInitCfg;
    stc_can_filter_t        stcFilter;

    Sysctrl_SetPeripheralGate(SysctrlPeripheralCan, TRUE);
    
    ///<CAN 波特率配置
    COM_BaudCfg(&stcCanInitCfg, APB1_CLK, CAN_BAUD);    //48MHz主频,1M波特率
    
    stcCanInitCfg.stcWarningLimit.CanErrorWarningLimitVal = 16-1;
    stcCanInitCfg.stcWarningLimit.CanWarningLimitVal = 10;
    stcCanInitCfg.enCanRxBufAll  = CanRxNormal;
    stcCanInitCfg.enCanRxBufMode = CanRxBufNotStored;
    stcCanInitCfg.enCanSTBMode   = CanSTBFifoMode;
    CAN_Init(&stcCanInitCfg);

    ///<CAN 滤波器配置
    stcFilter.enAcfFormat = CanAllFrames;
    stcFilter.enFilterSel = CanFilterSel1;
    stcFilter.u32CODE     = 0x00000001;
    stcFilter.u32MASK     = 0x1FFFFFFF;
    CAN_FilterConfig(&stcFilter, TRUE);

    CAN_IrqCmd(CanRxIrqEn, TRUE);
    EnableNvic(CAN_IRQn, IrqLevel0, TRUE);
}

【5】CAN中断服务子程序(用于CAN接收)

stc_can_rxframe_t       stcRxFrame;
stc_can_txframe_t       stcTxFrame;
uint8_t                 u8RxFlag = FALSE;

/**************************************************************************
* 函数名称: Can_IRQHandler
* 功能描述: CAN中断服务函数
**************************************************************************/
void Can_IRQHandler(void)
{
    if(TRUE == CAN_IrqFlgGet(CanRxIrqFlg))
    {
        CAN_IrqFlgClr(CanRxIrqFlg);
        CAN_IrqCmd(CanRxIrqEn, FALSE);

        CAN_Receive(&stcRxFrame);

        u8RxFlag = TRUE;
    }
}

【6】CAN发送接口(用于CAN发送)

/**************************************************************************
* 函数名称: COM_Tx
* 功能描述: CAN通信发送测试
**************************************************************************/
void COM_Tx(void)
{
    //中断接收,循环发送
    uint8_t u8Idx = 0;
    
    if(TRUE == u8RxFlag)
    {
        u8RxFlag = FALSE;

        if(1 == stcRxFrame.Cst.Control_f.RTR)
        {
            return;
        }

        //<<Can Tx
        stcTxFrame.StdID         = stcRxFrame.StdID;
        stcTxFrame.Control_f.DLC = stcRxFrame.Cst.Control_f.DLC;
        stcTxFrame.Control_f.IDE = stcRxFrame.Cst.Control_f.IDE;
        stcTxFrame.Control_f.RTR = stcRxFrame.Cst.Control_f.RTR;

        for(u8Idx=0; u8Idx<stcRxFrame.Cst.Control_f.DLC; u8Idx++)
        {
            stcTxFrame.Data[u8Idx] = stcRxFrame.Data[u8Idx];
        }

        CAN_SetFrame(&stcTxFrame);
        CAN_TransmitCmd(CanPTBTxCmd);

        CAN_IrqCmd(CanRxIrqEn, TRUE);
    }
}

【7】主函数调用

int32_t main(void)
{
    //系统时钟
    App_SysClkInit();

    //通信模块
    COM_Init();
    COM_Cfg();
    
    while(1)
    {
        //通信
        COM_Tx();
        delay1ms(10);
    }
}

五 CAN通讯测试1(中断接收,Echo发送单帧)

        进行CAN测试的方法很多,如果没有USB-CAN通信转换工具/CAN协议分析工具,可以增加CAN外部回环或者内部回环的配置,配合Log串口输出或者仿真器Debug进行测试。我这边使用了USB-CAN通信转换工具(CAN-II)/CAN协议分析工具(CANTest)直接进行收发测试:

【1】选择 CANTest 中的对应设备 USBCAN2:

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

【2】匹配软件中的波特率为1M,确定并启动CAN:

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

【3】修改帧ID为1,点击发送,可以看到上位机发送数据到测试板,经由测试板返回相同长度及内容的数据

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

        以上配置及测试成功。

六 CAN通讯测试2(中断接收,发送多帧)

【1】发送多帧背景说明:

        实际应用中,往往需要收到一组请求之后,发送多组数据。尝试直接在 COM_Tx 函数中紧跟着第一帧数据发送之后再发一帧,有了如下操作:

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

        实测上述连续发送的方法是错误的,因为时间间隔太短,前一组通过主缓冲器(PTB)发送的数据还没有完成就又收到新的发送命令,导致后发送的命令失败

【2】同一个缓冲器连续发送多帧,中间加延时的方法:

        使用同一个主缓冲器(PTB)发送,中间增加1ms延时等待上一帧发送结束在我的系统上实测这个延迟的时间要大于500us,其他环境不绝对):

/**************************************************************************
* 函数名称: COM_Tx
* 功能描述: CAN通信发送测试
* 其他说明: 
**************************************************************************/
void COM_Tx(void)
{
    uint8_t u8Idx = 0;
    
    if(TRUE == u8RxFlag)
    {
        u8RxFlag = FALSE;

        if(1 == stcRxFrame.Cst.Control_f.RTR)
        {
            return;
        }

        //<<主缓冲器Can Tx第一帧
        stcTxFrame.StdID         = 0;
        stcTxFrame.Control_f.DLC = 8;
        stcTxFrame.Control_f.IDE = 0;
        stcTxFrame.Control_f.RTR = 0;
        stcTxFrame.TBUF32_2[0] = 0;
        stcTxFrame.TBUF32_2[1] = 1;
        CAN_SetFrame(&stcTxFrame);
        CAN_TransmitCmd(CanPTBTxCmd);   //PTB发送命令
        
        delay1ms(1);    //若使用单一缓冲器,连续发送失败,需要中间加延时等待上一帧发送结束(实测大于500us)
        
        stcTxFrame.StdID         = 1;
        stcTxFrame.Control_f.DLC = 8;
        stcTxFrame.Control_f.IDE = 0;
        stcTxFrame.Control_f.RTR = 0;
        stcTxFrame.TBUF32_2[0] = 2;
        stcTxFrame.TBUF32_2[1] = 3;
        CAN_SetFrame(&stcTxFrame);
        CAN_TransmitCmd(CanPTBTxCmd);   //PTB发送命令

        CAN_IrqCmd(CanRxIrqEn, TRUE);
    }
}

        测试结果如下:  

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

【3】使用不同缓冲器发送多帧的方法:

        除了上述同一个缓冲器加延时以实现连续发送多帧数据之外,还可以依赖MCU CAN外设提供的另外几组缓冲器实现连续发送多帧数据的目的(更可靠)

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

        由芯片说明书可以看到,主缓冲器(PTB)只能缓冲一帧数据。而另外的副缓冲器(STB)可以缓冲4帧数据。实现代码如下(收到信号之后,一次发送5帧数据,其中第一帧挂载主缓冲器PTB上,其他四帧挂载副缓冲器STB上):

/**************************************************************************
* 函数名称: COM_Tx
* 功能描述: CAN通信发送测试
* 其他说明: 
**************************************************************************/
void COM_Tx(void)
{
    uint8_t u8Idx = 0;
    
    if(TRUE == u8RxFlag)
    {
        u8RxFlag = FALSE;

        if(1 == stcRxFrame.Cst.Control_f.RTR)
        {
            return;
        }

        //<<主缓冲器Can Tx第一帧
        stcTxFrame.StdID         = 0;
        stcTxFrame.Control_f.DLC = 8;
        stcTxFrame.Control_f.IDE = 0;
        stcTxFrame.Control_f.RTR = 0;
        stcTxFrame.TBUF32_2[0] = 0;
        stcTxFrame.TBUF32_2[1] = 1;
        CAN_SetFrame(&stcTxFrame);
        CAN_TransmitCmd(CanPTBTxCmd);   //PTB发送命令
        
//        delay1ms(1);    //若使用单一缓冲器,连续发送失败,需要中间加延时等待上一帧发送结束(实测大于500us)
        
        //<<副缓冲器Can Tx第二帧
        stcTxFrame.StdID         = 1;
        stcTxFrame.Control_f.DLC = 8;
        stcTxFrame.Control_f.IDE = 0;
        stcTxFrame.Control_f.RTR = 0;
        stcTxFrame.enBufferSel   = CanSTBSel;
        stcTxFrame.TBUF32_2[0] = 2;
        stcTxFrame.TBUF32_2[1] = 3;
        CAN_SetFrame(&stcTxFrame);
        //<<副缓冲器Can Tx第三帧
        stcTxFrame.StdID         = 2;
        stcTxFrame.Control_f.DLC = 8;
        stcTxFrame.Control_f.IDE = 0;
        stcTxFrame.Control_f.RTR = 0;
        stcTxFrame.enBufferSel   = CanSTBSel;
        stcTxFrame.TBUF32_2[0] = 4;
        stcTxFrame.TBUF32_2[1] = 5;
        CAN_SetFrame(&stcTxFrame);
        //<<副缓冲器Can Tx第四帧
        stcTxFrame.StdID         = 3;
        stcTxFrame.Control_f.DLC = 8;
        stcTxFrame.Control_f.IDE = 0;
        stcTxFrame.Control_f.RTR = 0;
        stcTxFrame.enBufferSel   = CanSTBSel;
        stcTxFrame.TBUF32_2[0] = 6;
        stcTxFrame.TBUF32_2[1] = 7;
        CAN_SetFrame(&stcTxFrame);
        //<<副缓冲器Can Tx第五帧
        stcTxFrame.StdID         = 4;
        stcTxFrame.Control_f.DLC = 8;
        stcTxFrame.Control_f.IDE = 0;
        stcTxFrame.Control_f.RTR = 0;
        stcTxFrame.enBufferSel   = CanSTBSel;
        stcTxFrame.TBUF32_2[0] = 8;
        stcTxFrame.TBUF32_2[1] = 9;
        CAN_SetFrame(&stcTxFrame);
        CAN_TransmitCmd(CanSTBTxAllCmd);    //STB所有帧发送命令

        CAN_IrqCmd(CanRxIrqEn, TRUE);
    }
}

        测试结果如下:

【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送,嵌入式,嵌入式硬件,小华半导体,can,通讯,HC32F

        综上,CAN通信收发测试完成。文章来源地址https://www.toymoban.com/news/detail-739713.html

到了这里,关于【嵌入式】HC32F07X CAN通讯配置和使用&配置不同缓冲器以连续发送的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集

    上一篇:[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 学C语言时,使用的printf()函数,就是通过串口打印出来的。 跟外部器件通信,比如GPS模块、蓝牙模块、wifi模块; 两个开发板之间通信,制定私有协议。 PC电脑通信,使用上位机显示数据或控制下位机。 操作:打

    2024年01月22日
    浏览(48)
  • 【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU规格参数

    一、电路原理图 【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU —— 明佳达 二、规格参数 1、 STM32F031K4U6 (16KB)闪存 32UFQFPN 核心处理器:ARM® Cortex®-M0 内核规格:32 位单核 速度:48MHz 连接能力:I²C,IrDA,LINbus,SPI,UART/USART 外设:DMA,I²S,POR,

    2024年02月04日
    浏览(35)
  • 嵌入式硬件入门——74HC138译码器(三个IO实现8选1)

    74HC138是常用的数字芯片,是一种3入8出译码器 74HC138 是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC138译码器可接受 3位 二进制加权地址输入(A0, A1和A2),并当使能时,提供 8个 互斥的低有效输出(Y0至Y7)。 74HC138是一种 译码器 ,译码是 编码 的逆过

    2023年04月23日
    浏览(38)
  • 【嵌入式系统应用开发】FPGA——基于HC-SR04超声波测距

    硬件 DE2-115 HC-SR04超声波传感器 软件 Quartus 18.1 使用DE2-115开发板驱动HC-SR04模块,并将所测得数据显示到开发板上的数码管。 HC-SR04 超声波测距模块可提供 2cm-400cm的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。图1为 HC-SR04 外观,

    2024年02月08日
    浏览(47)
  • AI嵌入式K210项目(5)-串口通讯

    串口通讯是平时大家进行调试最常用的方法,嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据。通用异步收发传输器 (UART)即可以满足这些要求,它能够灵活地与外部设备进行全双工数据交换,那么本章我们来了解下,本节课主要学习K210的串口通讯。 串

    2024年01月16日
    浏览(48)
  • 正点原子嵌入式linux驱动开发——Linux CAN驱动

    CAN是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域 ,尤其是汽车领域,汽车上大量的传感器与模块都是通过CAN总线连接起来的。CAN总线目前是自动化领域发展的热点技术之一,由于其高可靠性,CAN总线目前广泛的应用于工业自动化、船舶、汽车、医疗和

    2024年02月06日
    浏览(57)
  • 嵌入式中如何用C语言操作sqlite3(07)

    sqlite3编程接口非常多,对于初学者来说,我们暂时只需要掌握常用的几个函数,其他函数自然就知道如何使用了。 本篇假设数据库为my.db,有数据表student。 no name score 4 嵌入式开发爱好者 89.0 创建表格语句如下: sqlite3_open sqlite3_close sqlite3_get_table 举例 下面比如我们要显示st

    2024年02月07日
    浏览(39)
  • 嵌入式开发--CAN总线与高速光耦6N137

    嵌入式开发–CAN总线与高速光耦6N137 CAN总线应用时,有时候需要加光耦隔离电路,以免在雷击或遇到高压干扰时,保护设备安全。常用的有光耦隔离和专用芯片隔离。 本文介绍使用高速光耦6N137的光耦隔离方案。 6N137是10MBPS的高速光耦,而CAN总线的最高速度仅为1MBPS,用在此

    2024年01月18日
    浏览(30)
  • 【嵌入式项目应用】__物联网小知识:不同通讯线的通讯距离是多少,你知道吗?

    目录 前言 不同协议通讯线的传输距离  无线传输协议与距离 1. 蓝牙 2. Zigbee 3. LoRa 4. Wi-Fi 5. 蜂窝网络 6. Sigfox 7. LoRaWAN (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。  在物联网中,通讯线的作用是 传输数据 、 信号 和 电能 ,以便在设备之间建立通信链路。 常见的

    2024年02月05日
    浏览(42)
  • FANUC机器人嵌入式TCP/IP以太网通讯的具体方法

    在工业自动化领域中,FANUC机器人是广泛应用的一种先进设备。为了实现机器人与其他设备之间的通信,TCP/IP以太网是一种常用的通信协议。本文将介绍如何在FANUC机器人中实现嵌入式TCP/IP以太网通讯,并提供相应的源代码。 配置网络参数 首先,我们需要在FANUC机器人上配置

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包