【E212】基于STM32F103的CANopen主从机PDO&SDO例程

2021-08-16 20:03:01      索炜达电子      2051     

项目编号:E212

文件大小:23.5M

源码说明:带中文注释

开发环境:C编译器

简要概述:

这是一个CANopen协议通信例程,硬件平台为STM32F103单片机,实现了简单的PDO和SDO通信,CANopen的实现是移植的开源协议栈CanFestival


CanFestival

CanFestival(官网链接https://canfestival.org/), 网上资料很多,入门也很简单,官方的Manul写的很简洁易懂。用CanFestival开源协议栈之前主要是移植协议栈到自己的平台上,支持的平台很多,Linux和类Unix,Windows,32位ARM单片机...都可以移植使用,本工程是基于STM32F103平台的应用

硬件

使用STM32F103为主控,主机用的STM32F103ZET6,6个从机用的STM32F103C8T6,CAN收发器用的NXP家的TJA1050,便宜、好用。主机要跑emWin就加了块SDRAM。

开发环境

Windows平台开发,用的MDK,下载后直接打开project文件夹下的工程文件即可打开工程。CANopen对象字典的编辑器我用的是Can Festival官方推荐的,虽然有点不怎么智能,但是凑活着用吧,毕竟自家的协议栈还得用自家的编辑器不是,避免踩坑嘛(其实官方的编辑器坑也多),另外由于监视用的主机我加了块五寸LCD显示,懒得手写GUI了,直接用的emWin图形软件框架。

主、从机

主机用STM32F103ZET6,从机用C8T6,例程里面,由于主机跑emWin,没内存跑操作系统了所以主机就直接裸奔了额,从机跑了FreeRTOS,整个系统就是模拟的工业现场的数据采集功能,从机采集数据通过PDO传输到主机,主机用SDO向从机发送控制命令,主机可以监视所有从机的心跳。 从机代码是通用的,如果需要多个从机,直接复制即可,不过要更改对应的从机ID号。具体更改方法是下载从机代码之后打开工程文件,找到node_coonfig.h文件,更改ID号,也可在这个文件下更改从机的心跳频率。

#ifndef _NODE_CONFIG_H

#define _NODE_CONFIG_H

#define SLAVE_NODE_ID           4   //ID为4,可以任意更改,保留0号ID,0号为主机

#define Producer_Heartbeat_Time 500 //从机心跳频率,任意更改,单位ms

#endif

文件列表:

目录│文件列表:

 │ CANopen-STM32F1.rar

 └ CANopen-STM32F1

    └ CANopen-STM32F1

       ├ CANOpenSlave_Ultra

       │  │ Slave_ultra.od

       │  ├ App

       │  │  │ app.c

       │  │  │ app.h

       │  │  │ FreeRTOSConfig.h

       │  │  │ main.c

       │  │  │ stm32f10x_conf.h

       │  │  │ stm32f10x_it.c

       │  │  │ stm32f10x_it.h

       │  │  └ canopen

       │  │     │ canopen_app.c

       │  │     │ canopen_app.h

       │  │     │ canopen_drv.c

       │  │     │ canopen_drv.h

       │  │     │ config.h

       │  │     │ Node_Config.h

       │  │     │ Slave.c

       │  │     └ Slave.h

       │  ├ Bsp

       │  │  │ bsp.c

       │  │  │ bsp.h

       │  │  │ bsp_can.c

       │  │  │ bsp_can.h

       │  │  │ bsp_timer.c

       │  │  │ bsp_timer.h

       │  │  │ bsp_usart.c

       │  │  └ bsp_usart.h

       │  ├ CANOpen

       │  │  │ canopen_readme.txt

       │  │  ├ inc

       │  │  │  │ can.h

       │  │  │  │ can_driver.h

       │  │  │  │ data.h

       │  │  │  │ dcf.h

       │  │  │  │ def.h

       │  │  │  │ emcy.h

       │  │  │  │ lifegrd.h

       │  │  │  │ lss.h

       │  │  │  │ nmtMaster.h

       │  │  │  │ nmtSlave.h

       │  │  │  │ objacces.h

       │  │  │  │ objdictdef.h

       │  │  │  │ pdo.h

       │  │  │  │ sdo.h

       │  │  │  │ states.h

       │  │  │  │ sync.h

       │  │  │  │ sysdep.h

       │  │  │  │ timer.h

       │  │  │  │ timers_driver.h

       │  │  │  └ stm32

       │  │  │     │ applicfg.h

       │  │  │     │ canfestival.h

       │  │  │     └ timerscfg.h

       │  │  └ src

       │  │     │ dcf.c

       │  │     │ emcy.c

       │  │     │ lifegrd.c

       │  │     │ lss.c

       │  │     │ nmtMaster.c

       │  │     │ nmtSlave.c

       │  │     │ objacces.c

       │  │     │ pdo.c

       │  │     │ sdo.c

       │  │     │ states.c

       │  │     │ sync.c

       │  │     └ timer.c

       │  ├ Doc

       │  │  └ ReadMe.txt

       │  ├ FreeRTOS

       │  │  │ croutine.c

       │  │  │ event_groups.c

       │  │  │ list.c

       │  │  │ queue.c

       │  │  │ readme.txt

       │  │  │ stream_buffer.c

       │  │  │ tasks.c

       │  │  │ timers.c

       │  │  ├ include

       │  │  │  │ croutine.h

       │  │  │  │ deprecated_definitions.h

       │  │  │  │ event_groups.h

       │  │  │  │ FreeRTOS.h

       │  │  │  │ list.h

       │  │  │  │ message_buffer.h

       │  │  │  │ mpu_prototypes.h

       │  │  │  │ mpu_wrappers.h

       │  │  │  │ portable.h

       │  │  │  │ projdefs.h

       │  │  │  │ queue.h

       │  │  │  │ semphr.h

       │  │  │  │ StackMacros.h

       │  │  │  │ stack_macros.h

       │  │  │  │ stdint.readme

       │  │  │  │ stream_buffer.h

       │  │  │  │ task.h

       │  │  │  └ timers.h

       │  │  └ portable

       │  │     ├ IAR

       │  │     │  ├ ARM_CM0

       │  │     │  │  │ port.c

       │  │     │  │  │ portasm.s

       │  │     │  │  └ portmacro.h

       │  │     │  ├ ARM_CM3

       │  │     │  │  │ port.c

       │  │     │  │  │ portasm.s

       │  │     │  │  └ portmacro.h

       │  │     │  ├ ARM_CM4F

       │  │     │  │  │ port.c

       │  │     │  │  │ portasm.s

       │  │     │  │  └ portmacro.h

       │  │     │  ├ ARM_CM4F_MPU

       │  │     │  │  │ port.c

       │  │     │  │  │ portasm.s

       │  │     │  │  └ portmacro.h

       │  │     │  └ ARM_CM7

       │  │     │     │ ReadMe.txt

       │  │     │     └ r0p1

       │  │     │        │ port.c

       │  │     │        │ portasm.s

       │  │     │        └ portmacro.h

       │  │     ├ MemMang

       │  │     │  │ heap_1.c

       │  │     │  │ heap_2.c

       │  │     │  │ heap_3.c

       │  │     │  │ heap_4.c

       │  │     │  │ heap_5.c

       │  │     │  └ ReadMe.url

       │  │     └ RVDS

       │  │        ├ ARM7_LPC21xx

       │  │        │  │ port.c

       │  │        │  │ portASM.s

       │  │        │  │ portmacro.h

       │  │        │  └ portmacro.inc

       │  │        ├ ARM_CA9

       │  │        │  │ port.c

       │  │        │  │ portASM.s

       │  │        │  │ portmacro.h

       │  │        │  └ portmacro.inc

       │  │        ├ ARM_CM0

       │  │        │  │ port.c

       │  │        │  └ portmacro.h

       │  │        ├ ARM_CM3

       │  │        │  │ port.c

       │  │        │  └ portmacro.h

       │  │        ├ ARM_CM4F

       │  │        │  │ port.c

       │  │        │  └ portmacro.h

       │  │        ├ ARM_CM4_MPU

       │  │        │  │ port.c

       │  │        │  └ portmacro.h

       │  │        └ ARM_CM7

       │  │           │ ReadMe.txt

       │  │           └ r0p1

       │  │              │ port.c

       │  │              └ portmacro.h

       │  ├ Libraries

       │  │  ├ CMSIS

       │  │  │  ├ CoreSupport

       │  │  │  │  │ core_cm3.c

       │  │  │  │  └ core_cm3.h

       │  │  │  └ DeviceSupport

       │  │  │     │ stm32f10x.h

       │  │  │     │ system_stm32f10x.c

       │  │  │     │ system_stm32f10x.h

       │  │  │     └ startup

       │  │  │        │ startup_stm32f10x_cl.s

       │  │  │        │ startup_stm32f10x_hd.s

       │  │  │        │ startup_stm32f10x_hd_vl.s

       │  │  │        │ startup_stm32f10x_ld.s

       │  │  │        │ startup_stm32f10x_ld_vl.s

       │  │  │        │ startup_stm32f10x_md.s

       │  │  │        │ startup_stm32f10x_md_vl.s

       │  │  │        └ startup_stm32f10x_xl.s

       │  │  └ STM32F10x_StdPeriph_Driver

       │  │     ├ inc

       │  │     │  │ misc.h

       │  │     │  │ stm32f10x_adc.h

       │  │     │  │ stm32f10x_bkp.h

       │  │     │  │ stm32f10x_can.h

       │  │     │  │ stm32f10x_cec.h

       │  │     │  │ stm32f10x_crc.h

       │  │     │  │ stm32f10x_dac.h

       │  │     │  │ stm32f10x_dbgmcu.h

       │  │     │  │ stm32f10x_dma.h

       │  │     │  │ stm32f10x_exti.h

       │  │     │  │ stm32f10x_flash.h

       │  │     │  │ stm32f10x_fsmc.h

       │  │     │  │ stm32f10x_gpio.h

       │  │     │  │ stm32f10x_i2c.h

       │  │     │  │ stm32f10x_iwdg.h

       │  │     │  │ stm32f10x_pwr.h

       │  │     │  │ stm32f10x_rcc.h

       │  │     │  │ stm32f10x_rtc.h

       │  │     │  │ stm32f10x_sdio.h

       │  │     │  │ stm32f10x_spi.h

       │  │     │  │ stm32f10x_tim.h

       │  │     │  │ stm32f10x_usart.h

       │  │     │  └ stm32f10x_wwdg.h

       │  │     └ src

       │  │        │ misc.c

       │  │        │ stm32f10x_adc.c

       │  │        │ stm32f10x_bkp.c

       │  │        │ stm32f10x_can.c

       │  │        │ stm32f10x_cec.c

       │  │        │ stm32f10x_crc.c

       │  │        │ stm32f10x_dac.c

       │  │        │ stm32f10x_dbgmcu.c

       │  │        │ stm32f10x_dma.c

       │  │        │ stm32f10x_exti.c

       │  │        │ stm32f10x_flash.c

       │  │        │ stm32f10x_fsmc.c

       │  │        │ stm32f10x_gpio.c

       │  │        │ stm32f10x_i2c.c

       │  │        │ stm32f10x_iwdg.c

       │  │        │ stm32f10x_pwr.c

       │  │        │ stm32f10x_rcc.c

       │  │        │ stm32f10x_rtc.c

       │  │        │ stm32f10x_sdio.c

       │  │        │ stm32f10x_spi.c

       │  │        │ stm32f10x_tim.c

       │  │        │ stm32f10x_usart.c

       │  │        └ stm32f10x_wwdg.c

       │  └ Project

       │     │ CANopen_Slave.uvguix.ZhiyangZhou

       │     │ CANopen_Slave.uvoptx

       │     │ CANopen_Slave.uvprojx

       │     │ EventRecorderStub.scvd

       │     │ JLinkLog.txt

       │     │ JLinkSettings.ini

       │     │ 双击删除“编译产生文件”.bat

       │     ├ DebugConfig

       │     │  │ CANOpenSlave_STM32F103C8_1.0.0.dbgconf

       │     │  │ CANOpenSlave_STM32F103ZE_1.0.0.dbgconf

       │     │  │ CANopen_Slave_STM32F103C8_1.0.0.dbgconf

       │     │  └ Target_1_STM32F103C8_1.0.0.dbgconf

       │     ├ Listings

       │     │  │ CANopen_Slave.map

       │     │  │ Demo.map

       │     │  └ startup_stm32f10x_hd.lst

       │     └ Objects

       │        │ app.crf

       │        │ app.d

       │        │ app.o

       │        │ bsp.crf

       │        │ bsp.d

       │        │ bsp.o

       │        │ bsp_can.crf

       │        │ bsp_can.d

       │        │ bsp_can.o

       │        │ bsp_timer.crf

       │        │ bsp_timer.d

       │        │ bsp_timer.o

       │        │ bsp_usart.crf

       │        │ bsp_usart.d

       │        │ bsp_usart.o

       │        │ canopen_app.crf

       │        │ canopen_app.d

       │        │ canopen_app.o

       │        │ canopen_drv.crf

       │        │ canopen_drv.d

       │        │ canopen_drv.o

       │        │ CANopen_Slave.axf

       │        │ CANopen_Slave.build_log.htm

       │        │ CANopen_Slave.htm

       │        │ CANopen_Slave.lnp

       │        │ CANopen_Slave.sct

       │        │ CANopen_Slave_CANopen_Slave.dep

       │        │ croutine.crf

       │        │ croutine.d

       │        │ croutine.o

       │        │ dcf.crf

       │        │ dcf.d

       │        │ dcf.o

       │        │ Demo.axf

       │        │ Demo.build_log.htm

       │        │ Demo.hex

       │        │ Demo.htm

       │        │ Demo.lnp

       │        │ Demo.sct

       │        │ Demo_CANOpenSlave.dep

       │        │ emcy.crf

       │        │ emcy.

TAGCANopen
  • 30 次
  • 1 分