stm32F103C8xx endian grande o pequeño?

¿Hay alguna razón para que stm32F103C8xx sea big endian y es posible cambiar a little endian?

Tengo un esquema de direccionamiento orientado a 16 bits que necesito enviar por cable y el otro lado espera MSB primero. ¿Alguna otra sugerencia?

Para responder cómo lo estoy haciendo, aquí está el método (que, por supuesto, no responde la pregunta).

typedef union ___address{
    uint16_t address;
    uint8_t addr_byte[2] ;

} my_addr;

Simplemente utilícelo como dos veces 8 bits en orden inverso, my_addr.addr_byte[1] y luego my_addr.addr_byte[0].

¿Por qué no intercambiar bytes antes de enviar?
Ya lo estoy haciendo, pero solo quería saber si es posible.
SETEND LEParece hacer el trabajo.
¿Cómo estás enviando los bits?

Respuestas (2)

El STM32F103 usa un formato little-endian en la memoria como se explica en el manual de programación en la página 30 . Esta es también mi experiencia, ya que no tuve que cambiar bytes al intercambiar números con mi PC (que es una máquina little endian, por supuesto).

Además, como se explica en la página de conocimiento de ARM, el Cortex M3 no es compatible con el cambio de endianness dinámico, por lo que está atascado con lo que el fabricante considere correcto.

Puede verificar el bit AIRCR.ENDIANNESS, solo para estar 100% seguro. Si lee 0 es una memoria little-endian, si es 1 usa big-endian.

Si tiene problemas de rendimiento debido al intercambio de bytes, es posible que pueda sortearlos con el uso de las instrucciones del ensamblador REV, REV16 y REVSH (no sé si su compilador ya lo hace solo).

+1 por vincular directamente a la página citada. No sabía que podías hacer eso.

Todos los MCU STM32 (y, de hecho, la mayoría de los MCU ARM Cortex-M en general) son little-endian.