ST/STM32F103C8

STM32F103C8 - 1cycle Time

engineer4ever 2025. 8. 8. 10:42

 

STM32의 1cycle은 과연 1/주파수(frequency) = 주기(period)가 맞을까?

어떻게 측정을 할까? 실제로 1cycle이 몇초인지 측정해 보았다.(STM32F103C8으로 테스트)

 

1. BIT Toggle 시간 측정

   while (1)
   {
	  GPIOB->ODR |= GPIO_PIN_12;
	  GPIOB->ODR &= ~GPIO_PIN_12;
   }
 

- duty가 50%가 안나온다. while()로 돌렸지만, for문과 같다고 봐야 한다.

(PORT를 low로 만들고 while문 나와서 다시 들어가는데 시간이 걸린다는 뜻)

- high일때의 시간은 124.7332ns

 

2. BIT Toggle + 1cycle 명령어(SHIFT) 추가 하여 시간 측정

   while (1)
   {
	  GPIOB->ODR |= GPIO_PIN_12;
	  delay_count << 1;
	  GPIOB->ODR &= ~GPIO_PIN_12;
	  delay_count << 1;
   }
 

- high일때의 시간은 138.4076ns

- 위와 같이 했는데 1번과 시간이 같다면 컴파일러가 최적화 시키면서 지운것이므로 delay_count에 volatile 붙일 것

- asm 코드를 봐야 하지만 디버거를 붙이지 않아서 확인 하지 못함

2번 high 시간 - 1번 high 시간 = 1cycle time = 1/주파수 = 주기
138.4076 - 124.7332 = 13.6744ns ≒ 1 / 72MHz = 13.89ns

 

PORT Toggle에 생각보다 많은 시간이 걸린다.

작업하던 project에서 테스트 코드만 넣어서 측정했더니 위와 같이 시간이 나온다.

 

3. BIT 제어 레지스터 + 1cycle 명령어(SHIFT) 추가 하여 시간 측정

   while (1)
   {
	  GPIOB->BSRR = GPIO_PIN_12;
	  delay_count << 1;
	  GPIOB->BRR = GPIO_PIN_12;
	  delay_count << 1;
   }
 

- high일때의 시간은 82.8843ns

 

 

'ST > STM32F103C8' 카테고리의 다른 글

STM32F103C8 - RAM 48KB + bonus?  (0) 2025.08.08
STM32F103C8 - LL driver + ADC + DMA  (0) 2025.08.08
STM32F103C8 - I2C HAL driver 오류  (0) 2025.08.08
STM32F103C8 - ADC(DMA interrupt)  (1) 2025.08.08
STM32F103C8 - I2C(EEPROM)  (1) 2025.08.08