This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

My MCU jumps to os_idle_demon after some seconds Network STM32f

Hello,

Here is my program:

int32_t socket;
uint8_t *sendbuf;
 
 
void Time3(void){
TIM_TimeBaseInitTypeDef TimeStruct; 
NVIC_InitTypeDef nvicStructure;
	
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
nvicStructure.NVIC_IRQChannel = TIM3_IRQn;
nvicStructure.NVIC_IRQChannelPreemptionPriority =1;
nvicStructure.NVIC_IRQChannelSubPriority = 0;
nvicStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvicStructure);		
	
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TimeStruct.TIM_Prescaler=35;
TimeStruct.TIM_Period=200;  ///200=100us
TimeStruct.TIM_ClockDivision=TIM_CKD_DIV1;	
TimeStruct.TIM_CounterMode=	TIM_CounterMode_Up ;
TIM_TimeBaseInit(TIM3, &TimeStruct);
TIM_Cmd(TIM3, ENABLE);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
}
 
/*###########################################
##############Main Function##################
###########################################*/ 
 
void SetSCK(){	
			
			socket = netUDP_GetSocket(udp_cb_func);
			if (socket >= 0) 
			{
					netUDP_Open(socket,0);
					netUDP_SetOption (socket, netUDP_OptionTTL, 20);
			}
}
 
 
int main (void){
	CLOCK();
	GPIO_SetBits(GPIOA,GPIO_Pin_5);
	LongDelay();
	netInitialize();
	LongDelay();
	Time3();
	GPIO_ResetBits(GPIOA,GPIO_Pin_5);
 
	do {
  	osDelay(500U);
  	netIF_GetOption(NET_IF_CLASS_ETH | 0, netIF_OptionIP4_Address, (uint8_t *)&addr, sizeof (addr));
	} while (addr == 0U);
 
 
 
	SetSCK();
 
	while (1) 
 
	{
		
		if(Alarm==1)
		{
			Alarm=0;
			Ethers();
		}
		
		if(CheckAlarm>2)
		{
			netUDP_Close (socket);
			netUDP_ReleaseSocket (socket);
			SetSCK();
			CheckAlarm=0;
		}
 
 
 
 
	}
}
 
void Ethers(void){
			NET_ADDR addrUDP={ NET_ADDR_IP4, 5022, 192, 168,1,10};
			if(socket>=0){
			CheckAlarm=0;
			Data();
			sendbuf =  netUDP_GetBuffer (Ether.Size);
			memcpy (sendbuf, MSG, Ether.Size);
			State=netUDP_Send (socket,&addrUDP,sendbuf,Ether.Size);	
}
void TIM3_IRQHandler(){
	
	CheckAlarm=CheckAlarm+1;
	Alarm=1;
	TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
 
					
 

 

But after some seconds which it works fine, it jumps to os_idle_demon function in RTX.

/// \brief The idle demon is running when no other thread is ready to run
void os_idle_demon (void) {
 
  for (;;) {
    /* HERE: include optional user code to be executed when no thread runs.*/
  }
}

I don't know why it goes to this function which disables my MCU operation. I am a newbie to debugging to trace this problem (why this happens before going to this sleep function).

Parents Reply Children
No data