| | |
| | | #include "modbus.h" |
| | | #include "Rcc_Nvic_Systick.h" |
| | | #include "global_param.h" |
| | | /////////////////////////////////////////////////////////// |
| | | //u32 RS485_Baudrate=9600;//é讯波ç¹ç |
| | | //u8 RS485_Parity=0;//0æ æ ¡éªï¼1奿 ¡éªï¼2å¶æ ¡éª |
| | |
| | | void Modbus_RegMap(void) |
| | | { |
| | | u16 i; |
| | | RS485_Addr=g_com_map[DEV_ID]; |
| | | for(i=0;i<MODBUS_SIZE;i++) |
| | | { |
| | | Modbus_HoldReg[i]=i; |
| | |
| | | //åén个åèæ°æ® |
| | | //buff:åéåºé¦å°å |
| | | //lenï¼åéçåèæ° |
| | | void RS485_SendData(u8 *buff,u8 len) |
| | | { |
| | | RS485_TX_ON;//åæ¢ä¸ºå鿍¡å¼ |
| | | delay_us(100); |
| | | while(len--) |
| | | { |
| | | while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//çå¾
åéåºä¸ºç©º |
| | | USART_SendData(USART1,*(buff++)); |
| | | } |
| | | while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//çå¾
åé宿 |
| | | RS485_TX_OFF;//å¼å¯æ¥æ¶æ¨¡å¼ |
| | | delay_us(100); |
| | | } |
| | | //void RS485_SendData(u8 *buff,u8 len) |
| | | //{ |
| | | // RS485_TX_ON;//åæ¢ä¸ºå鿍¡å¼ |
| | | // #ifdef BAUDRATE_19200 |
| | | // delay_ms(5); |
| | | // #else |
| | | // delay_ms(1); |
| | | // #endif |
| | | // while(len--) |
| | | // { |
| | | // while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//çå¾
åéåºä¸ºç©º |
| | | // USART_SendData(USART1,*(buff++)); |
| | | // } |
| | | // while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//çå¾
åé宿 |
| | | // RS485_TX_OFF;//å¼å¯æ¥æ¶æ¨¡å¼ |
| | | //} |
| | | |
| | | |
| | | ///////////////////////////////////////////////////////////////////////////////////// |
| | |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x04; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | cmd_mode = 0;//åè®®å¤ç宿 |
| | | } |
| | | } |
| | |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | cmd_mode = 0;//åè®®å¤ç宿 |
| | | } |
| | | } |
| | |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x01; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | cmd_mode = 0;//åè®®å¤ç宿 |
| | | } |
| | | } |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,ByteNum+3); |
| | | RS485_TX_BUFF[ByteNum+3]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[ByteNum+4]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,ByteNum+5); |
| | | UART_PushFrame(RS485_TX_BUFF,ByteNum+5); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,ByteNum+3); |
| | | RS485_TX_BUFF[ByteNum+3]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[ByteNum+4]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,ByteNum+5); |
| | | UART_PushFrame(RS485_TX_BUFF,ByteNum+5); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,6); |
| | | RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[7]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,8); |
| | | UART_PushFrame(RS485_TX_BUFF,8); |
| | | } |
| | | else//å¯åå¨å°åè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,6); |
| | | RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[7]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,8); |
| | | UART_PushFrame(RS485_TX_BUFF,8); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,RegNum*2+3); |
| | | RS485_TX_BUFF[RegNum*2+3]=(calCRC>>8)&0xFF; //CRCé«å°ä½ä¸å¯¹åï¼ // å
é«åä½ |
| | | RS485_TX_BUFF[RegNum*2+4]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,RegNum*2+5); |
| | | UART_PushFrame(RS485_TX_BUFF,RegNum*2+5); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,6); |
| | | RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[7]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,8); |
| | | UART_PushFrame(RS485_TX_BUFF,8); |
| | | } |
| | | |
| | | //Modbusåè½ç 16å¤çç¨åº /////////////////////////////////////////////////////////////////////////////////////////////////å·²éªè¯ç¨åºOK |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,6); |
| | | RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[7]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,8); |
| | | UART_PushFrame(RS485_TX_BUFF,8); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |