@@ -857,32 +857,16 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
857857 */
858858void HAL_TIMx_PeriodElapsedCallback (stimer_t * obj )
859859{
860+ GPIO_TypeDef * port = get_GPIO_Port (STM_PORT (obj -> pin ));
860861
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 );
883867 }
884868 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 );
886870 }
887871 }
888872}
@@ -918,6 +902,7 @@ void TimerPinInit(stimer_t *obj, uint32_t frequency, uint32_t duration)
918902 uint32_t timFreq = 2 * frequency ;
919903 uint32_t prescaler = 1 ;
920904 uint32_t period = 0 ;
905+ uint32_t scale = 0 ;
921906
922907 if (frequency > MAX_FREQ )
923908 return ;
@@ -941,8 +926,10 @@ void TimerPinInit(stimer_t *obj, uint32_t frequency, uint32_t duration)
941926 digital_io_init (obj -> pin , GPIO_MODE_OUTPUT_PP , GPIO_NOPULL );
942927 timClkFreq = getTimerClkFreq (obj -> timer );
943928
929+ // Do this once
930+ scale = timClkFreq / timFreq ;
944931 while (end == 0 ) {
945- period = ((uint32_t )( timClkFreq / timFreq / prescaler )) - 1 ;
932+ period = ((uint32_t )( scale / prescaler )) - 1 ;
946933
947934 if ((period >= 0xFFFF ) && (prescaler < 0xFFFF ))
948935 prescaler ++ ; //prescaler *= 2;
0 commit comments