stm32l010 soft serial test 1

Dependencies:   mbed

Committer:
caa45040
Date:
Wed May 12 22:14:44 2021 +0000
Revision:
0:b98487737435
stm32l010 soft serial rx 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caa45040 0:b98487737435 1 #include "mbed.h"
caa45040 0:b98487737435 2
caa45040 0:b98487737435 3 //10の割り算 0から1028までは、正しい。主に0から999
caa45040 0:b98487737435 4 #define DVI10(n) ((n*205)>>11)
caa45040 0:b98487737435 5
caa45040 0:b98487737435 6 //Serial pc(USBTX, USBRX); // tx, rx
caa45040 0:b98487737435 7 //Serial pc(SERIAL_TX, SERIAL_RX); //767
caa45040 0:b98487737435 8 //Serial pc(PA_2, PA_3); //010
caa45040 0:b98487737435 9 //Serial pc(PA_9, PA_10); //010
caa45040 0:b98487737435 10
caa45040 0:b98487737435 11 #define UART_DELAY 96 // 1/9600
caa45040 0:b98487737435 12
caa45040 0:b98487737435 13 DigitalOut TX(PA_2);
caa45040 0:b98487737435 14 DigitalIn RX(PA_3);
caa45040 0:b98487737435 15 //DigitalOut TX(PA_9);
caa45040 0:b98487737435 16 //DigitalIn RX(PA_10);
caa45040 0:b98487737435 17
caa45040 0:b98487737435 18 char ch_hex_a_b[5];
caa45040 0:b98487737435 19 char *ch_hex_a(int l_num)
caa45040 0:b98487737435 20 {
caa45040 0:b98487737435 21 int a,b,c;
caa45040 0:b98487737435 22
caa45040 0:b98487737435 23 int q=0;
caa45040 0:b98487737435 24 if(l_num < 0) { l_num = 0 - l_num; q = 1;}
caa45040 0:b98487737435 25
caa45040 0:b98487737435 26 b=DVI10(l_num);
caa45040 0:b98487737435 27 c=l_num-(b*10);
caa45040 0:b98487737435 28 l_num=b;
caa45040 0:b98487737435 29 a=DVI10(l_num);
caa45040 0:b98487737435 30 b=l_num-(a*10);
caa45040 0:b98487737435 31
caa45040 0:b98487737435 32 ch_hex_a_b[0] = '0' + a;
caa45040 0:b98487737435 33 ch_hex_a_b[1] = '0' + b;
caa45040 0:b98487737435 34 ch_hex_a_b[2] = '0' + c;
caa45040 0:b98487737435 35 ch_hex_a_b[3] = 0;
caa45040 0:b98487737435 36
caa45040 0:b98487737435 37 if( q == 1 ) {ch_hex_a_b[0]='-';}
caa45040 0:b98487737435 38
caa45040 0:b98487737435 39 return(ch_hex_a_b);
caa45040 0:b98487737435 40 } //ch_hex_a
caa45040 0:b98487737435 41
caa45040 0:b98487737435 42
caa45040 0:b98487737435 43 //仮想シリアルへの一文字出力 9600bps
caa45040 0:b98487737435 44 int pc_putc(char ch) {
caa45040 0:b98487737435 45
caa45040 0:b98487737435 46 TX=1;
caa45040 0:b98487737435 47 TX=0;//START
caa45040 0:b98487737435 48 wait_us(UART_DELAY);
caa45040 0:b98487737435 49
caa45040 0:b98487737435 50 for(int ii=0;ii<8;ii++){
caa45040 0:b98487737435 51 TX=(ch>>ii)&1;
caa45040 0:b98487737435 52 wait_us(UART_DELAY);
caa45040 0:b98487737435 53 }; //for
caa45040 0:b98487737435 54
caa45040 0:b98487737435 55 TX=1;//Stop
caa45040 0:b98487737435 56 wait_us(UART_DELAY);
caa45040 0:b98487737435 57
caa45040 0:b98487737435 58 return(0);
caa45040 0:b98487737435 59
caa45040 0:b98487737435 60 } //pc_putc
caa45040 0:b98487737435 61
caa45040 0:b98487737435 62 //文字列の表示
caa45040 0:b98487737435 63 int pc_printf(char *str1) {
caa45040 0:b98487737435 64
caa45040 0:b98487737435 65 int ii = 0; //ループカウンター
caa45040 0:b98487737435 66 while(str1[ii]!=0){
caa45040 0:b98487737435 67
caa45040 0:b98487737435 68 //一文字出力
caa45040 0:b98487737435 69 pc_putc(str1[ii]);ii++;
caa45040 0:b98487737435 70
caa45040 0:b98487737435 71 } //while
caa45040 0:b98487737435 72
caa45040 0:b98487737435 73 //戻り値
caa45040 0:b98487737435 74 return(0);
caa45040 0:b98487737435 75 }
caa45040 0:b98487737435 76
caa45040 0:b98487737435 77 //タイマーの定義
caa45040 0:b98487737435 78 Timer t;
caa45040 0:b98487737435 79
caa45040 0:b98487737435 80 int a,b,c,d,e,f,g,h;
caa45040 0:b98487737435 81 int bs;
caa45040 0:b98487737435 82 int zt,at,bt,ct,dt,et,ft,gt,ht,it;
caa45040 0:b98487737435 83 char *ret1="\r\n";
caa45040 0:b98487737435 84
caa45040 0:b98487737435 85
caa45040 0:b98487737435 86 int pc_getc()
caa45040 0:b98487737435 87 {
caa45040 0:b98487737435 88
caa45040 0:b98487737435 89 //待ちループ
caa45040 0:b98487737435 90 while( RX == 1 ) {}
caa45040 0:b98487737435 91
caa45040 0:b98487737435 92 //llllllllllllllllllllllllllllllllllllllll
caa45040 0:b98487737435 93
caa45040 0:b98487737435 94 zt = t.read_us();
caa45040 0:b98487737435 95
caa45040 0:b98487737435 96 wait_us(156-7-12);
caa45040 0:b98487737435 97
caa45040 0:b98487737435 98 a=RX;
caa45040 0:b98487737435 99 at = t.read_us();
caa45040 0:b98487737435 100
caa45040 0:b98487737435 101 wait_us(104-7-11);
caa45040 0:b98487737435 102
caa45040 0:b98487737435 103 b=RX;
caa45040 0:b98487737435 104 bt = t.read_us();
caa45040 0:b98487737435 105
caa45040 0:b98487737435 106 wait_us(104-7-11);
caa45040 0:b98487737435 107
caa45040 0:b98487737435 108 c=RX;
caa45040 0:b98487737435 109 ct = t.read_us();
caa45040 0:b98487737435 110
caa45040 0:b98487737435 111 wait_us(104-7-11);
caa45040 0:b98487737435 112
caa45040 0:b98487737435 113 d=RX;
caa45040 0:b98487737435 114 dt = t.read_us();
caa45040 0:b98487737435 115
caa45040 0:b98487737435 116 wait_us(104-7-10);
caa45040 0:b98487737435 117
caa45040 0:b98487737435 118 //hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
caa45040 0:b98487737435 119
caa45040 0:b98487737435 120 e=RX;
caa45040 0:b98487737435 121 et = t.read_us();
caa45040 0:b98487737435 122
caa45040 0:b98487737435 123 wait_us(104-7-11);
caa45040 0:b98487737435 124
caa45040 0:b98487737435 125 f=RX;
caa45040 0:b98487737435 126 ft = t.read_us();
caa45040 0:b98487737435 127
caa45040 0:b98487737435 128 wait_us(104-7-12);
caa45040 0:b98487737435 129
caa45040 0:b98487737435 130 g=RX;
caa45040 0:b98487737435 131 gt = t.read_us();
caa45040 0:b98487737435 132
caa45040 0:b98487737435 133 wait_us(104-7-11);
caa45040 0:b98487737435 134
caa45040 0:b98487737435 135 h=RX;
caa45040 0:b98487737435 136 ht = t.read_us();
caa45040 0:b98487737435 137
caa45040 0:b98487737435 138 wait_us(156-7-11);
caa45040 0:b98487737435 139
caa45040 0:b98487737435 140 it = t.read_us();
caa45040 0:b98487737435 141
caa45040 0:b98487737435 142 //pc_printf(ret1);
caa45040 0:b98487737435 143 //pc_printf("0 zt=");
caa45040 0:b98487737435 144 //pc_printf( ch_hex_a(zt) );
caa45040 0:b98487737435 145 //pc_printf(ret1);
caa45040 0:b98487737435 146
caa45040 0:b98487737435 147 //pc_printf("156 at=");
caa45040 0:b98487737435 148 //pc_printf( ch_hex_a( 156 - (at-zt) ) );
caa45040 0:b98487737435 149 //pc_printf(ret1);
caa45040 0:b98487737435 150
caa45040 0:b98487737435 151 //pc_printf("260 bt=");
caa45040 0:b98487737435 152 //pc_printf( ch_hex_a( 260 - (bt-zt) ) );
caa45040 0:b98487737435 153 //pc_printf(ret1);
caa45040 0:b98487737435 154
caa45040 0:b98487737435 155 //pc_printf("364 ct=");
caa45040 0:b98487737435 156 //pc_printf( ch_hex_a( 364 - (ct-zt) ) );
caa45040 0:b98487737435 157 //pc_printf(ret1);
caa45040 0:b98487737435 158
caa45040 0:b98487737435 159 //pc_printf("468 dt=");
caa45040 0:b98487737435 160 //pc_printf( ch_hex_a( 468 - (dt-zt) ) );
caa45040 0:b98487737435 161 //pc_printf(ret1);
caa45040 0:b98487737435 162
caa45040 0:b98487737435 163 //pc_printf("572 et=");
caa45040 0:b98487737435 164 //pc_printf( ch_hex_a( 572 - (et-zt) ) );
caa45040 0:b98487737435 165 //pc_printf(ret1);
caa45040 0:b98487737435 166
caa45040 0:b98487737435 167 //pc_printf("677 ft=");
caa45040 0:b98487737435 168 //pc_printf( ch_hex_a( 677 - (ft-zt) ) );
caa45040 0:b98487737435 169 //pc_printf(ret1);
caa45040 0:b98487737435 170
caa45040 0:b98487737435 171 //pc_printf("781 gt=");
caa45040 0:b98487737435 172 //pc_printf( ch_hex_a( 781 - (gt-zt) ) );
caa45040 0:b98487737435 173 //pc_printf(ret1);
caa45040 0:b98487737435 174
caa45040 0:b98487737435 175 //pc_printf("885 ht=");
caa45040 0:b98487737435 176 //pc_printf( ch_hex_a( 885 - (ht-zt) ) );
caa45040 0:b98487737435 177 //pc_printf(ret1);
caa45040 0:b98487737435 178
caa45040 0:b98487737435 179 //pc_printf("1041 it=");
caa45040 0:b98487737435 180 //pc_printf( ch_hex_a( 1041 - (it-zt) ) );
caa45040 0:b98487737435 181 //pc_printf(ret1);
caa45040 0:b98487737435 182
caa45040 0:b98487737435 183 //h=0; g=1; f=0; e=0; d=0; c=0; b=0; a=1;
caa45040 0:b98487737435 184
caa45040 0:b98487737435 185 bs=h*128+g*64+f*32+e*16+d*8+c*4+b*2+a;
caa45040 0:b98487737435 186
caa45040 0:b98487737435 187 //char str2[2]={ bs ,0};
caa45040 0:b98487737435 188 //pc_printf(" ch=[");
caa45040 0:b98487737435 189 //pc_printf( str2 );
caa45040 0:b98487737435 190 //pc_printf(ret1);
caa45040 0:b98487737435 191
caa45040 0:b98487737435 192 return(bs);
caa45040 0:b98487737435 193 }//pc_getc
caa45040 0:b98487737435 194
caa45040 0:b98487737435 195 int main()
caa45040 0:b98487737435 196 {
caa45040 0:b98487737435 197 RX.mode( PullUp ); // 内蔵プルアップを使う
caa45040 0:b98487737435 198
caa45040 0:b98487737435 199 //タイマーの開始
caa45040 0:b98487737435 200 t.start();
caa45040 0:b98487737435 201 //pc.printf("Hello World!\r\n");
caa45040 0:b98487737435 202 //t.stop();
caa45040 0:b98487737435 203
caa45040 0:b98487737435 204 char ch;
caa45040 0:b98487737435 205
caa45040 0:b98487737435 206 while(1) {
caa45040 0:b98487737435 207
caa45040 0:b98487737435 208 t.reset();
caa45040 0:b98487737435 209
caa45040 0:b98487737435 210 ch = pc_getc();
caa45040 0:b98487737435 211
caa45040 0:b98487737435 212 char str2[2]={ ch ,0};
caa45040 0:b98487737435 213 pc_printf("-----ch=[");
caa45040 0:b98487737435 214 pc_printf( str2 );
caa45040 0:b98487737435 215 pc_printf(ret1);
caa45040 0:b98487737435 216
caa45040 0:b98487737435 217
caa45040 0:b98487737435 218 wait(1.0);
caa45040 0:b98487737435 219 }//while
caa45040 0:b98487737435 220 }//main
caa45040 0:b98487737435 221
caa45040 0:b98487737435 222 //容量削減
caa45040 0:b98487737435 223 void error(const char* format, ...){}