STM32F103 GPIO no funciona

2

Estoy programando para microcontroladores LPC (principalmente LPC1769), durante los últimos meses con éxito. Sin embargo, decidí probar la serie STM32.

Acabo de recibir una placa sin nombre utilizando una MCU STM32F103C8 como la que se muestra en la foto.

EstoyusandoEclipseparadesarrollarmifirmware,dondetambiéninstaléelcomplementoSTparaeldesarrollodeARM.ProgramoelchipatravésdeUARTutilizandoelgestordearranquedefábrica.TambiénextrajelabibliotecaCMSISdelabibliotecaST'sCube,ylaheincluidoenmiproyecto.

Loqueestoytratandodelograr:EstaplacatieneunLEDenlaPC13,yestoytratandodeparpadear.Miproyectofuncionabienytambiénsecarga.

Elproblema:nadasucedeenlapizarra.CreoqueelGPIOnoseconfiguracomosalida.

Heprobadomuchoscódigosdiferentes.Aquíhayunejemplo:

#include"stm32f10x.h"

int main(void)
{
    SystemInit();
    SystemCoreClockUpdate();

    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

    GPIOC->CRH=0x33333333;

    while(1)
    {
        volatile int i = 0;

        for(i=0;i<0x40000;i++){
        }

        GPIOC->ODR ^= (1 << 13);
    }
}
    
pregunta user3634713

2 respuestas

1

No había nada malo con mi código. El ejemplo proporcionado anteriormente funciona como debería.

El problema estaba en el flasheo del código a la MCU. Aunque el LPCXpresso que estaba usando anteriormente estaba usando el archivo .axf, la herramienta STM32flash tuvo que ser alimentada con un archivo .bin, y esto causó mi confusión.

    
respondido por el user3634713
1

Aquí hay un programa simple que debería ayudar:

/* main.c
** Simple program for Olimex STM32-H103 (STM32F103RB) to flash LED on PC12
**
*/

#include <stm32f10x.h>

void delay(void);

void main(void)
{
  // I/O port C clock enable
  RCC->APB2ENR = RCC_APB2ENR_IOPCEN;
  // Set PC_12 to output 
  GPIOC->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12);
  GPIOC->CRH |= GPIO_CRH_MODE12;

  while(1)
  {
    GPIOC->BSRR = (1<<12);
    delay();
    GPIOC->BRR = (1<<12);
    delay();
  }
}

void delay(void)
{
  volatile unsigned int i;

  for (i = 0; i < 20000; i++)
    ;
}

Fue escrito para el compilador Rowley CrossWorks.

    
respondido por el Leon Heller

Lea otras preguntas en las etiquetas