STM32F103 comportamiento extraño

1

Estoy trabajando con un dispositivo STM32F103 y estoy experimentando un comportamiento extraño del que no estoy seguro de por dónde empezar cuando se trata de depurar. Anteriormente hice una pregunta sobre problemas de DMA con este dispositivo que nunca resolví. Regresé para ver esto, pero ahora sospecho que mis problemas de DMA están relacionados con otra cosa. Estoy trabajando en una placa personalizada que, en este momento, es solo el dispositivo STM32F103 conectado a través de SPI a una placa de descubrimiento STM32F405. SPI funciona bien en el modo de sondeo y ahora estoy intentando que SPI y DMA vuelvan a funcionar. Mi problema es que puedo hacer que funcione de forma intermitente, pero parece depender de la inicialización de las variables. Por ejemplo, puedo hacer que SPI funcione bien con DMA si inicializo alguna variable en mi función main (). EG:

int main(void) {
    uint32_t spiBase = 0;
    // etc, etc
}

Sin embargo, si inicializo otra variable debajo de esta, DMA dejará de funcionar. ¡Estoy realmente un poco perdido sobre cómo solucionar un problema como este! Actualmente, estoy usando el compilador arm-none-eabi-gcc con un Makefile que tomé y modifiqué originalmente para dispositivos STM32F405 (desde aquí: ( enlace ), junto con la utilidad st-link de Texane. ¡Es completamente probable que mi configuración de Makefile o linker sea un poco chiflada! ¿Alguien puede ofrecer algún consejo sobre dónde podría comenzar con problemas extraños como este ?!

    
pregunta law

1 respuesta

1

Es posible que haya descubierto esto. He estado usando la biblioteca de periféricos estándar ST para configurar y usar los controladores SPI y DMA (entre otros). Noté que los registros de configuración SPI eran inconsistentes dependiendo de la declaración de variables al inicio de main (). Como experimento, establezco explícitamente los registros de configuración SPI, por ejemplo, como SPI1- > CR1 = 0b0000100100110011 ¡Y todo funciona bien! Sinceramente, todavía estoy un poco confundido en cuanto a por qué esto podría ser un problema. He estado configurando el código ST como tal: en main () declaro

SPI_InitTypeDef     SPI_InitStructure;

Luego, más adelante en la pista, inicializo el periférico SPI

SPI_I2S_DeInit(SPI1);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;  //SPI_DataSize_8b; 
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                     // SCK idle high
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                    // second transition -> SCK Idle high => capture on rising edge of clock
SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;                       // SS must be low during entire SPI transaction
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                
SPI_Init(SPI1, &SPI_InitStructure);

Pero todavía hay chanchullos. De todos modos, lo actualizaré si hago más descubrimientos. Creo que podría abandonar la biblioteca periférica ST para la inicialización, etc. Gracias de nuevo

    
respondido por el law

Lea otras preguntas en las etiquetas