Soy un gran admirador del tablero de pastillas azul. Son muy buenos en términos de precio / rendimiento. En realidad, mi amor por ellos se nota en el
artículo de April Fools sobre el firmware del pedal para tocar la balalaika .

Abra una caja con estos tableros y tome uno rápidamente para resolver algunos problemas, en el orden de las cosas. Así es, recientemente tomé la siguiente placa, la flasheé con un "firmware" bien depurado y probado y ... obtuve un dispositivo USB no identificado. Tomé otro tablero, lo "flasheé", el dispositivo funcionaba allí. Se acabaría el asunto, pero me pregunto cuál es el problema. Por lo tanto, cuando llegó el fin de semana, comencé un estudio detallado de por qué no funciona.
En general, antes de "flashear" las placas, me aseguro de que la prueba realizada por el fabricante funcione: el LED parpadea. Así que estaba seguro de que el procesador, en general, está vivo. ¿Cuál es la culpa entonces? Quizás líneas USB o cuarzo.
Las líneas estaban bien, el cuarzo no comenzó. Pero puede no comenzar por muchas razones. Su lanzamiento se realiza mediante programación, ya en las entrañas de la función
main () . Bueno, bueno, comenzamos a depurar el programa.
Todo estaría bien, pero el depurador no va a la función
main () . El programa se cuelga en algún lugar entre el inicio y esta función.

Paramos el programa: bastante esperado, estamos en el controlador
HardFault .


¿Qué nos trae por aquí? Restablecer el contador de direcciones:

Y comenzamos a seguir cuidadosamente el programa. Aquí en esta línea todo muere, usamos al menos la operación de
paso , al menos
paso a paso .

Jolly Keil ... Bueno, nada. Restablezca todo nuevamente (RST), haga clic con el mouse en la ventana del desensamblador y avance. En este caso, podemos entender que todo está muriendo dentro de la función
__scatterload .

En general, si todo muere en esta función, ya hay una razón para ver si el tipo de controlador está confundido. Pero no, es cierto (también verifiqué dos veces la configuración, pero este firmware funciona en otras placas).

Bueno Nuevamente, reiniciamos todo y ya rastreamos esta función. Después de algunos juicios, cuelga y se sonroja, encontramos la línea de culpabilidad ...

Si si. Todo muere al guardar registros en la pila. Al mismo tiempo, se ve a la izquierda que SP es 0x200030A0. Nos fijamos en la documentación para el controlador:

Veamos qué ventana está asignada para SRAM:

Eso es correcto El puntero de pila (SP) está en el rango permitido. Entonces, ¿cuál es la culpa? Intentemos reemplazar descaradamente el valor de SP con 0x200030A0, digamos, con 0x200020A0, ya que el depurador permite esto ... ¡Chpok! ¡El bloqueo en la línea especificada se ha detenido! Entonces, nuestro chip de memoria no tiene 20 kilobytes. Cuanto? Después de verificar varias veces, descubrimos que el último valor de trabajo de SP es 0x20002800. Es decir, 10 kilobytes. Esto corresponde al cristal STM32F103C6. Ante nosotros hay un microcircuito aserrado. Por desgracia
Todo estaría bien, pero las tablas de este lote en mi caja bastante grande son fáciles de distinguir. Tienen un color especial de puentes y un LED esmeralda muy hermoso (el resto tiene un tono verde menos agradable). Por lo tanto, se pueden asignar fácilmente desde el montón de otras placas. Por supuesto, los revisé. Por supuesto, toda la fiesta se cortó (tomé una docena).
Qué hacer con esto no está claro. Cuando obtuve tres piezas en una docena de tableros, que no tenían una prueba regular: el LED no parpadeaba (así que ahora los reviso no selectivamente, sino totalmente), pasé una semana en el vendedor. Él "se volvió loco". Constantemente interesado en lo que quiero hacer, prometió ayudar con consejos. Y le repetí una y otra vez que me conecté estúpidamente a la fuente de alimentación, siete tableros parpadean, tres, no. Entonces están muertos. Y nuevamente tiene su órgano de barril. Y así una semana. Pero allí todo era obvio. No pasó la prueba del personal. Aquí, la prueba de tiempo completo pasa, no necesita mucha memoria. Cómo demostrar que vino un falso no está claro. Y si puede probarlo, de todos modos, de acuerdo con las reglas de Ali Express, debe devolver los productos. En general, todo parece desesperanza. Y lo más importante, el vendedor final no tuvo intenciones maliciosas. Tomé otro lote de él, más tarde. Todo está bien allí. Él mismo fue decepcionado.
De una forma u otra, informo al público que esto sucede. Verifique las placas no solo para el rendimiento general, sino también para las especificaciones del mundo real. Es cierto, qué hacer con una falta de coincidencia no está claro.
El artículo tiene otro beneficio práctico. Muestra cómo puede encontrar rápidamente la razón por la cual la placa de repente no funciona, si el problema no es la inoperancia completa del controlador (responde a través del puerto de depuración SWD).