+/*
+ * Debugging Utilities for STM32
+ *
+ * (c) 2018--2019 Martin Mareš <mj@ucw.cz>
+ */
+
#include "util.h"
+#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/usart.h>
#include <stdarg.h>
// Use this USART for debugging messages
// #define DEBUG_USART USART1
+// Use this LED for debugging
+#ifdef DEBUG_LED_BLUEPILL
+#define DEBUG_LED_GPIO GPIOC
+#define DEBUG_LED_PIN GPIO13
+#define DEBUG_LED_INVERSE
+#endif
+
/*** Implementation ***/
#ifdef DEBUG_SEMIHOSTING
#endif
#ifdef DEBUG_USART
if (c == '\n')
- usart_send_blocking(USART2, '\r');
- usart_send_blocking(USART2, c);
+ usart_send_blocking(DEBUG_USART, '\r');
+ usart_send_blocking(DEBUG_USART, c);
+#endif
+}
+
+void debug_flush(void)
+{
+#ifdef DEBUG_USART
+ while (!usart_get_flag(DEBUG_USART, USART_FLAG_TC))
+ ;
#endif
}
c = *fmt++;
switch (c) {
+ case 'c':
+ debug_putc(va_arg(args, int));
+ break;
case 'd':
printf_number(va_arg(args, int), width, flags | PF_SIGNED, 10);
break;
va_end(args);
}
+
+void debug_led(bool light)
+{
+#ifdef DEBUG_LED_GPIO
+#ifdef DEBUG_LED_INVERSE
+ light = !light;
+#endif
+ if (light)
+ gpio_set(DEBUG_LED_GPIO, DEBUG_LED_PIN);
+ else
+ gpio_clear(DEBUG_LED_GPIO, DEBUG_LED_PIN);
+#endif
+}
+
+void debug_led_toggle(void)
+{
+#ifdef DEBUG_LED_GPIO
+ gpio_toggle(DEBUG_LED_GPIO, DEBUG_LED_PIN);
+#endif
+}