История изменений
Исправление EtherealPhantom, (текущая версия) :
Я и сейчас не считаю, что регистры это страшно, но без веских причин это потеря времени и источник трудночитаемого кода.
Например, в STM32 есть встроенный датчик температуры, но из HAL доступа к нему нет, есть ли что-то про него в CMSIS/SPL/LL не в курсе. Для одного процессора - да, я написал коротенькую вставку. Но если нужно будет сделать хотя бы для двух разных - уберу все эти потроха нафиг в функцию. Будет bool hasTemperatureSensor() и [float|int] getTemperature() и все, дальше с новыми МК будут только добавляться внутренности, код снаружи и знать не будет как там что делается.
#ifdef STM32F303xC
#define VREFINT_CAL (*(uint16_t*)((uint32_t)0x1FFFF7BA))
#define TS_CAL1_30C (*(uint16_t*)((uint32_t)0x1FFFF7B8))
#define TS_CAL2_110C (*(uint16_t*)((uint32_t)0x1FFFF7C2))
#endif // STM32F303xC
hadc1.Instance->CR |= ADC12_CCR_TSEN;
uint32_t data = HAL_ADC_GetValue(&hadc1);
float temp_c = (80.0/(float)(TS_CAL2_110C-TS_CAL1_30C))*(data-(int32_t)TS_CAL1_30C)+30.0;
Исходная версия EtherealPhantom, :
Я и сейчас не считаю, что регистры это страшно, но без веских причин это потеря времени и источник трудночитаемого кода.
Например, в STM32 есть встроенный датчик температуры, но из HAL доступа к нему нет, есть ли что-то про него в CMSIS/SPL/LL не в курсе. Для одного процессора - да, я написал коротенькую вставку. Но если нужно будет сделать хотя бы для двух разных - уберу все эти потроха нафиг в функцию. Будет bool hasTemperatureSensor() и [float|int] getTemperature() и все, дальше с новыми МК будут только добавляться внутренности, код снаружи и знать не будет как там что делается.
#ifdef STM32F303xC #define VREFINT_CAL ((uint16_t)((uint32_t)0x1FFFF7BA)) #define TS_CAL1_30C ((uint16_t)((uint32_t)0x1FFFF7B8)) #define TS_CAL2_110C ((uint16_t)((uint32_t)0x1FFFF7C2)) #endif // STM32F303xC
hadc1.Instance->CR |= ADC12_CCR_TSEN;
uint32_t data = HAL_ADC_GetValue(&hadc1); float temp_c = (80.0/(float)(TS_CAL2_110C-TS_CAL1_30C))*(data-(int32_t)TS_CAL1_30C)+30.0;