公司项目代码调试总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/switch_love_case/article/details/88881643

title: 公司项目代码调试总结
tags: Siri
date: 2019-03-28 23:31:00



最近公司做了一系列的项目,我也是负责好几个项目并行开发,也是很吃力,很紧张,幸好今天进展还算顺利。

STM32程序编写记录


今天最难调试的是 一个485IC,明天开始调试移动M5311的NBiot模组。

程序写的没毛病,但是总是出错 我也很无语,最后查了一些资料终于搞定了,很开心。

代码记录如下:


/***********************************************************
函数名称:int RS485_SendCmd(u8 *cmd,u8 len,int x,int wait)
函数功能:RS485问询与返回指令
入口参数:cmd:问询指令
         len:数据长度
           x:数据起始位
        wait:问询延时
出口参数:数据点
备 注:
***********************************************************/
 
int RS485_SendCmd(u8 *cmd,u8 len,int x,int wait)
{   
  int Val = 0; 
	int i;
	unsigned short CRC_Tmp;
	unsigned short crc;
  struct_usart3.USART_Length = 0;
  printf("[RS485_SendCmd] %d\r\n",len);
	GPIO_SetBits(GPIOB,GPIO_Pin_1);
	delay_ms(2);
  uart3_send_buff(cmd, len);
	delay_ms(2);//稍稍延时一下,原因去查看sp3485的手册吧
	GPIO_ResetBits(GPIOB, GPIO_Pin_1);
  delay_ms(wait);
  if (struct_usart3.USART_Length != 0) //返回值不为空
  {			
      //for(i=0;i<len+1;i++)  //打印出来接收的包共9个数据
      //{
      //printf("%X@",struct_usart3.USART_BUFF[i]);	
      //}	
     // printf("%d",struct_usart3.USART_Length);
		  GPIO_SetBits(GPIOB,GPIO_Pin_1);
		  delay_ms(2);//稍稍延时一下,原因去查看sp3485的手册吧
			crc = ((unsigned short)struct_usart3.USART_BUFF[struct_usart3.USART_Length-2]<<8) + struct_usart3.USART_BUFF[struct_usart3.USART_Length-1]; //收到数据的crc校验值
			CRC_Tmp = CRC_16_HEX(struct_usart3.USART_BUFF,struct_usart3.USART_Length-2); //处理除去最后两位的数据CRC校验,算出crc校验值
			//printf("%X\r\n",crc);
			//printf("%X\r\n",CRC_Tmp);
			if (CRC_Tmp == crc){   //比较CRC校验值是否相等,相等则进行下一步处理
      Val = (struct_usart3.USART_BUFF[x]*256) + (struct_usart3.USART_BUFF[x+1]*1);
			struct_usart3.USART_BUFF[struct_usart3.USART_Length] = '\0'; //清零
			return Val;
			}
			struct_usart3.USART_BUFF[struct_usart3.USART_Length] = '\0'; //清零	
			return Val;
    }  
}

其中最重要的是485EN使能端口的配置,以及发送和接收数据时的上拉和下拉配置。

    GPIO_SetBits(GPIOB,GPIO_Pin_1);
	delay_ms(2);
    uart3_send_buff(cmd, len);
	delay_ms(2);//稍稍延时一下,原因去查看sp3485的手册吧
	GPIO_ResetBits(GPIOB, GPIO_Pin_1);

“delay_ms(2);” 延时非常重要!!发送数据前 先把EN脚拉高,然后发送数据 ,数据发送完将EN再拉低,进入接收中断以后,确保接收到数据立即将EN复位(拉高)进行下一次的准备。

致此,公司此项目开发的新PCB,代码我已全部调通,明天进行NB调试与设备装机调试,并且进行其它传感器的校验。

猜你喜欢

转载自blog.csdn.net/switch_love_case/article/details/88881643