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

How to control GPIO?

Hi,

I'm using the STM32F103ZE uC on the MCBSTM32E development board.
I tried the example programs, they all compile and download and run fine, but they are NOT SIMPLE. They use a lot of Library files etc, etc, etc.
I just try to make some ports go high or low.

The example GPIO program states:
- Enable the clock signal for the GPIO.
- Configure the Alternate Function to use a GPIO (usually standard after reset).
- Configure the GPIO pins as input or output.
- Set remaining parameters like speed, pull-up/down.
- Enable the GPIO.
- Read from or write to the GPIO.

Can someone give me a simple (and I mean REALLY SIMPLE) program to control just one single GPIO port?

My questions to activate some port:
- do I need something to know about internal clock signals?
- do I need some startup file?

Thanks,

Henk

Parents
  • First off, put all of your library .C & .H files in the project directory and use #include "stm32f10x_ .h" instead of using the path #include <stm32f10x_ .h> method.
    (this way all of your source is in a single directory---and it is less confusing on how to set it up 'simply')

    
    /*--------------------------------------------------------------------------.
    ;   GPIO pins define                                                        ;
    '--------------------------------------------------------------------------*/
    #define GPIO_Pin_0                 ((u16)0x0001)  /* Pin 0 selected */
    #define GPIO_Pin_1                 ((u16)0x0002)  /* Pin 1 selected */
    #define GPIO_Pin_2                 ((u16)0x0004)  /* Pin 2 selected */
    #define GPIO_Pin_3                 ((u16)0x0008)  /* Pin 3 selected */
    #define GPIO_Pin_4                 ((u16)0x0010)  /* Pin 4 selected */
    #define GPIO_Pin_5                 ((u16)0x0020)  /* Pin 5 selected */
    #define GPIO_Pin_6                 ((u16)0x0040)  /* Pin 6 selected */
    #define GPIO_Pin_7                 ((u16)0x0080)  /* Pin 7 selected */
    #define GPIO_Pin_8                 ((u16)0x0100)  /* Pin 8 selected */
    #define GPIO_Pin_9                 ((u16)0x0200)  /* Pin 9 selected */
    #define GPIO_Pin_10                ((u16)0x0400)  /* Pin 10 selected */
    #define GPIO_Pin_11                ((u16)0x0800)  /* Pin 11 selected */
    #define GPIO_Pin_12                ((u16)0x1000)  /* Pin 12 selected */
    #define GPIO_Pin_13                ((u16)0x2000)  /* Pin 13 selected */
    #define GPIO_Pin_14                ((u16)0x4000)  /* Pin 14 selected */
    #define GPIO_Pin_15                ((u16)0x8000)  /* Pin 15 selected */
    #define GPIO_Pin_All               ((u16)0xFFFF)  /* All pins selected */
    
    
    void Simple_Example( void )
    {
    
        GPIO_InitTypeDef  gpio_initstructure; // typedef found in "stm32f10x_gpio.h"
                                              //                    [Library]
    
        /*------------------------------------------------------------------.
        ;                           GPIO  C                                 ;
        ;-------------------------------------------------------------------;
        ; GPIOC 'GPIO_InitStructure' Configuration                          ;
        ;-------------------------------------------------------------------;
        ; Enable ONLY pins 6, 7, 8, 9 for Alternate Function Push/Pull mode ;
        '------------------------------------------------------------------*/
        gpio_initstructure.GPIO_Pin  =    0x0000 // used for a holder for -OR-
                                      //| GPIO_Pin_0    // ADC-10 =
                                      //| GPIO_Pin_1    // ADC-11 =
                                      //| GPIO_Pin_2    // ADC-12 =
                                      //| GPIO_Pin_3    // ADC-13 =
                                      //| GPIO_Pin_4    // ADC-14 =
                                      //| GPIO_Pin_5    // ADC-15 =
                                        | GPIO_Pin_6    // PWM-T3.1 =
                                        | GPIO_Pin_7    // PWM-T3.2 =
                                        | GPIO_Pin_8    // PWM-T3.3 =
                                        | GPIO_Pin_9    // PWM-T3.4 =
                                      //| GPIO_Pin_10   // UART4 TxD (Diagnostics)
                                      //| GPIO_Pin_11   // UART4 RxD (Diagnostics)
                                      //| GPIO_Pin_12   // "USART3_CK" [ ?? SPARE ?? ]
                                      //| GPIO_Pin_13   // Tamper/RTC = "TP32"
                                      //| GPIO_Pin_14   // OSC32(IN)
                                      //| GPIO_Pin_15;  // OSC32(OUT)
                                    ; // Semi-colon placed here for convenience
    
        /*------------------------------------------------------------------.
        ;   GPIO C Peripheral speed (as fast as possible-- there is no need ;
        ; to save energy since this project is not battery operated (yet)   ;
        '------------------------------------------------------------------*/
        gpio_initstructure.GPIO_Speed= GPIO_Speed_50MHz;
    
        /*------------------------------------------------------------------.
        ;   The I/O port pins are configured for Push-Pull operations       ;
        '------------------------------------------------------------------*/
        gpio_initstructure.GPIO_Mode = GPIO_Mode_AF_PP;
    
        /*------------------------------------------------------------------.
        ;   GPIO C Initialization using the data in 'GPIO_InitStructure'    ;
        '------------------------------------------------------------------*/
        GPIO_Init( GPIOC, &gpio_initstructure );    // PORT C update [Library]
    
    }
    
    

    --Cpt. Vince Foster
    2nd Cannon Place
    Fort Marcy Park, VA

Reply
  • First off, put all of your library .C & .H files in the project directory and use #include "stm32f10x_ .h" instead of using the path #include <stm32f10x_ .h> method.
    (this way all of your source is in a single directory---and it is less confusing on how to set it up 'simply')

    
    /*--------------------------------------------------------------------------.
    ;   GPIO pins define                                                        ;
    '--------------------------------------------------------------------------*/
    #define GPIO_Pin_0                 ((u16)0x0001)  /* Pin 0 selected */
    #define GPIO_Pin_1                 ((u16)0x0002)  /* Pin 1 selected */
    #define GPIO_Pin_2                 ((u16)0x0004)  /* Pin 2 selected */
    #define GPIO_Pin_3                 ((u16)0x0008)  /* Pin 3 selected */
    #define GPIO_Pin_4                 ((u16)0x0010)  /* Pin 4 selected */
    #define GPIO_Pin_5                 ((u16)0x0020)  /* Pin 5 selected */
    #define GPIO_Pin_6                 ((u16)0x0040)  /* Pin 6 selected */
    #define GPIO_Pin_7                 ((u16)0x0080)  /* Pin 7 selected */
    #define GPIO_Pin_8                 ((u16)0x0100)  /* Pin 8 selected */
    #define GPIO_Pin_9                 ((u16)0x0200)  /* Pin 9 selected */
    #define GPIO_Pin_10                ((u16)0x0400)  /* Pin 10 selected */
    #define GPIO_Pin_11                ((u16)0x0800)  /* Pin 11 selected */
    #define GPIO_Pin_12                ((u16)0x1000)  /* Pin 12 selected */
    #define GPIO_Pin_13                ((u16)0x2000)  /* Pin 13 selected */
    #define GPIO_Pin_14                ((u16)0x4000)  /* Pin 14 selected */
    #define GPIO_Pin_15                ((u16)0x8000)  /* Pin 15 selected */
    #define GPIO_Pin_All               ((u16)0xFFFF)  /* All pins selected */
    
    
    void Simple_Example( void )
    {
    
        GPIO_InitTypeDef  gpio_initstructure; // typedef found in "stm32f10x_gpio.h"
                                              //                    [Library]
    
        /*------------------------------------------------------------------.
        ;                           GPIO  C                                 ;
        ;-------------------------------------------------------------------;
        ; GPIOC 'GPIO_InitStructure' Configuration                          ;
        ;-------------------------------------------------------------------;
        ; Enable ONLY pins 6, 7, 8, 9 for Alternate Function Push/Pull mode ;
        '------------------------------------------------------------------*/
        gpio_initstructure.GPIO_Pin  =    0x0000 // used for a holder for -OR-
                                      //| GPIO_Pin_0    // ADC-10 =
                                      //| GPIO_Pin_1    // ADC-11 =
                                      //| GPIO_Pin_2    // ADC-12 =
                                      //| GPIO_Pin_3    // ADC-13 =
                                      //| GPIO_Pin_4    // ADC-14 =
                                      //| GPIO_Pin_5    // ADC-15 =
                                        | GPIO_Pin_6    // PWM-T3.1 =
                                        | GPIO_Pin_7    // PWM-T3.2 =
                                        | GPIO_Pin_8    // PWM-T3.3 =
                                        | GPIO_Pin_9    // PWM-T3.4 =
                                      //| GPIO_Pin_10   // UART4 TxD (Diagnostics)
                                      //| GPIO_Pin_11   // UART4 RxD (Diagnostics)
                                      //| GPIO_Pin_12   // "USART3_CK" [ ?? SPARE ?? ]
                                      //| GPIO_Pin_13   // Tamper/RTC = "TP32"
                                      //| GPIO_Pin_14   // OSC32(IN)
                                      //| GPIO_Pin_15;  // OSC32(OUT)
                                    ; // Semi-colon placed here for convenience
    
        /*------------------------------------------------------------------.
        ;   GPIO C Peripheral speed (as fast as possible-- there is no need ;
        ; to save energy since this project is not battery operated (yet)   ;
        '------------------------------------------------------------------*/
        gpio_initstructure.GPIO_Speed= GPIO_Speed_50MHz;
    
        /*------------------------------------------------------------------.
        ;   The I/O port pins are configured for Push-Pull operations       ;
        '------------------------------------------------------------------*/
        gpio_initstructure.GPIO_Mode = GPIO_Mode_AF_PP;
    
        /*------------------------------------------------------------------.
        ;   GPIO C Initialization using the data in 'GPIO_InitStructure'    ;
        '------------------------------------------------------------------*/
        GPIO_Init( GPIOC, &gpio_initstructure );    // PORT C update [Library]
    
    }
    
    

    --Cpt. Vince Foster
    2nd Cannon Place
    Fort Marcy Park, VA

Children