stm32l010 timer test 1r

Dependencies:   mbed

Committer:
caa45040
Date:
Sat May 15 04:52:37 2021 +0000
Revision:
0:f0f1f2affd64
stm32l010 timer_test_010 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caa45040 0:f0f1f2affd64 1 //timer
caa45040 0:f0f1f2affd64 2
caa45040 0:f0f1f2affd64 3 #include "mbed.h"
caa45040 0:f0f1f2affd64 4
caa45040 0:f0f1f2affd64 5 //10の割り算 0から1028までは、正しい。主に0から999
caa45040 0:f0f1f2affd64 6 #define DVI10(n) ((n*205)>>11)
caa45040 0:f0f1f2affd64 7
caa45040 0:f0f1f2affd64 8 //1000の割り算 180000までは、ほぼ正しい ミリ秒を切り捨てす為に精度は、不要
caa45040 0:f0f1f2affd64 9 #define DVI1000(n3) (((n3>>3)*4195)>>19)
caa45040 0:f0f1f2affd64 10
caa45040 0:f0f1f2affd64 11 //6の割り算 主に18まで
caa45040 0:f0f1f2affd64 12 #define DVI6(n6) ((n6*683)>>12)
caa45040 0:f0f1f2affd64 13
caa45040 0:f0f1f2affd64 14 //Serial pc(USBTX, USBRX); // tx, rx
caa45040 0:f0f1f2affd64 15 //Serial pc(SERIAL_TX, SERIAL_RX); //767
caa45040 0:f0f1f2affd64 16 //Serial pc(PA_2, PA_3); //010
caa45040 0:f0f1f2affd64 17 //Serial pc(PA_9, PA_10); //010
caa45040 0:f0f1f2affd64 18
caa45040 0:f0f1f2affd64 19 #define UART_DELAY 96 // 1/9600
caa45040 0:f0f1f2affd64 20
caa45040 0:f0f1f2affd64 21 //仮想シリアルの出力ポート
caa45040 0:f0f1f2affd64 22 //DigitalOut TX(PA_9);
caa45040 0:f0f1f2affd64 23 DigitalOut TX(PA_2);
caa45040 0:f0f1f2affd64 24
caa45040 0:f0f1f2affd64 25 //DigitalOut myled(D13); //767
caa45040 0:f0f1f2affd64 26 DigitalOut myled(PA_4);
caa45040 0:f0f1f2affd64 27
caa45040 0:f0f1f2affd64 28 //タイマーの定義
caa45040 0:f0f1f2affd64 29 Timer t;
caa45040 0:f0f1f2affd64 30
caa45040 0:f0f1f2affd64 31 //d int q_st; //スタートタイム debug
caa45040 0:f0f1f2affd64 32 //d int q_et; //エンドタイム debug
caa45040 0:f0f1f2affd64 33
caa45040 0:f0f1f2affd64 34 //仮想シリアルへの一文字出力 9600bps
caa45040 0:f0f1f2affd64 35 int pc_putc(char ch) {
caa45040 0:f0f1f2affd64 36
caa45040 0:f0f1f2affd64 37 TX=1;
caa45040 0:f0f1f2affd64 38
caa45040 0:f0f1f2affd64 39 //d q_st = t.read_us(); //debug
caa45040 0:f0f1f2affd64 40
caa45040 0:f0f1f2affd64 41 TX=0;//START
caa45040 0:f0f1f2affd64 42 wait_us(UART_DELAY);
caa45040 0:f0f1f2affd64 43
caa45040 0:f0f1f2affd64 44 //d q_et = t.read_us(); //debug
caa45040 0:f0f1f2affd64 45
caa45040 0:f0f1f2affd64 46 for(int ii=0;ii<8;ii++){
caa45040 0:f0f1f2affd64 47 TX=(ch>>ii)&1;
caa45040 0:f0f1f2affd64 48 wait_us(UART_DELAY);
caa45040 0:f0f1f2affd64 49 }; //for
caa45040 0:f0f1f2affd64 50
caa45040 0:f0f1f2affd64 51 TX=1;//Stop
caa45040 0:f0f1f2affd64 52 wait_us(UART_DELAY);
caa45040 0:f0f1f2affd64 53
caa45040 0:f0f1f2affd64 54 //d q_et = t.read_us(); //debug 引いた数が0で1041ufなら正解
caa45040 0:f0f1f2affd64 55
caa45040 0:f0f1f2affd64 56 return(0);
caa45040 0:f0f1f2affd64 57
caa45040 0:f0f1f2affd64 58 } //pc_putc
caa45040 0:f0f1f2affd64 59
caa45040 0:f0f1f2affd64 60 //文字列の表示
caa45040 0:f0f1f2affd64 61 int pc_printf(char *str1) {
caa45040 0:f0f1f2affd64 62
caa45040 0:f0f1f2affd64 63 //文字の中身がゼロか
caa45040 0:f0f1f2affd64 64 while(*str1){
caa45040 0:f0f1f2affd64 65
caa45040 0:f0f1f2affd64 66 //一文字出力
caa45040 0:f0f1f2affd64 67 pc_putc(*str1 ++);
caa45040 0:f0f1f2affd64 68
caa45040 0:f0f1f2affd64 69 } //while
caa45040 0:f0f1f2affd64 70
caa45040 0:f0f1f2affd64 71 //戻り値
caa45040 0:f0f1f2affd64 72 return(0);
caa45040 0:f0f1f2affd64 73 }//pc_printf
caa45040 0:f0f1f2affd64 74
caa45040 0:f0f1f2affd64 75 //10文字分のバッファー
caa45040 0:f0f1f2affd64 76 char str10[10];
caa45040 0:f0f1f2affd64 77
caa45040 0:f0f1f2affd64 78 //d int l_num,aaa,bbb,ccc,qqq; //debug
caa45040 0:f0f1f2affd64 79 //d char ch_hex_a_b[10]; //debug
caa45040 0:f0f1f2affd64 80
caa45040 0:f0f1f2affd64 81 int main() {
caa45040 0:f0f1f2affd64 82
caa45040 0:f0f1f2affd64 83 //初期化
caa45040 0:f0f1f2affd64 84 TX=1;wait_ms(2); //文字分のウエート
caa45040 0:f0f1f2affd64 85 pc_printf("\r\n"); //ゴミの吐き出し
caa45040 0:f0f1f2affd64 86
caa45040 0:f0f1f2affd64 87 //d pc_printf("\r\n");
caa45040 0:f0f1f2affd64 88 //d pc_printf("Hello World!\r\n");
caa45040 0:f0f1f2affd64 89
caa45040 0:f0f1f2affd64 90 //タイマーの開始
caa45040 0:f0f1f2affd64 91 t.start();
caa45040 0:f0f1f2affd64 92 //pc.printf("Hello World!\r\n");
caa45040 0:f0f1f2affd64 93 //t.stop();
caa45040 0:f0f1f2affd64 94
caa45040 0:f0f1f2affd64 95
caa45040 0:f0f1f2affd64 96 //d //dbbug
caa45040 0:f0f1f2affd64 97 //d for(int ll=0;ll<40;ll++){
caa45040 0:f0f1f2affd64 98 //d pc_putc('A');
caa45040 0:f0f1f2affd64 99 //d //q_st = t.read_us(); //debug
caa45040 0:f0f1f2affd64 100 //d //wait_us(104);
caa45040 0:f0f1f2affd64 101 //d //q_et = t.read_us(); //debug
caa45040 0:f0f1f2affd64 102 //d l_num = (q_et-q_st)/10;
caa45040 0:f0f1f2affd64 103 //d bbb=DVI10(l_num);
caa45040 0:f0f1f2affd64 104 //d ccc=l_num-(bbb*10);
caa45040 0:f0f1f2affd64 105 //d l_num=bbb;
caa45040 0:f0f1f2affd64 106 //d aaa=DVI10(l_num);
caa45040 0:f0f1f2affd64 107 //d bbb=l_num-(aaa*10);
caa45040 0:f0f1f2affd64 108 //d ch_hex_a_b[0] = '0' + aaa;
caa45040 0:f0f1f2affd64 109 //d ch_hex_a_b[1] = '0' + bbb;
caa45040 0:f0f1f2affd64 110 //d ch_hex_a_b[2] = '0' + ccc;
caa45040 0:f0f1f2affd64 111 //d ch_hex_a_b[3] = 'X';
caa45040 0:f0f1f2affd64 112 //d ch_hex_a_b[4] = 'u';
caa45040 0:f0f1f2affd64 113 //d ch_hex_a_b[5] = 'S';
caa45040 0:f0f1f2affd64 114 //d ch_hex_a_b[6] = 0;
caa45040 0:f0f1f2affd64 115 //d pc_printf(ch_hex_a_b);
caa45040 0:f0f1f2affd64 116 //d pc_printf("\r\n");
caa45040 0:f0f1f2affd64 117 //d wait_ms(1000);
caa45040 0:f0f1f2affd64 118 //d }
caa45040 0:f0f1f2affd64 119 //d pc_printf("\r\n");
caa45040 0:f0f1f2affd64 120
caa45040 0:f0f1f2affd64 121
caa45040 0:f0f1f2affd64 122 //初期値の表示
caa45040 0:f0f1f2affd64 123 pc_printf("0m00s\r\n");
caa45040 0:f0f1f2affd64 124
caa45040 0:f0f1f2affd64 125 //最初のウエート
caa45040 0:f0f1f2affd64 126 wait_ms(990);
caa45040 0:f0f1f2affd64 127
caa45040 0:f0f1f2affd64 128 int a,b,c,d,e; //分秒
caa45040 0:f0f1f2affd64 129 int a_bk=0; //秒のバックアップ
caa45040 0:f0f1f2affd64 130
caa45040 0:f0f1f2affd64 131 //無限ループ
caa45040 0:f0f1f2affd64 132 while(1) {
caa45040 0:f0f1f2affd64 133 //pc.printf("The time taken was %f seconds\r\n", t.read()); //767
caa45040 0:f0f1f2affd64 134 //pc.printf("The time taken was %d seconds\r\n", DVI1000( t.read_ms() ) ); //767
caa45040 0:f0f1f2affd64 135
caa45040 0:f0f1f2affd64 136 //秒が変わるまで待つ
caa45040 0:f0f1f2affd64 137 while(1) {
caa45040 0:f0f1f2affd64 138 a = DVI1000( t.read_ms() ); //秒
caa45040 0:f0f1f2affd64 139 if( a != a_bk) {break;}
caa45040 0:f0f1f2affd64 140 }//while
caa45040 0:f0f1f2affd64 141 a_bk=a; //値を保存
caa45040 0:f0f1f2affd64 142
caa45040 0:f0f1f2affd64 143 //1秒毎のブリンク
caa45040 0:f0f1f2affd64 144 myled = 1;
caa45040 0:f0f1f2affd64 145 wait_ms(10);
caa45040 0:f0f1f2affd64 146 myled = 0;
caa45040 0:f0f1f2affd64 147
caa45040 0:f0f1f2affd64 148 //秒から分の分離
caa45040 0:f0f1f2affd64 149 b = DVI10( a ); //1シフト 123秒の時は、12が戻る
caa45040 0:f0f1f2affd64 150 c = a - (b*10); //1の桁 123秒の時は、3が戻る
caa45040 0:f0f1f2affd64 151 d = DVI6( b ); //分 12の時は、3分
caa45040 0:f0f1f2affd64 152 e = b - ( d * 6 ); // 秒の10の桁 12- 3分*6 = 0
caa45040 0:f0f1f2affd64 153 //pc.printf("%d %t %d %t %d \r\n", d , e , c ); //767
caa45040 0:f0f1f2affd64 154
caa45040 0:f0f1f2affd64 155 //分秒の表示
caa45040 0:f0f1f2affd64 156 str10[0] = ('0'+d);
caa45040 0:f0f1f2affd64 157 str10[1] = ('m');
caa45040 0:f0f1f2affd64 158 str10[2] = ('0'+e);
caa45040 0:f0f1f2affd64 159 str10[3] = ('0'+c);
caa45040 0:f0f1f2affd64 160 str10[4] = ('s');
caa45040 0:f0f1f2affd64 161 str10[5] = ('\r');
caa45040 0:f0f1f2affd64 162 str10[6] = ('\n');
caa45040 0:f0f1f2affd64 163 str10[7] = (0);
caa45040 0:f0f1f2affd64 164 pc_printf(str10);
caa45040 0:f0f1f2affd64 165
caa45040 0:f0f1f2affd64 166 //3分経ったらループを停止してブリンク
caa45040 0:f0f1f2affd64 167 if( a == 180 /*3分*/ ) {
caa45040 0:f0f1f2affd64 168 while(1){
caa45040 0:f0f1f2affd64 169 myled = 1;
caa45040 0:f0f1f2affd64 170 wait_ms(500);
caa45040 0:f0f1f2affd64 171 myled = 0;
caa45040 0:f0f1f2affd64 172 wait_ms(500);
caa45040 0:f0f1f2affd64 173 }//while
caa45040 0:f0f1f2affd64 174 }//if
caa45040 0:f0f1f2affd64 175
caa45040 0:f0f1f2affd64 176 //pc.printf("The time taken was %d seconds\r\n", t.read_ms()); //767
caa45040 0:f0f1f2affd64 177 //pc.printf("The time taken was %d seconds\r\n", t.read_us()); //767
caa45040 0:f0f1f2affd64 178
caa45040 0:f0f1f2affd64 179 //約1秒を待つ
caa45040 0:f0f1f2affd64 180 wait_ms(980);
caa45040 0:f0f1f2affd64 181 } //while
caa45040 0:f0f1f2affd64 182
caa45040 0:f0f1f2affd64 183 } //main
caa45040 0:f0f1f2affd64 184
caa45040 0:f0f1f2affd64 185 //容量削減
caa45040 0:f0f1f2affd64 186 void error(const char* format, ...){}