本次发布经过验证的MODBUS RTU 主从程序 可以移植于其他的基于C语言的平台 本程序基于KEIL 已经用于部分项目上
单片机源程序如下:
- #include "stm32f10x_wwdg.h"
- #include "stm32f10x.h"
- #include "stm32f10x_tim.h"
- #include "stm32f10x_usart.h"
- #include "misc.h"
- #include "systic.h"
- #include "rs485.h"
- #include "sys.h"
- #include "port.h"
- #include "RTU.h"
- #include "LED.h"
- #define LAMP_OFF_1 GPIO_SetBits(GPIOA,GPIO_Pin_6);
- #define LAMP_ON_1 GPIO_ResetBits(GPIOA,GPIO_Pin_6);
- #define LAMP_OFF_2 GPIO_SetBits(GPIOA,GPIO_Pin_7);
- #define LAMP_ON_2 GPIO_ResetBits(GPIOA,GPIO_Pin_7);
- #define LAMP_OFF_3 GPIO_SetBits(GPIOB,GPIO_Pin_0);
- #define LAMP_ON_3 GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- #define LAMP_OFF_4 GPIO_SetBits(GPIOB,GPIO_Pin_1);
- #define LAMP_ON_4 GPIO_ResetBits(GPIOB,GPIO_Pin_1);
- #define LAMP_OFF_5 GPIO_SetBits(GPIOB,GPIO_Pin_2);
- #define LAMP_ON_5 GPIO_ResetBits(GPIOB,GPIO_Pin_2);
- #define LAMP_OFF_9 GPIO_SetBits(GPIOB,GPIO_Pin_10);
- #define LAMP_ON_9 GPIO_ResetBits(GPIOB,GPIO_Pin_10);
- #define LAMP_OFF_7 GPIO_SetBits(GPIOB,GPIO_Pin_11);
- #define LAMP_ON_7 GPIO_ResetBits(GPIOB,GPIO_Pin_11);
- #define LAMP_OFF_8 GPIO_SetBits(GPIOB,GPIO_Pin_12);
- #define LAMP_ON_8 GPIO_ResetBits(GPIOB,GPIO_Pin_12);
- #define LAMP_OFF_6 GPIO_SetBits(GPIOB,GPIO_Pin_13);
- #define LAMP_ON_6 GPIO_ResetBits(GPIOB,GPIO_Pin_13);
- #define LAMP_OFF_10 GPIO_SetBits(GPIOB,GPIO_Pin_14);
- #define LAMP_ON_10 GPIO_ResetBits(GPIOB,GPIO_Pin_14);
- #define LAMP_OFF_11 GPIO_SetBits(GPIOB,GPIO_Pin_15);
- #define LAMP_ON_11 GPIO_ResetBits(GPIOB,GPIO_Pin_15);
- #define LAMP_OFF_12 GPIO_SetBits(GPIOA,GPIO_Pin_8);
- #define LAMP_ON_12 GPIO_ResetBits(GPIOA,GPIO_Pin_8);
- #define LAMP_OFF_13 GPIO_SetBits(GPIOA,GPIO_Pin_9);
- #define LAMP_ON_13 GPIO_ResetBits(GPIOA,GPIO_Pin_9);
- #define LAMP_OFF_14 GPIO_SetBits(GPIOA,GPIO_Pin_10);
- #define LAMP_ON_14 GPIO_ResetBits(GPIOA,GPIO_Pin_10);
- #define LAMP_OFF_15 GPIO_SetBits(GPIOA,GPIO_Pin_11);
- #define LAMP_ON_15 GPIO_ResetBits(GPIOA,GPIO_Pin_11);
- #define LAMP_OFF_16 GPIO_SetBits(GPIOA,GPIO_Pin_12);
- #define LAMP_ON_16 GPIO_ResetBits(GPIOA,GPIO_Pin_12);
- void RS485_Config(u32 bound); //485初始化
- void Output_Init(void); //输出GPIO配置
- void Modbus_CoilsRefresh(unsigned char *mbOuputs);//关联GPIO端口
- void TIM2_NVIC_Configuration(void); //中断参数配置//100MS
- void TIM2_Init(void); //时间2中断配置
- void TIM3_NVIC_Configuration(void); //中断参数配置
- void TIM3_Init(void); //时间3中断配置//5MS
- void TIM3_IRQHandler(void); //定时中断3启用
- void RTU_05 (void); //主站主动发送函数
- void allLampOn();
- void allLampOff();
- void ledFlashType1StateFsm(int state);
- void ledFlashType1(int state);
- const int LED[15] = {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3};
- typedef struct ledFlashStru_T
- {
- int state;
- int timeSet[15];
- int timeCount[15];
- int flash2To7Time;
- int flash2To7Count;
- int flash10To11Time;
- int flash10To11Count;
- }ledFlashStru_;
- ledFlashStru_ ledFlash_t;
- void ledFlash(int count);
- //定时中断
- void TIM2_IRQHandler(void)
- {
- if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
- {
- ledFlashType1StateFsm(ledFlash_t.state);
- ledFlashType1(ledFlash_t.state);
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- }
- }
- void ledFlashStruInit()
- {
- int i= 0;
- ledFlash_t.state = 1;
- for(i=0;i<16;i++)
- {
- ledFlash_t.timeSet[i] = LED[i];
- }
- ledFlash_t.flash2To7Time = 3;
- ledFlash_t.flash10To11Time = 5;
- ledFlash_t.flash2To7Count = 0;
- ledFlash_t.flash10To11Count = 0;
- }
- //100ms进入一次
- void ledFlashType1StateFsm(int state)
- {
- static int timeCount = 0;
- timeCount ++;
- switch(state)
- {
- case 1:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 2;
- }
- break;
- case 2:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 3;
- }
- break;
- case 3:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 4;
- }
- break;
- case 4:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 5;
- }
- break;
- case 5:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 6;
- }
- break;
- case 6:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 7;
- }
- break;
- case 7:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- if(ledFlash_t.flash2To7Count > ledFlash_t.flash2To7Time )
- {
- ledFlash_t.flash2To7Count = 0;
- ledFlash_t.state = 8;
- }else
- {
- ledFlash_t.flash2To7Count ++;
- ledFlash_t.state = 2;
- }
- }
- break;
- case 8:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 9;
- }
- break;
- case 9:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 10;
- }
- break;
- case 10:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- ledFlash_t.state = 11;
- }
- break;
- case 11:
- if(timeCount >= ledFlash_t.timeSet[state-1])
- {
- timeCount = 0;
- if(ledFlash_t.flash10To11Count > ledFlash_t.flash10To11Time)
- {
- ledFlash_t.flash10To11Count = 0;
- ledFlash_t.state = 1;
- }else
- {
- ledFlash_t.flash10To11Count ++;
- ledFlash_t.state = 10;
- }
- }
- break;
- }
- }
- void ledFlashType1(int state)
- {
- switch(state)
- {
- case 1:
- allLampOn();
- break;
- case 2:
- allLampOff();
- LAMP_ON_1;
- LAMP_ON_2;
- break;
- case 3:
- allLampOff();
- LAMP_ON_3;
- LAMP_ON_4;
- break;
- case 4:
- allLampOff();
- LAMP_ON_5;
- LAMP_ON_6;
-
- break;
- case 5:
- allLampOff();
- LAMP_ON_7;
- LAMP_ON_8;
- break;
- case 6:
- allLampOff();
- LAMP_ON_9;
- LAMP_ON_10;
- break;
- case 7:
- // allLampOn();
- allLampOff();
- LAMP_ON_11;
- LAMP_ON_12;
- break;
- case 8: //全亮
- //allLampOn();
- allLampOff();
- LAMP_ON_13;
- LAMP_ON_14;
- break;
- case 9: //灭
- allLampOff();
- LAMP_ON_15;
- LAMP_ON_16;
- break;
- case 10: //亮
- //allLampOn();
- break;
- case 11: //灭
- //allLampOff();
- break;
- }
- }
- void allLampOn()
- {
- LAMP_ON_1;
- LAMP_ON_2;
- LAMP_ON_3;
- LAMP_ON_4;
- LAMP_ON_5;
- LAMP_ON_6;
- LAMP_ON_7;
- LAMP_ON_8;
- LAMP_ON_9;
- LAMP_ON_10;
- LAMP_ON_11;
- LAMP_ON_12;
- LAMP_ON_13;
- LAMP_ON_14;
- LAMP_ON_15;
- LAMP_ON_16;
- }
- void allLampOff()
- {
- LAMP_OFF_1;
- LAMP_OFF_2;
- LAMP_OFF_3;
- LAMP_OFF_4;
- LAMP_OFF_5;
- LAMP_OFF_6;
- LAMP_OFF_7;
- LAMP_OFF_8;
- LAMP_OFF_9;
- LAMP_OFF_10;
- LAMP_OFF_11;
- LAMP_OFF_12;
- LAMP_OFF_13;
- LAMP_OFF_14;
- LAMP_OFF_15;
- LAMP_OFF_16;
- }
-
- int main()
- {
- SystemInit();
- Output_Init();
- RS485_Config(115200); //初始化RS485串口1
- TIM2_Init(); //定时器初始化
- TIM3_Init(); //定时器初始化
- ledFlashStruInit();
- while(1)
- {
-
- // LAMP_ON_1 ;
- LAMP_ON_1;
- LAMP_ON_2;
- LAMP_ON_3;
- LAMP_ON_4;
- LAMP_ON_5;
- LAMP_ON_6;
- // LAMP_ON_7;
- // LAMP_ON_8;
- // LAMP_ON_9;
- // LAMP_ON_10;
- // LAMP_ON_11;
- // LAMP_ON_12;
- // LAMP_ON_13;
- // LAMP_ON_14;
- // LAMP_ON_15;
- // LAMP_ON_16;
- }
- }
- //void Modbus_02_Solve();
- //void Modbus_01_Solve();
- //void Modbus_04_Solve();
- //void Modbus_05_Solve();
- //void Modbus_15_Solve();
- //void Modbus_03_Solve();
- //void Modbus_06_Solve();
- //void Modbus_16_Solve();
复制代码
所有资料51hei提供下载:
Modbus_Master_slave.7z
(311.43 KB, 下载次数: 74)
|