Join GitHub today
[H7] Migration to FW V1.4.0 library #8546
Application of Use union to access access size sensitive registers (7a0d3e7) to V1.4.0 ---- Note from "Use union to access access size sensitive registers (7a0d3e7)": ---- Use union to access access size sensitive registers As described in RM0433 section 49.4.13 "Data packing", STM32H7's SPI data register supports data packing and it is sensitive to actual access width. The original code used pointer casting to obtain a code to access the register in a desired size. However, these operation results in strict aliasing warnings (deferencing punned pointer) and are not desirable. Here, we declare a union that allow access to a 32-bit register in 8, 16 or 32-bit width and cast pointer to the original RXDR and TXDR data registers and then access the portion of the register through an appropriate union member. XXX FIXME Only handled 16-bit access case, as 32-bit (original declaration) and 8-bit (allowed) cases do not generate warnings, but these should be handled similarly for correctness and consistency of the code.
- VRef and Temperature sensor calibration constants defined in "stm32h7xx_ll_adc.h" are now included via “stm32h7xx_hal_adc.h”. - Boostmode is now handled by HAL_ADC_Init using clock configuration parameters to cope with Rev.V. - Channel specifier (ADC_CHANNEL_x) was a simple integer with V1.3.0, is now an bit field encoded value. adcTagMap had this value, but adcChannel field in adcOperationConfig was not big enough to store it. The adcChannel field is modified to hold 32-bit value. - Rank for channel configuration was a integer, now a bit field encoded value (ADC_RANK_x). adcRegularRankMap array was added to translate rank number to rank value. - Other Rev.V changes also seem to be handled within HAL.
As noted in Slack, I have tested a recent branch of this code on the SPRacingH7EXTREME and found a couple of missing changes which have now been merged into this branch by @jflyper