LINUX.ORG.RU

История изменений

Исправление 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;