How to use STM32 _Msk and _Pos definitions to read and write registers
The STM32 HAL contains definitions like TIM_CR1_CKD_Msk
or TIM_CR1_CKD_Pos
which you can use to make it easier to read or write parts of a register.
Reading a part of a register
uint32_t ckd = (TIM1->CR1 & TIM_CR1_CKD_Msk) >> TIM_CR1_CKD_Pos;
Writing a part of a register
uint32_t new_ckd_value = TIM_CLOCKDIVISION_DIV4; // example
TIM1->CR1 &= TIM_CR1_CKD_Msk; // Clear bits
TIM1->CR1 |= new_ckd_value << TIM_CR1_CKD_Pos; // Set bits