OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3695|回复: 1

如果网络初始化后,spi接收数据总是丢,怎么回事?

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-1-15
在线时间
0 小时
发表于 2018-1-15 22:57:32 | 显示全部楼层 |阅读模式
1金钱
int main(void)
{
SystemInit();
MySys_InfoInit();
MySys_InfoInit2();
delay_init();        //
uart_init(115200); //
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//
TIM3_Int_Init(999,839); //
FSMC_SRAM_Init();
IO_Init();
  
//此处如果注释掉,spi接收没有问题,如果不注释掉,则会丢数
/*
while(lwip_comm_init()!=0)
{
  delay_ms(1200);
}
*/

//tcp_client_test();
//udp_demo_test();
SPI2_Init();
delay_us(1);
SPI3_Init();
delay_us(1);
SPI4_Init();
delay_us(1);
SPI5_Init();
delay_us(1);
SPI1_Init();
delay_ms(100);

//通过串口,发送命令55AAEE02AABB,使10个ads1298,每两个组成一路spi,共5路spi,发送给STM32F4。
USART_SendData(USART6, 0x55);         //Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART6,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËÍ
delay_ms(10);
USART_SendData(USART6, 0xAA);         //Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART6,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËÍ
delay_ms(10);
USART_SendData(USART6, 0xEE);         //Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART6,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËÍ
delay_ms(10);
USART_SendData(USART6, 0x02);         //Ïò´®¿Ú1·¢ËÍÊý¾Ý£¬1£º250Hz,2:500Hz,3:1000Hz,4:2000Hz,5:4000Hz,6:8000Hz,7:16000Hz,8:32000Hz
while(USART_GetFlagStatus(USART6,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËÍ
delay_ms(10);
USART_SendData(USART6, 0xAA);         //Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART6,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËÍ
delay_ms(10);
USART_SendData(USART6, 0xBB);         //Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART6,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËÍ
delay_ms(100);

while(1)
{
  //lwip_periodic_handle();
  //delay_ms(1);
/*
  if(buf_index_tosend!=buf_index){
    PBout(1)=1;
    //tcp_write(tcppcb,&(recdata[buf_index_tosend][0]),TX_FRAME_TOTAL_LEN,1);
    //tcp_output(tcppcb);
   udp_demo_senddata(udppcb,recdata[buf_index_tosend]);
    buf_index_tosend++;
    if(buf_index_tosend==BUF_NUM)
     buf_index_tosend=0;
    PBout(1)=0;
  }
  */
}
}
void SPI3_IRQHandler(void)
{

  recdata2[In_index+108]=SPI3->DR;
  recdata2[In_index]=SPI1->DR;
  recdata2[In_index+54]=SPI2->DR;
  recdata2[In_index+162]=SPI4->DR;
  recdata2[In_index+216]=SPI5->DR;
  In_index++;

  if(In_index==54)//每路数据54字节,且前三个均为c00000,如果不为c00000,则spi接收丢数据
  {
   In_index=0;
   if(recdata2[0]!=0xC0||recdata2[1]!=0x00&&recdata2[2]!=0x00)
   {
    PBout(0)=1;
    delay_ms(1);
    PBout(0)=0;
   }
  }
}


u8 lwip_comm_init(void)
{
struct netif *Netif_Init_Flag;  
struct ip_addr ipaddr;   
struct ip_addr netmask;   
struct ip_addr gw;         
if(ETH_Mem_Malloc())return 1;
if(lwip_comm_mem_malloc())return 1;
if(LAN8720_Init())return 2;  
lwip_init();     
lwip_comm_default_ip_set(&lwipdev);
#if LWIP_DHCP  
ipaddr.addr = 0;
netmask.addr = 0;
gw.addr = 0;
#else   
IP4_ADDR(&ipaddr,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);
IP4_ADDR(&netmask,lwipdev.netmask[0],lwipdev.netmask[1] ,lwipdev.netmask[2],lwipdev.netmask[3]);
IP4_ADDR(&gw,lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]);
#endif
Netif_Init_Flag=netif_add(&lwip_netif,&ipaddr,&netmask,&gw,NULL,&ethernetif_init,&ethernet_input);//

#if LWIP_DHCP   //
lwipdev.dhcpstatus=0; //
dhcp_start(&lwip_netif); //
#endif

if(Netif_Init_Flag==NULL)return 3;//
else//
{
  netif_set_default(&lwip_netif); //
  netif_set_up(&lwip_netif);  //
}
return 0;//
}   

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-1-16 01:26:11 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 22:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表