@@ -857,32 +857,16 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
857
857
*/
858
858
void HAL_TIMx_PeriodElapsedCallback (stimer_t * obj )
859
859
{
860
+ GPIO_TypeDef * port = get_GPIO_Port (STM_PORT (obj -> pin ));
860
861
861
- if (get_GPIO_Port (STM_PORT (obj -> pin )) != NULL ) {
862
- if (obj -> pinInfo .count > 0 ){
863
- obj -> pinInfo .count -- ;
864
-
865
- if (obj -> pinInfo .state == 0 ) {
866
- obj -> pinInfo .state = 1 ;
867
- digital_io_write (get_GPIO_Port (STM_PORT (obj -> pin )), STM_GPIO_PIN (obj -> pin ), 1 );
868
- }
869
- else {
870
- obj -> pinInfo .state = 0 ;
871
- digital_io_write (get_GPIO_Port (STM_PORT (obj -> pin )), STM_GPIO_PIN (obj -> pin ), 0 );
872
- }
873
- }
874
- else if (obj -> pinInfo .count == -1 ) {
875
- if (obj -> pinInfo .state == 0 ) {
876
- obj -> pinInfo .state = 1 ;
877
- digital_io_write (get_GPIO_Port (STM_PORT (obj -> pin )), STM_GPIO_PIN (obj -> pin ), 1 );
878
- }
879
- else {
880
- obj -> pinInfo .state = 0 ;
881
- digital_io_write (get_GPIO_Port (STM_PORT (obj -> pin )), STM_GPIO_PIN (obj -> pin ), 0 );
882
- }
862
+ if (port != NULL ) {
863
+ if (obj -> pinInfo .count != 0 ){
864
+ if (obj -> pinInfo .count > 0 ) obj -> pinInfo .count -- ;
865
+ obj -> pinInfo .state = (obj -> pinInfo .state == 0 )? 1 : 0 ;
866
+ digital_io_write (port , STM_GPIO_PIN (obj -> pin ), obj -> pinInfo .state );
883
867
}
884
868
else {
885
- digital_io_write (get_GPIO_Port ( STM_PORT ( obj -> pin )) , STM_GPIO_PIN (obj -> pin ), 0 );
869
+ digital_io_write (port , STM_GPIO_PIN (obj -> pin ), 0 );
886
870
}
887
871
}
888
872
}
@@ -918,6 +902,7 @@ void TimerPinInit(stimer_t *obj, uint32_t frequency, uint32_t duration)
918
902
uint32_t timFreq = 2 * frequency ;
919
903
uint32_t prescaler = 1 ;
920
904
uint32_t period = 0 ;
905
+ uint32_t scale = 0 ;
921
906
922
907
if (frequency > MAX_FREQ )
923
908
return ;
@@ -941,8 +926,10 @@ void TimerPinInit(stimer_t *obj, uint32_t frequency, uint32_t duration)
941
926
digital_io_init (obj -> pin , GPIO_MODE_OUTPUT_PP , GPIO_NOPULL );
942
927
timClkFreq = getTimerClkFreq (obj -> timer );
943
928
929
+ // Do this once
930
+ scale = timClkFreq / timFreq ;
944
931
while (end == 0 ) {
945
- period = ((uint32_t )( timClkFreq / timFreq / prescaler )) - 1 ;
932
+ period = ((uint32_t )( scale / prescaler )) - 1 ;
946
933
947
934
if ((period >= 0xFFFF ) && (prescaler < 0xFFFF ))
948
935
prescaler ++ ; //prescaler *= 2;
0 commit comments