Простой частотомер STM32 + TM1637 (Arduino)

Используя отладочную плату STM32 (базе микроконтроллера STM32F103C8T6 и модуль семисегментного дисплея TM1637, можно собрать простой частотомер с максимальной частотой измерения 1 МГц.

Индикатор показывает измеряемую частоту в кГц. Время измерения 1 секунда. Подавать входной сигнал (уровень TTL) необходимо на вход PA2.

Для подключения библиотека использует цифровые входы STM32 PB0 (CLK) PB1 (DIO), но можно использовать и другие цифровые входы указав их значения в функции tm(PB0,PB1).

Перед заливкой скетча в STM32 Вам необходимо ознакомиться со следующей статьей — STM32 Arduino IDE

Для нормальной загрузки скетча Вам понадобится набор библиотек Arduino_STM32-master.zip
#include <STM32_TM1637.h>                // http://rcl-radio.ru/wp-content/uploads/2020/02/STM32_TM1637_V1_3.zip
   STM32_TM1637 tm(PB0,PB1);// CLK, DIO
   unsigned long fx;
   float f;
 
void setup() {
  Serial.begin(9600);tm.brig(7); // ЯРКОСТЬ 0...7
  pinMode(PA2,INPUT);
  Timer3.pause(); // pause
  Timer3.setPeriod(1000000); // 1sec
  Timer3.attachInterrupt(TIMER_UPDATE_INTERRUPT, fr_1); 
  Timer3.refresh(); // clear 
  Timer3.resume(); // start
}
 
void loop() {
  while(!(GPIOA-> regs-> IDR & 0x0004)); 
  while((GPIOA-> regs-> IDR & 0x0004)); 
  fx++; 
  }
 
void fr_1(){
   Serial.println(fx);
   if(fx<10000){f=(float)fx/1000;fx=0;tm.print_float(f,3 ,0,0,0,0);}
   if(fx>=10000&&fx<100000){f=(float)fx/1000;fx=0;tm.print_float(f,2 ,0,0,0,0);}
   if(fx>=100000&&fx<1000000){f=(float)fx/1000;fx=0;tm.print_float(f,1 ,0,0,0,0);}
   if(fx>=1000000){fx=0;tm.print_float(f,0 ,0b1000000,0b1000000,0b1000000,0b1000000);}
   Timer3.refresh();
  }

 

Добавить комментарий

Войти с помощью: