/* Includes ------------------------------------------------------------------*/ #include "stm32f4xx_hal.h" #include "stm-uart.h" #include extern void Error_Handler(); UART_HandleTypeDef huart2; /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ inline void uart_putc(uint8_t *ch) { HAL_UART_Transmit(&huart2, ch, 1, 0x1); } void uart_send_binary(uint32_t num, uint8_t bits) { uint32_t i; unsigned char ch; bits--; /* bits 4 should give i = 1000, not 10000 */ i = 1 << bits; while (i) { ch = '0'; if (num & i) { ch = '1'; } uart_putc(&ch); i = i >> 1; } } void uart_send_string(char *s) { HAL_UART_Transmit(&huart2, (uint8_t *) s, strlen(s), 0x1); } void uart_send_integer(uint32_t data, uint32_t mag) { uint32_t i, t; unsigned char ch; if (! mag) { /* Find magnitude */ if (data < 10) { ch = '0' + data; HAL_UART_Transmit(&huart2, (uint8_t *) &ch, 1, 0x1); return; } for (mag = 10; mag < data; mag = i) { i = mag * 10; if (i > data || i < mag) break; } } /* mag is now 10 if data is 45, and 1000 if data is 1009 */ for (i = mag; i; i /= 10) { t = (data / i); ch = '0' + t; HAL_UART_Transmit(&huart2, (uint8_t *) &ch, 1, 0x1); data -= (t * i); } } void uart_send_hexbyte(const uint32_t data) { int i, j = 8; uint8_t ch; while (j) { j -= 4; i = (data >> j) & 0x0f; if (i > 9) { ch = 'a' + i - 10; uart_putc(&ch); } else { ch = '0' + i; uart_putc(&ch); } } } void uart_send_hexdump(const uint8_t *buf, const uint8_t start_offset, const uint8_t end_offset) { uint32_t i; uart_send_string("00 -- "); for (i = 0; i <= end_offset; i++) { if (i && (! (i % 16))) { uart_send_string("\r\n"); if (i != end_offset) { /* Output new offset unless the last byte is reached */ uart_send_hexbyte(i); uart_send_string(" -- "); } } uart_send_hexbyte(*(buf + i)); uart_send_string(" "); } }