
stm32l010 soft serial test 1
main.cpp
- Committer:
- caa45040
- Date:
- 2021-05-12
- Revision:
- 0:b98487737435
File content as of revision 0:b98487737435:
#include "mbed.h" //10の割り算 0から1028までは、正しい。主に0から999 #define DVI10(n) ((n*205)>>11) //Serial pc(USBTX, USBRX); // tx, rx //Serial pc(SERIAL_TX, SERIAL_RX); //767 //Serial pc(PA_2, PA_3); //010 //Serial pc(PA_9, PA_10); //010 #define UART_DELAY 96 // 1/9600 DigitalOut TX(PA_2); DigitalIn RX(PA_3); //DigitalOut TX(PA_9); //DigitalIn RX(PA_10); char ch_hex_a_b[5]; char *ch_hex_a(int l_num) { int a,b,c; int q=0; if(l_num < 0) { l_num = 0 - l_num; q = 1;} b=DVI10(l_num); c=l_num-(b*10); l_num=b; a=DVI10(l_num); b=l_num-(a*10); ch_hex_a_b[0] = '0' + a; ch_hex_a_b[1] = '0' + b; ch_hex_a_b[2] = '0' + c; ch_hex_a_b[3] = 0; if( q == 1 ) {ch_hex_a_b[0]='-';} return(ch_hex_a_b); } //ch_hex_a //仮想シリアルへの一文字出力 9600bps int pc_putc(char ch) { TX=1; TX=0;//START wait_us(UART_DELAY); for(int ii=0;ii<8;ii++){ TX=(ch>>ii)&1; wait_us(UART_DELAY); }; //for TX=1;//Stop wait_us(UART_DELAY); return(0); } //pc_putc //文字列の表示 int pc_printf(char *str1) { int ii = 0; //ループカウンター while(str1[ii]!=0){ //一文字出力 pc_putc(str1[ii]);ii++; } //while //戻り値 return(0); } //タイマーの定義 Timer t; int a,b,c,d,e,f,g,h; int bs; int zt,at,bt,ct,dt,et,ft,gt,ht,it; char *ret1="\r\n"; int pc_getc() { //待ちループ while( RX == 1 ) {} //llllllllllllllllllllllllllllllllllllllll zt = t.read_us(); wait_us(156-7-12); a=RX; at = t.read_us(); wait_us(104-7-11); b=RX; bt = t.read_us(); wait_us(104-7-11); c=RX; ct = t.read_us(); wait_us(104-7-11); d=RX; dt = t.read_us(); wait_us(104-7-10); //hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh e=RX; et = t.read_us(); wait_us(104-7-11); f=RX; ft = t.read_us(); wait_us(104-7-12); g=RX; gt = t.read_us(); wait_us(104-7-11); h=RX; ht = t.read_us(); wait_us(156-7-11); it = t.read_us(); //pc_printf(ret1); //pc_printf("0 zt="); //pc_printf( ch_hex_a(zt) ); //pc_printf(ret1); //pc_printf("156 at="); //pc_printf( ch_hex_a( 156 - (at-zt) ) ); //pc_printf(ret1); //pc_printf("260 bt="); //pc_printf( ch_hex_a( 260 - (bt-zt) ) ); //pc_printf(ret1); //pc_printf("364 ct="); //pc_printf( ch_hex_a( 364 - (ct-zt) ) ); //pc_printf(ret1); //pc_printf("468 dt="); //pc_printf( ch_hex_a( 468 - (dt-zt) ) ); //pc_printf(ret1); //pc_printf("572 et="); //pc_printf( ch_hex_a( 572 - (et-zt) ) ); //pc_printf(ret1); //pc_printf("677 ft="); //pc_printf( ch_hex_a( 677 - (ft-zt) ) ); //pc_printf(ret1); //pc_printf("781 gt="); //pc_printf( ch_hex_a( 781 - (gt-zt) ) ); //pc_printf(ret1); //pc_printf("885 ht="); //pc_printf( ch_hex_a( 885 - (ht-zt) ) ); //pc_printf(ret1); //pc_printf("1041 it="); //pc_printf( ch_hex_a( 1041 - (it-zt) ) ); //pc_printf(ret1); //h=0; g=1; f=0; e=0; d=0; c=0; b=0; a=1; bs=h*128+g*64+f*32+e*16+d*8+c*4+b*2+a; //char str2[2]={ bs ,0}; //pc_printf(" ch=["); //pc_printf( str2 ); //pc_printf(ret1); return(bs); }//pc_getc int main() { RX.mode( PullUp ); // 内蔵プルアップを使う //タイマーの開始 t.start(); //pc.printf("Hello World!\r\n"); //t.stop(); char ch; while(1) { t.reset(); ch = pc_getc(); char str2[2]={ ch ,0}; pc_printf("-----ch=["); pc_printf( str2 ); pc_printf(ret1); wait(1.0); }//while }//main //容量削減 void error(const char* format, ...){}