当前位置:首页 > 用stm32库函数编写的modbus源代码
//启动数据发送
USART_ITConfig(USART1, USART_IT_TC, ENABLE);//开启数据发送
for(i=Address,j=4;i
*(pointer_2+j)=(u8)(HoldReg[i]>>8);//先放高位 *(pointer_2+j+1)=(u8)(HoldReg[i]&0x00FF);//再放低位
//写入校验码
SendKey=CRC16(pointer_2+1,*pointer_2-2); //将计算出来的校验码装入输出数据缓存中
*(pointer_2+(*pointer_2-1))=(u8)(SendKey>>8); *(pointer_2+(*pointer_2))=(u8)(SendKey&0x00FF);
中断
} else
} else { }
ErrorHandle(2,pointer_2);//错误起始地址
} else { }
ErrorHandle(3,pointer_2);//错误读取数量
}
{ }
Comu_Busy=0;
/* 函数功能:读取输入寄存器(模拟量输入)
函数输入:两个指针,pointer_1指向用来存放输入信息帧的数组,
pointer_2用来指向存放输出信息帧的数组(两个数组的第一个元
素都用来存放信息帧的有效字节个数) */
void ReadInputReg(u8 *pointer_1,u8 *pointer_2)//pointer_1用作输入,pointer_2用作输出 {
u16 Address=0;//待读取寄存器起始地址(HoldReg[i],i为0-99对应地址从0
后面的元素按照Modbus协议组织。
函数输出:无。
到99)
Address=(u16)(*(pointer_1+3))*256+(*(pointer_1+4));//先得到寄存器起始地址 Num=(u16)(*(pointer_1+5))*256+(*(pointer_1+6));//先得到要读取的寄存器个u16 Num=0;//要读取的寄存器个数 u16 SendKey;//要发送数据的校验值
u32 PortTemp;//用来存放从端口取过来的数据,临时计算用 u16 ReadData=0;//用来临时存放从端口读来的数据 u32 CalTemp=0;//用来临时计算
数
if(*(pointer_1)==8) //如果接收到的字节数不是8个,就是一个错误帧 {
if(Address<2) //只要地址小于2,就是合法地址 {
if(Address+Num<=2&&Num>0) //只要地址加数量大于0小于2,就是
*(pointer_2+2)=0x04;//第三个字节为功能码
合法数量
{
//用于for循环 u8i; u8 j;
*(pointer_2+3)=Num*2;//第四个字节为要发送的字节个数 *(pointer_2)=1+1+1+Num*2+2;//有效字节个数等于丛机地址+功
能码+字节个数+寄存器信息+CRC校验
//将端口ADC1和ADC2的数据预先读入到临时的数据缓存中 ReadData=ADC_GetConversionValue(ADC2); PortTemp=(u32)(ReadData); PortTemp=PortTemp<<16;
ReadData=ADC_GetConversionValue(ADC1); PortTemp=PortTemp|(u32)(ReadData);
//将PortTemp中的数据先进行预处理 PortTemp=PortTemp<<(Address*16); for(i=4,j=Num*2;j>0;i++,j-=2) {
CalTemp=(u16)(PortTemp<<16);
}
*(pointer_2+i)=(u8)(CalTemp>>8);//先放高位 *(pointer_2+i+1)=(u8)(CalTemp&0x00FF);//再放低位
//写入校验码
SendKey=CRC16(pointer_2+1,*pointer_2-2); //将计算出来的校验码装入输出数据缓存中
*(pointer_2+(*pointer_2-1))=(u8)(SendKey>>8); *(pointer_2+(*pointer_2))=(u8)(SendKey&0x00FF);
//启动数据发送
USART_ITConfig(USART1, USART_IT_TC, ENABLE);//开启数据发送
中断
}
} else { }
ErrorHandle(3,pointer_2);//错误读取数量
} else { }
ErrorHandle(2,pointer_2);//错误起始地址
else { }
Comu_Busy=0;
共分享92篇相关文档