×
单片机 > 单片机程序设计 > 详情

FreeModbus for stm32(Keil工程)精简Modbus slave协议

发布时间:2021-04-26 发布时间:
|

1、测试环境Keil MDK 4.7a  stm32f103c8, PB12为输出线圈,可以通过Modbus Poll来控制线圈的输出状态。


2、通过ModbusProt.h配置硬件、数据缓冲区大小和功能码配置


3、移植要点为Port.c和Port.h


   定时器操作在stm32平台下基本不用改 

   a、定时器初始化;   xMBPortTimersInit() 

   b、开定时器及中断; vMBPortTimersEnable() 

   c、关定时器及中断; vMBPortTimersDisable() 

   d、定时器溢出中断服务程序;TIME_IQR_HANDLER() 

   串口操作: 

   a、串初始化;   xMBPortSerialInit() 

   b、串口发送中断、接收中断; UART_IQR_HANDLER() 

   c、串口收发控制; vMBPortSerialEnable() 

   开关量操作 CPU硬件寄存器类型指针定义,用于定义IO输入和输出, 

   注意在此定义的IO必须初始化为输入或输出。 

   typedef volatile uint32_t * CPURegistertype; 

    //线圈状态, 存储格式:&IO输出口寄存器, 引脚号 

    MBCoilType MBCoils[REG_COILS_SIZE] = { 

        &(GPIOB->ODR), 12, //PB12做为输出线圈 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

    };


    //离散开关输入状态, 存储格式:&IO输出口寄存器, 引脚号 

    MBDiscreteType MBDiscretes[REG_DISCRETE_SIZE] = { 

        &(GPIOB->ODR), 12, //PB12做为离散输入 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

        &(GPIOB->ODR), 12, 

    };


 

关键字:stm32  Keil工  Modbus  slave协议

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向