programa STM32 no ejecutándose

2

Actualmente estoy intentando crear mi propia placa de desarrollo stm32. Tengo el microcontrolador stm32f100c4t6 montado en pcb.    Estoy usando la edición gratuita de Atollic True Studio. Yo había hecho un pequeño programa de parpadeo como abajo.

#include <stddef.h>
#include "stm32f10x.h"

void delay(int count)
{
    volatile int i;

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

GPIO_InitTypeDef GPIO_InitStructure;

int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 ;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    while (1)
    {
        delay(100000);
        GPIOA->BSRR = 0xF << 3;
        delay(100000);
        GPIOA->BRR = 0xF << 3;
    }
}

He usado el demostrador del cargador de flash st en Windows para cargar el programa en la memoria flash. sin embargo, detecta que el tamaño de la memoria flash es de 32 KB, mientras que en realidad tiene 16 KB. pero el programa cargado a flash y verificado con éxito. (Detecta el ID del dispositivo como 0x420, que es para la línea de valor de densidad media, mientras que este microcontrolador es la línea de valor de baja densidad).

Cuando cambio la configuración del puente de BOOT0 a tierra para ponerlo en modo de ejecución, no sucede nada. El pin PA3 a P6 permanece en 0v. He conectado el cristal de 24 MHz como crytal principal y 32.768 KHz como el cristal RTC. Puedo obtener voltajes alrededor de 1.8v a 24 MHz de cristal. Las otras clavijas de cristal permanecen en 0v. ¿Esto está mal?

También he intentado stm32flash en linux para cargar el programa, carga y verifica el programa con éxito. pero, también detecta el microcontrolador como línea de valor de densidad mediam (128 KB).

Estoy atrapado en esta situación. Cualquier ayuda sería apreciable.

Gracias por leer.

EDITAR: He adjuntado el enlace de   esquema .

    

2 respuestas

2

Aquí está el programa de luces intermitentes LED más simple posible que funciona en la placa de descubrimiento STM32VL:

/* Test.c
** Simple program for STM32F100RB to flash LED on PC_9
**
*/

#include <stm32f10x.h>

void delay(void);

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

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

void delay(void)
{
  volatile unsigned int i;

  for (i = 0; i < 20000; i++)
    ;
}
    
respondido por el Leon Heller
1

Si usa la configuración de reloj predeterminada, debe conectar el cristal de 8 MHz (o 25MHz para chips de línea de conectividad) a su chip.

Un fragmento de código de system_stm32f10x.c en la función SetSysClockTo24 () .

#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
    /*  PLL configuration:  = (HSE / 2) * 6 = 24 MHz */

Espero que ayude.

    
respondido por el so61pi

Lea otras preguntas en las etiquetas