Simple frequency counter, run without modification on Nucleo board, Input pin PA0, PA1, PB3. Only for STM32F4 series (Tested on Nucleo-F401RE,-F411RE and F446RE)

Dependents:   Frequency_Counter_for_STM32F4xx

see /users/kenjiArai/notebook/frequency-counters/

Committer:
kenjiArai
Date:
Mon Jan 13 07:41:08 2020 +0000
Revision:
4:3c589d2aad5c
Parent:
3:61bea8bfe404
Modified only for STM32F series (Tested on Nucleo-F401RE,-F411RE and F446RE)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:83661d0d09c0 1 /*
kenjiArai 0:83661d0d09c0 2 * mbed Library program
kenjiArai 0:83661d0d09c0 3 * Frequency Counter Hardware relataed program
kenjiArai 0:83661d0d09c0 4 *
kenjiArai 4:3c589d2aad5c 5 * Copyright (c) 2014,'15,'20 Kenji Arai / JH1PJL
kenjiArai 4:3c589d2aad5c 6 * http://www7b.biglobe.ne.jp/~kenjia/
kenjiArai 4:3c589d2aad5c 7 * https://os.mbed.com/users/kenjiArai/
kenjiArai 4:3c589d2aad5c 8 * Created: October 18th, 2014
kenjiArai 4:3c589d2aad5c 9 * Revised: January 13th, 2020
kenjiArai 0:83661d0d09c0 10 *
kenjiArai 0:83661d0d09c0 11 */
kenjiArai 0:83661d0d09c0 12
kenjiArai 0:83661d0d09c0 13 #ifndef MBED_F_COUNTER
kenjiArai 0:83661d0d09c0 14 #define MBED_F_COUNTER
kenjiArai 0:83661d0d09c0 15
kenjiArai 0:83661d0d09c0 16 #include "mbed.h"
kenjiArai 0:83661d0d09c0 17
kenjiArai 4:3c589d2aad5c 18 /*
kenjiArai 4:3c589d2aad5c 19 CAUTION: Direct access to the CPU Timer module!!
kenjiArai 4:3c589d2aad5c 20 No way to change pin assign and timer module
kenjiArai 4:3c589d2aad5c 21 Tested on Nucleo F401RE, F411RE & F446RE
kenjiArai 4:3c589d2aad5c 22 Tested on mbed-os5.15.0 & mbed-2.0.165
kenjiArai 4:3c589d2aad5c 23
kenjiArai 4:3c589d2aad5c 24 Input pin selection -> Only PA0, PA1, PB3
kenjiArai 4:3c589d2aad5c 25 */
kenjiArai 4:3c589d2aad5c 26
kenjiArai 0:83661d0d09c0 27 /** Frequency Counter
kenjiArai 0:83661d0d09c0 28 *
kenjiArai 0:83661d0d09c0 29 * @code
kenjiArai 0:83661d0d09c0 30 * #include "mbed.h"
kenjiArai 0:83661d0d09c0 31 * #include "freq_counter.h"
kenjiArai 4:3c589d2aad5c 32 *
kenjiArai 4:3c589d2aad5c 33 * F_COUNTER fc(PA_0); // for F401,F411 & F446
kenjiArai 0:83661d0d09c0 34 *
kenjiArai 0:83661d0d09c0 35 * int main() {
kenjiArai 0:83661d0d09c0 36 * uint32_t frequency = 0;
kenjiArai 0:83661d0d09c0 37 *
kenjiArai 0:83661d0d09c0 38 * while(true) {
kenjiArai 0:83661d0d09c0 39 * freqency = fc.read_frequency(1.0); // gate time: 1 sec
kenjiArai 0:83661d0d09c0 40 * printf("%d [Hz]", frequency);
kenjiArai 0:83661d0d09c0 41 * }
kenjiArai 0:83661d0d09c0 42 * }
kenjiArai 0:83661d0d09c0 43 * @endcode
kenjiArai 0:83661d0d09c0 44 */
kenjiArai 0:83661d0d09c0 45
kenjiArai 0:83661d0d09c0 46 class F_COUNTER
kenjiArai 0:83661d0d09c0 47 {
kenjiArai 0:83661d0d09c0 48 public:
kenjiArai 0:83661d0d09c0 49 /** Configure data pin
kenjiArai 0:83661d0d09c0 50 * @param frequency counter input pin
kenjiArai 4:3c589d2aad5c 51 * @param gate time (seconds)
kenjiArai 0:83661d0d09c0 52 */
kenjiArai 4:3c589d2aad5c 53 F_COUNTER(PinName f_in, float gate_time = 1.0f);
kenjiArai 0:83661d0d09c0 54
kenjiArai 0:83661d0d09c0 55 /** Read measured frequency
kenjiArai 4:3c589d2aad5c 56 * @param none
kenjiArai 4:3c589d2aad5c 57 * @return measured frequency (minus = input pin is incorrect)
kenjiArai 0:83661d0d09c0 58 */
kenjiArai 4:3c589d2aad5c 59 int32_t read_frequency(void);
kenjiArai 4:3c589d2aad5c 60
kenjiArai 4:3c589d2aad5c 61 /** Set new gate time
kenjiArai 4:3c589d2aad5c 62 * @param new gate time (seconds)
kenjiArai 4:3c589d2aad5c 63 * @return none
kenjiArai 4:3c589d2aad5c 64 */
kenjiArai 4:3c589d2aad5c 65 void set_gate_time(float gat_time);
kenjiArai 4:3c589d2aad5c 66
kenjiArai 4:3c589d2aad5c 67 /** Read input assign number
kenjiArai 4:3c589d2aad5c 68 * @param none
kenjiArai 4:3c589d2aad5c 69 * @return Pin number
kenjiArai 4:3c589d2aad5c 70 */
kenjiArai 4:3c589d2aad5c 71 uint32_t read_pin();
kenjiArai 0:83661d0d09c0 72
kenjiArai 0:83661d0d09c0 73 protected:
kenjiArai 0:83661d0d09c0 74 DigitalIn _pin;
kenjiArai 4:3c589d2aad5c 75 Ticker _t;
kenjiArai 0:83661d0d09c0 76
kenjiArai 0:83661d0d09c0 77 void initialize(void);
kenjiArai 4:3c589d2aad5c 78 void irq(void);
kenjiArai 0:83661d0d09c0 79
kenjiArai 0:83661d0d09c0 80 private:
kenjiArai 4:3c589d2aad5c 81 uint32_t pin_num;
kenjiArai 4:3c589d2aad5c 82 float gt;
kenjiArai 4:3c589d2aad5c 83 int32_t freq_raw;
kenjiArai 4:3c589d2aad5c 84 bool new_input;
kenjiArai 0:83661d0d09c0 85
kenjiArai 0:83661d0d09c0 86 };
kenjiArai 0:83661d0d09c0 87
kenjiArai 0:83661d0d09c0 88 #endif // MBED_F_COUNTER