After studying the comments on the
article immediately went to work. Appeared goal:

As a result: the interface was refined, debug information was removed from the start screen; LCD display module (LCD) of the display has been improved - pressure and humidity graphs have appeared; Added external RTC (FrV) with ionistor. And the most important thing is the dial indicator.
Arrow indication and DAC
The easiest way to get an arrow indication is to apply voltage to the head of the measuring device. The desired voltage will form the digital-to-analog converter of the microcontroller. The STM32L has a dual-channel multifunctional
DAC . At the flea market, the first available device was purchased in good condition:

First of all, the circuit board with the parts was thrown out of the device.

Draw a scale:

Initializing D / A and Ports:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure);
write value:
DAC_SetChannel1Data(DAC_Align_12b_R, 160 + temperature * 3);
The output signal is quite enough to control the arrow, the voltage does not sag, the microcontroller is not heated. A value of 160 displays an arrow in the middle of the scale. As a result, we have the following picture at +25:

Graphics and LCD
The graphic mode was given not simply, I did not want to give the memory of the microcontroller to the storage of the output information, and for this it was necessary to implement reading from the LCD. It was not possible to configure the port for input and output at the same time, so you have to read or write to it before each entry or reading.
Port configurations: output -
GPIO_InitStructure.GPIO_Pin = DATA_PIN0 | DATA_PIN1 | DATA_PIN2 | DATA_PIN3 | DATA_PIN4 | DATA_PIN5 | DATA_PIN6 | DATA_PIN7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init( DATA_PORT, &GPIO_InitStructure);
to receive data -
GPIO_InitStructure.GPIO_Pin = DATA_PIN0 | DATA_PIN1 | DATA_PIN2 | DATA_PIN3 | DATA_PIN4 | DATA_PIN5 | DATA_PIN6 | DATA_PIN7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init( DATA_PORT, &GPIO_InitStructure);
There was also a pitfall “dumy read” - after setting the address, the first reading gives garbage, the second data.
After that, the function PutPixel, DrawLine, Rectangle (remembered childhood).

')
CRV
ChrV chip was chosen DS2417 with one-wire interface, it famously got along on the same bus with DS18B20.

Device selection is the same commands 55h + id but reading from DS2417 66h and DS18B20 BEh. The ionistor included in the power supply circuit ensures the operation of the clock even when the supply voltage is disconnected.
Sources of the project .