It is currently 26 May 2018 03:24

All times are UTC + 1 hour




Post new topic Reply to topic  [ 3 posts ] 
Author Message
PostPosted: 10 May 2018 22:25 
Offline

Joined: 16 Oct 2016 13:24
Posts: 36
good day,

i was hoping someone could assist.

i'm using the following for TCP

volatile wiz_PhyConf phyConf =
{
  PHY_CONFBY_HW,       // PHY_CONFBY_SW
  PHY_MODE_AUTONEGO,     // PHY_MODE_AUTONEGO
  PHY_SPEED_100,        // PHY_SPEED_100
  PHY_DUPLEX_FULL,     // PHY_DUPLEX_HALF
};

volatile wiz_NetInfo pnetinfo;


void SetIP()
{
       if (IPset == 0){
       wiz_NetInfo gWIZNETINFO =
        {
         {0x00, 0x14, 0xA3, 0x72, 0x17, 0x3f},    // Source Mac Address
         {192, 168, 1, 253},                      // Source IP Address
         {255, 255, 255, 0},                      // Subnet Mask
         {192, 168, 1, 254},                       // Gateway IP Address
         {192, 168, 1, 254},                      // DNS server IP Address

        };
        ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO);
        ctlwizchip(CW_SET_PHYCONF, (void*) &phyConf);
       }
}

void TCP_Server(void)
{
    int32_t ret;
    uint16_t size = 0, sentsize = 0;

    // Get status of socket
    switch(getSn_SR(SOCK_ID_TCP))
    {
        // Connection established
        case SOCK_ESTABLISHED :
        {

            // Check interrupt: connection with peer is successful
            if(getSn_IR(SOCK_ID_TCP) & Sn_IR_CON)
            {
                // Clear corresponding bit
                setSn_IR(SOCK_ID_TCP,Sn_IR_CON);
            }

            // Get received data size
            if((size = getSn_RX_RSR(SOCK_ID_TCP)) > 0)
            {
                // Cut data to size of data buffer
                if(size > DATA_BUF_SIZE)
                {
                    size = DATA_BUF_SIZE;
                }

                // Get received data
                ret = recv(SOCK_ID_TCP, gDATABUF, size);
                strcpy (gTXTBUF,gDATABUF);
                gTXTBUF[ret] = '\0';
                UART4_Write_Text(gTXTBUF);
                UART4_Write_Text("\n\r");

                // Check for error
                if(ret <= 0)
                {
                    return;
                }

                // Send echo to remote
                sentsize = 0;
                while(size != sentsize)
                {
                    //ret = send(SOCK_ID_TCP, gTESTBUF + sentsize, size - sentsize);
                    //if (ret == 2) GPIOE_ODR.B15 = 1;
                    //if (ret == 3) GPIOE_ODR.B15 = 0;

                    // Check if remote close socket
                    if(ret < 0)
                    {
                        close(SOCK_ID_TCP);
                        return;
                    }

                    // Update number of sent bytes
                    sentsize += ret;
                }
            }

            break;

        }

        // Socket received the disconnect-request (FIN packet) from the connected peer
        case SOCK_CLOSE_WAIT :
        {
            // Disconnect socket
            if((ret = disconnect(SOCK_ID_TCP)) != SOCK_OK)
            {
                return;
            }

            break;
        }

        // Socket is opened with TCP mode
        case SOCK_INIT :
        {
            // Listen to connection request
            if( (ret = listen(SOCK_ID_TCP)) != SOCK_OK)
            {
                return;
            }

            break;
        }

        // Socket is released
        case SOCK_CLOSED:
        {
            // Open TCP socket
            if((ret = socket(SOCK_ID_TCP, Sn_MR_TCP, PORT_TCP, 0x00)) != SOCK_ID_TCP)
            {
                return;
            }

           break;
        }

        default:
        {
            break;
        }
    }
}



everything works perfectly fine, I can ping the set IP and can send and receive TCP packages but as soon as i add the following the TCP procedure and the STM Clicker 2 completely crashes.

void main()
{

GPIO_Config(&GPIOB_BASE,
            _GPIO_PINMASK_8 | _GPIO_PINMASK_9,
            _GPIO_CFG_MODE_INPUT | _GPIO_CFG_PULL_down);
GPIO_Config(&GPIOA_BASE,
            _GPIO_PINMASK_5 | _GPIO_PINMASK_6,
            _GPIO_CFG_MODE_INPUT | _GPIO_CFG_PULL_down);
GPIO_Config(&GPIOC_BASE,
            _GPIO_PINMASK_1 | _GPIO_PINMASK_2 | _GPIO_PINMASK_3 ,
            _GPIO_CFG_MODE_input | _GPIO_CFG_PULL_UP);


W5500_Init();
wizchip_getnetinfo(&pnetinfo);

TCP_Server();

if (Button(&GPIOB_IDR, 9, 1, 1)){ UART4_Write_Text("\r button pressed !!!\r\n"); // if i comment this out everything starts working.



i'm guessing by calling the Button library im doing something that the SPI pins are not too happy about or maybe i'm configuring the pin incorrectly ?


Top
 Profile  
 
PostPosted: 12 May 2018 01:05 
Offline

Joined: 16 Oct 2016 13:24
Posts: 36
Good day,

would a 3x4 keypad work with the keypad library ? (I'v attached a 4x4 keypad for reference)

i'v done the following so far (But this for some reason makes the TCP procedure crash)

void Keypad_Row()
{
 GPIO_Config(&GPIOC_BASE, _GPIO_PINMASK_1 | _GPIO_PINMASK_2 | _GPIO_PINMASK_3);
                         GPIO_Config(&GPIOC_BASE,
                            _GPIO_PINMASK_8 | _GPIO_PINMASK_9,
                            _GPIO_CFG_DIGITAL_INPUT | _GPIO_CFG_PULL_DOWN);
               GPIO_Config(&GPIOC_BASE,
                            _GPIO_PINMASK_5 | _GPIO_PINMASK_6,
                            _GPIO_CFG_DIGITAL_INPUT | _GPIO_CFG_PULL_DOWN);
               GPIO_Config(&GPIOC_BASE,
                            _GPIO_PINMASK_1 | _GPIO_PINMASK_2 | _GPIO_PINMASK_3 ,
                            _GPIO_CFG_DIGITAL_input | _GPIO_CFG_PULL_DOWN);
}

void Keypad_Col()
{
               GPIO_Config(&GPIOB_BASE,
                            _GPIO_PINMASK_8 | _GPIO_PINMASK_9,
                            _GPIO_CFG_DIGITAL_INPUT | _GPIO_CFG_PULL_down);
                GPIO_Config(&GPIOA_BASE,
                            _GPIO_PINMASK_5 | _GPIO_PINMASK_6,
                            _GPIO_CFG_DIGITAL_INPUT | _GPIO_CFG_PULL_down);
                GPIO_Config(&GPIOC_BASE,
                            _GPIO_PINMASK_1 | _GPIO_PINMASK_2 | _GPIO_PINMASK_3 ,
                            _GPIO_CFG_DIGITAL_input | _GPIO_CFG_PULL_up);

}

void Keypad_detect()
{

               Keypad_Col();
                if (Button(&GPIOB_IDR, 9, 1, 1)){
                 UART4_Write_Text("\r NUM 6 !!!\r\n");
                 Keypad_Buffer('6');
                 while (Button(&GPIOC_IDR, 1, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }
               }


                else if (Button(&GPIOC_IDR, 2, 1, 1)){
                //UART4_Write_Text("\r NUM 4 !!!\r\n");
                Keypad_Buffer('4');
                 //while (Button(&GPIOC_IDR, 2, 1, 1)){
                  //delay_ms(100);
                 //}
                 Keypad_Col();;
                }

                else if (Button(&GPIOC_IDR, 3, 1, 1)){
                 //UART4_Write_Text("\r NUM 5 !!!\r\n");
                 Keypad_Buffer('5');
                 //while (Button(&GPIOC_IDR, 3, 1, 1)){
                  //delay_ms(100);
                 //}
                 Keypad_Col();
                }
         }

                if (Button(&GPIOB_IDR, 8, 1, 1)){
                //UART4_Write_Text("\r ROW 3 !!!\r\n");
                Keypad_Row();
                if (Button(&GPIOC_IDR, 1, 1, 1)){
                 //UART4_Write_Text("\r NUM 9 !!!\r\n");
                 Keypad_Buffer('9');
                 while (Button(&GPIOC_IDR, 1, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }

                else if (Button(&GPIOC_IDR, 2, 1, 1)){
                //UART4_Write_Text("\r NUM 7 !!!\r\n");
                Keypad_Buffer('7');
                 while (Button(&GPIOC_IDR, 2, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }

                else if (Button(&GPIOC_IDR, 3, 1, 1)){
                 //UART4_Write_Text("\r NUM 8 !!!\r\n");
                 Keypad_Buffer('8');
                 while (Button(&GPIOC_IDR, 3, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }
         }

        if (Button(&GPIOA_IDR, 5, 1, 1)){
         //UART4_Write_Text("\r ROW 4 !!!\r\n");
         Keypad_Row();
                if (Button(&GPIOC_IDR, 1, 1, 1)){
                 //UART4_Write_Text("\r NUM # !!!\r\n");
                 Keypad_Buffer('#');
                 while (Button(&GPIOC_IDR, 1, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }

               else if (Button(&GPIOC_IDR, 2, 1, 1)){
                //UART4_Write_Text("\r NUM * !!!\r\n");
                Keypad_Buffer('*');
                 while (Button(&GPIOC_IDR, 2, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }

                else if (Button(&GPIOC_IDR, 3, 1, 1)){
                 //UART4_Write_Text("\r NUM 0 !!!\r\n");
                 Keypad_Buffer('0');
                 while (Button(&GPIOC_IDR, 3, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }
         }

         if (Button(&GPIOA_IDR, 6, 1, 1)){
         //UART4_Write_Text("\r ROW 1 !!!\r\n");
         Keypad_Row();
                if (Button(&GPIOC_IDR, 1, 1, 1)){
                 //UART4_Write_Text("\r NUM 3 !!!\r\n");
                 Keypad_Buffer('3');
                 while (Button(&GPIOC_IDR, 1, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }

               else if (Button(&GPIOC_IDR, 2, 1, 1)){
                //UART4_Write_Text("\r NUM 1 !!!\r\n");
                Keypad_Buffer('1');
                 while (Button(&GPIOC_IDR, 2, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }

                else if (Button(&GPIOC_IDR, 3, 1, 1)){
                 //UART4_Write_Text("\r NUM 2 !!!\r\n");
                 Keypad_Buffer('2');
                 while (Button(&GPIOC_IDR, 3, 1, 1)){
                  delay_ms(100);
                 }
                 Keypad_Col();
                }
         }
}


i was hoping using the "Keypad4x4" library would prevent the TCP procedure from crashing.

unless im doing something wrong with the GPIO pins ? or if a switch - case scenario would work better than if - else if ?
P.S iv also tried running this code with the keypad unplugged and the TCP Procedure still crashes.


Attachments:
scheme_keypad4x4.gif
scheme_keypad4x4.gif [ 57.83 KiB | Viewed 147 times ]
Top
 Profile  
 
PostPosted: 14 May 2018 17:18 
Offline
User avatar

Joined: 05 Mar 2018 09:44
Posts: 147
Location: Belgrade
Hi,

It's really not necessary to post that long code for review,
keep it tidy and if you're posting the code,
make sure you send us the complete project folder zipped.

Also tell us something more about what are you trying to achieve with this code, or the parts that make you trouble.

Can you tell me what development board do you use and what MCU?
I saw clicker 2 for STM, but was little confused seeing the PIC on the next post.

Kind regards,
Petar


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: Google [Bot] and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: