What Are Clocks & Timers In Rust?

What Are Clocks & Timers In Rust?

What is a Clock?

  • Computers usage the inner clock to synchronize all of their calculations.
  • The clock confirms that the many circuits inside a computer work together at the same time.
  • The clock, in general, states to a microchip. That microchip controls the timing and speed of all computer functions.
  • In the chip is a crystal. That chip vibrates at an exact frequency when electricity is applied. The direct time any computer is accomplished of acting is one clock. It may be called one vibration of the clock chip.
  • Clock speed is dignified by how many ticks per second the clock makes.
  • The unit of a dimension is called a hertz (Hz).
  • The speed of a computer processor is measured in clock speed, for instance, 1 MHz is one million cycles, or vibrations, a second. Similarly, 2 GHz is two billion cycles, or vibrations, a second.

For loop isn’t good for creating delays

  • inline(never)]

fn delay(tim6: &tim6::RegisterBlock, ms: u16) {

for _ in 0..1_000 {}


No Operation

Here is a way to prevent LLVM from optimizing the loop delay: add a volatile assembly instruction. Some instruction will do but NOP (No Operation) is a particularly good choice in this case because it has no side effects. Our for loop delay would become:

  • inline(never)]

fn delay(_tim6: &tim6::RegisterBlock, ms: u16) {

const K: u16 = 3;

for _ in 0..(K * ms) {




Hardware Timer

  • The basic function of a hardware timer is to keep exact track of time.
  • A timer is up till now another peripheral that’s available to the microcontroller; thus it may be controlled using registers.
  • Hardware timers are mostly used for timing and counting operations. They allow the processor to carry on with some other process while the timer process runs.
  • A microcontroller has four general-purpose timers. It has a repetitive interrupt timer, and also a system tick timer.


  • One of the basic timers: TIM6 shall be used by us.
  • In our microcontroller, it is one of the simplest timers available.

Registers of TIM6 Peripheral

In this section, the registers we’ll be using are:

  • SR, the status register.
  • EGR, the event generations register.
  • CNT, the counter register.
  • PSC, the pre-scaler register.

One Pulse mode

Step 1:

Set the timer through auto-reload register ARR

Step 2:

We have to enable the counter register (CR1.CEN = 1)

Step 3:

We have to reset the value of the count register CNT to zero.

On each tick, its value gets incremented.

Step 4:

When the CNT register has touched the value of the ARR register, the counter will be disabled by hardware (CR1.CEN = 0) and an update event will be raised (SR.UIF = 1)

CNT register increase at a Frequency

CNT register increases at a frequency of apb1 / (PSC +1) times per second. Also note: 1 Khz = 1 ms (period)

Organize the Prescaler to have the counter operate at 1 kHz

Where: Formula: apb1 / (PSC +1)


PSC =?

8_000_000/ (PSC + 1) =?


Organize the Prescaler to have the counter operate at 1 kHz

Where: Formula: apb1 / (PSC +1)


PSC =?

8_000_000/ (7_999 + 1) = 1_000 Hz OR 1kHz

The counter (CNT) will increase on every millisecond

Mansoor Ahmed is Chemical Engineer, web developer, a writer currently living in Pakistan. My interests range from technology to web development. I am also interested in programming, writing, and reading.
Posts created 421

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top