Variante 1, einfach Millivolt ausgeben:
1 | void send_millivolt(uint16_t val)
|
2 | {
|
3 | char buf[16];
|
4 | uint16_t x = (val * 3300ul + 2048) / 4095;
|
5 |
|
6 | HAL_UART_Transmit(&huart2, buf, sprintf(buf, "%umV\n", x), 1000);
|
7 | }
|
Oder etwas anders, diesmal mit Nachkommastellen:
1 | void uart_puts(char *buf)
|
2 | {
|
3 | HAL_UART_Transmit(&huart2, buf, strlen(buf), 1000);
|
4 | }
|
5 |
|
6 | void send_volt(uint16_t val)
|
7 | {
|
8 | char buf[16];
|
9 | uint16_t x = (val * 330ul + 2048) / 4095;
|
10 |
|
11 | sprintf(buf, "%u.%02uV\n", x/100, x%100);
|
12 | uart_puts(buf);
|
13 | }
|
Das "ul" in "* 3300ul" damit eine 32-bit-Multiplikation gemacht wird.
Das "+ 2048" zum Runden. Zerlegung der Zahl mittels "/" und "%".