stm32f103 ws2812b r1

Dependencies:   mbed mbed-STM32F103C8T6 USBDevice_STM32F103

Committer:
caa45040
Date:
Tue Jun 15 14:24:46 2021 +0000
Revision:
0:48fd2a912e57
stm32f103 ws2812 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caa45040 0:48fd2a912e57 1 #include "stm32f103c8t6.h"
caa45040 0:48fd2a912e57 2 #include "mbed.h"
caa45040 0:48fd2a912e57 3 #include "USBSerial.h"
caa45040 0:48fd2a912e57 4
caa45040 0:48fd2a912e57 5 USBSerial usbSerial(0x1f00, 0x2012, 0x0001, false); // connection is not blocked when USB is not plugged in
caa45040 0:48fd2a912e57 6 //Serial pc(PA_2, PA_3);
caa45040 0:48fd2a912e57 7
caa45040 0:48fd2a912e57 8 //DigitalOut myled(LED1);
caa45040 0:48fd2a912e57 9
caa45040 0:48fd2a912e57 10 DigitalOut myled(PA_7);
caa45040 0:48fd2a912e57 11 // 65432109876543210
caa45040 0:48fd2a912e57 12 int on1 = GPIOA->ODR | 0b0000000010000000;
caa45040 0:48fd2a912e57 13 int off1 = GPIOA->ODR & 0b1111111101111111;
caa45040 0:48fd2a912e57 14
caa45040 0:48fd2a912e57 15 int l[90]; //max30 led
caa45040 0:48fd2a912e57 16
caa45040 0:48fd2a912e57 17 void bit_on1();
caa45040 0:48fd2a912e57 18 void bit_off1();
caa45040 0:48fd2a912e57 19
caa45040 0:48fd2a912e57 20 // 12345678 12345678 12345678 12345678
caa45040 0:48fd2a912e57 21 int b8[8] = {0b10000000,0b01000000,0b00100000,0b00010000,
caa45040 0:48fd2a912e57 22 0b00001000,0b00000100,0b00000010,0b00000001, };
caa45040 0:48fd2a912e57 23
caa45040 0:48fd2a912e57 24 int ws_led(int num1)
caa45040 0:48fd2a912e57 25 {
caa45040 0:48fd2a912e57 26 int on_off;
caa45040 0:48fd2a912e57 27
caa45040 0:48fd2a912e57 28 //__disable_irq(); // disable interrupt
caa45040 0:48fd2a912e57 29 //__enable_irq(); // enable interrupt
caa45040 0:48fd2a912e57 30
caa45040 0:48fd2a912e57 31 //GPIO bkup
caa45040 0:48fd2a912e57 32 //int g_bk = GPIOA->ODR;
caa45040 0:48fd2a912e57 33
caa45040 0:48fd2a912e57 34
caa45040 0:48fd2a912e57 35 for(int ii=0;ii<num1;ii++){
caa45040 0:48fd2a912e57 36 //pc.printf(" -%d\t%d\r\n",ii,l[ii]); //303
caa45040 0:48fd2a912e57 37
caa45040 0:48fd2a912e57 38 //8ビット分送る
caa45040 0:48fd2a912e57 39 for(int jj=0;jj<8;jj++){
caa45040 0:48fd2a912e57 40 //pc.printf(" -%d\r\n",jj); //103
caa45040 0:48fd2a912e57 41
caa45040 0:48fd2a912e57 42 on_off = l[ii] & b8[jj];
caa45040 0:48fd2a912e57 43
caa45040 0:48fd2a912e57 44 if( on_off == 0 ){
caa45040 0:48fd2a912e57 45 //ビットが0
caa45040 0:48fd2a912e57 46 //pc.printf("0"); //103
caa45040 0:48fd2a912e57 47 bit_off1();
caa45040 0:48fd2a912e57 48 } else {
caa45040 0:48fd2a912e57 49 //ビットが1
caa45040 0:48fd2a912e57 50 //pc.printf("1"); //103
caa45040 0:48fd2a912e57 51 bit_on1();
caa45040 0:48fd2a912e57 52 }//endif
caa45040 0:48fd2a912e57 53
caa45040 0:48fd2a912e57 54 }//for 8bit
caa45040 0:48fd2a912e57 55
caa45040 0:48fd2a912e57 56
caa45040 0:48fd2a912e57 57 }//for max30byt
caa45040 0:48fd2a912e57 58
caa45040 0:48fd2a912e57 59 //__disable_irq(); // disable interrupt
caa45040 0:48fd2a912e57 60 //__enable_irq(); // enable interrupt
caa45040 0:48fd2a912e57 61
caa45040 0:48fd2a912e57 62 //GPIO bkup
caa45040 0:48fd2a912e57 63 //GPIOA->ODR = g_bk;
caa45040 0:48fd2a912e57 64
caa45040 0:48fd2a912e57 65 return(0);
caa45040 0:48fd2a912e57 66 }
caa45040 0:48fd2a912e57 67
caa45040 0:48fd2a912e57 68
caa45040 0:48fd2a912e57 69 ////////////////////////////
caa45040 0:48fd2a912e57 70
caa45040 0:48fd2a912e57 71
caa45040 0:48fd2a912e57 72 char *hex_b_c(int i_num);
caa45040 0:48fd2a912e57 73
caa45040 0:48fd2a912e57 74 int ch_len;
caa45040 0:48fd2a912e57 75 char ch_b[9+1]; //文字列のバッファー
caa45040 0:48fd2a912e57 76 char *ch_input()
caa45040 0:48fd2a912e57 77 {
caa45040 0:48fd2a912e57 78 int ch_i=0; //文字列のループカウンター
caa45040 0:48fd2a912e57 79 int ch_y; //一文字分の一時バッファー
caa45040 0:48fd2a912e57 80 int ii; //ループカウンター
caa45040 0:48fd2a912e57 81
caa45040 0:48fd2a912e57 82 ch_len=0;
caa45040 0:48fd2a912e57 83 //最初データ待ち
caa45040 0:48fd2a912e57 84 while(1) { if( usbSerial.available() > 0 ) {break;} }
caa45040 0:48fd2a912e57 85
caa45040 0:48fd2a912e57 86 while(1) {
caa45040 0:48fd2a912e57 87
caa45040 0:48fd2a912e57 88 //バッファーにデータがあるか
caa45040 0:48fd2a912e57 89 for(ii=0;ii<500;ii++){
caa45040 0:48fd2a912e57 90 wait_ms(1);
caa45040 0:48fd2a912e57 91 if(usbSerial.available() > 0) {break;}
caa45040 0:48fd2a912e57 92 }//for
caa45040 0:48fd2a912e57 93
caa45040 0:48fd2a912e57 94
caa45040 0:48fd2a912e57 95 if(ii == 500){ /*usbSerial.printf("time out\n\r");*/ return(ch_b);}
caa45040 0:48fd2a912e57 96 // if(ii != 500){ usbSerial.printf("not5000\n\r"); } ///{ //jump bbb
caa45040 0:48fd2a912e57 97
caa45040 0:48fd2a912e57 98 //1バイト分のデータの入力
caa45040 0:48fd2a912e57 99 ch_y = usbSerial.getc();
caa45040 0:48fd2a912e57 100 //テータの転記
caa45040 0:48fd2a912e57 101 ch_b[ch_i]=ch_y;ch_i++;ch_b[ch_i]=0;ch_len++;
caa45040 0:48fd2a912e57 102 //pc.putc(ch_y);
caa45040 0:48fd2a912e57 103 usbSerial.printf( hex_b_c( ch_y ) );
caa45040 0:48fd2a912e57 104 if(ch_i >= 9){ch_b[ch_i]=0;/*pc.printf("\n\r")*/;break;}
caa45040 0:48fd2a912e57 105 } //while
caa45040 0:48fd2a912e57 106 return(ch_b);
caa45040 0:48fd2a912e57 107 } //ch_input
caa45040 0:48fd2a912e57 108
caa45040 0:48fd2a912e57 109 char *hex_table="01234567890ABCDEF";
caa45040 0:48fd2a912e57 110 char hex_b[2+1];
caa45040 0:48fd2a912e57 111 char *hex_b_c(int i_num)
caa45040 0:48fd2a912e57 112 {
caa45040 0:48fd2a912e57 113 hex_b[0] = hex_table[i_num>>4];
caa45040 0:48fd2a912e57 114 hex_b[1] = hex_table[i_num & 0xf];
caa45040 0:48fd2a912e57 115 hex_b[2] = 0;
caa45040 0:48fd2a912e57 116 return(hex_b);
caa45040 0:48fd2a912e57 117 }
caa45040 0:48fd2a912e57 118
caa45040 0:48fd2a912e57 119
caa45040 0:48fd2a912e57 120
caa45040 0:48fd2a912e57 121 ///////////////////////////
caa45040 0:48fd2a912e57 122
caa45040 0:48fd2a912e57 123
caa45040 0:48fd2a912e57 124
caa45040 0:48fd2a912e57 125 int main() {
caa45040 0:48fd2a912e57 126 confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock)
caa45040 0:48fd2a912e57 127
caa45040 0:48fd2a912e57 128 // Serial pc(PA_2, PA_3);
caa45040 0:48fd2a912e57 129 // USBSerial usbSerial; // connection is blocked when USB is not plugged in
caa45040 0:48fd2a912e57 130 // USBSerial usbSerial(0x1f00, 0x2012, 0x0001, false); // connection is not blocked when USB is not plugged in
caa45040 0:48fd2a912e57 131 // USBSerial pc(0x1f00, 0x2012, 0x0001, false); // connection is not blocked when USB is not plugged in
caa45040 0:48fd2a912e57 132
caa45040 0:48fd2a912e57 133
caa45040 0:48fd2a912e57 134 //pc.printf("\r\n103\r\n"); //103
caa45040 0:48fd2a912e57 135 GPIOA->ODR = off1;
caa45040 0:48fd2a912e57 136 wait_ms(1);
caa45040 0:48fd2a912e57 137
caa45040 0:48fd2a912e57 138 CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
caa45040 0:48fd2a912e57 139 DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
caa45040 0:48fd2a912e57 140
caa45040 0:48fd2a912e57 141 while(1) {
caa45040 0:48fd2a912e57 142 //myled = !myled;
caa45040 0:48fd2a912e57 143 //pc.printf("I am a serial port\r\n"); // 9600 bit/s
caa45040 0:48fd2a912e57 144 //usbSerial.printf("I am a USB serial port\r\n"); // 12 Mbit/s (USB full-speed)
caa45040 0:48fd2a912e57 145
caa45040 0:48fd2a912e57 146 //while(1){
caa45040 0:48fd2a912e57 147 // //usbSerial.printf(" -%d\r\n",usbSerial.readable());
caa45040 0:48fd2a912e57 148 // usbSerial.printf(" -%d\r\n",usbSerial.available());
caa45040 0:48fd2a912e57 149 // usbSerial.printf(" -%d\r\n",usbSerial.getc());
caa45040 0:48fd2a912e57 150 // wait_ms(1000);
caa45040 0:48fd2a912e57 151 //}
caa45040 0:48fd2a912e57 152
caa45040 0:48fd2a912e57 153 usbSerial.printf("ON RGB LED\r\n");
caa45040 0:48fd2a912e57 154
caa45040 0:48fd2a912e57 155 ch_input();
caa45040 0:48fd2a912e57 156
caa45040 0:48fd2a912e57 157 usbSerial.printf("\r\n"); //010
caa45040 0:48fd2a912e57 158
caa45040 0:48fd2a912e57 159 for(int ii=0;ii<ch_len;ii++){
caa45040 0:48fd2a912e57 160 l[ii] = ch_b[ii];
caa45040 0:48fd2a912e57 161 }
caa45040 0:48fd2a912e57 162
caa45040 0:48fd2a912e57 163 ws_led(ch_len);
caa45040 0:48fd2a912e57 164
caa45040 0:48fd2a912e57 165
caa45040 0:48fd2a912e57 166 // l[0] = 31;
caa45040 0:48fd2a912e57 167 // l[1] = 32;
caa45040 0:48fd2a912e57 168 // l[2] = 33;
caa45040 0:48fd2a912e57 169 //
caa45040 0:48fd2a912e57 170 // ws_led(3);
caa45040 0:48fd2a912e57 171
caa45040 0:48fd2a912e57 172
caa45040 0:48fd2a912e57 173 //wait_ms(1000);
caa45040 0:48fd2a912e57 174 }
caa45040 0:48fd2a912e57 175 }
caa45040 0:48fd2a912e57 176
caa45040 0:48fd2a912e57 177
caa45040 0:48fd2a912e57 178 // 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3
caa45040 0:48fd2a912e57 179 void bit_off1(){
caa45040 0:48fd2a912e57 180 //0.3us 800khz
caa45040 0:48fd2a912e57 181
caa45040 0:48fd2a912e57 182 DWT->CYCCNT = 0;
caa45040 0:48fd2a912e57 183
caa45040 0:48fd2a912e57 184 GPIOA->ODR = on1;
caa45040 0:48fd2a912e57 185
caa45040 0:48fd2a912e57 186 while (DWT->CYCCNT < 17L){
caa45040 0:48fd2a912e57 187 //a++;
caa45040 0:48fd2a912e57 188 } ;
caa45040 0:48fd2a912e57 189
caa45040 0:48fd2a912e57 190 GPIOA->ODR = off1;
caa45040 0:48fd2a912e57 191
caa45040 0:48fd2a912e57 192 while (DWT->CYCCNT < 70L){
caa45040 0:48fd2a912e57 193 //a++;
caa45040 0:48fd2a912e57 194 } ;
caa45040 0:48fd2a912e57 195
caa45040 0:48fd2a912e57 196 }//bit_off1
caa45040 0:48fd2a912e57 197
caa45040 0:48fd2a912e57 198 // 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
caa45040 0:48fd2a912e57 199 void bit_on1(){
caa45040 0:48fd2a912e57 200 //1us 800khz
caa45040 0:48fd2a912e57 201
caa45040 0:48fd2a912e57 202 DWT->CYCCNT = 0;
caa45040 0:48fd2a912e57 203
caa45040 0:48fd2a912e57 204 GPIOA->ODR = on1;
caa45040 0:48fd2a912e57 205
caa45040 0:48fd2a912e57 206 while (DWT->CYCCNT < 47L){
caa45040 0:48fd2a912e57 207 //a++;
caa45040 0:48fd2a912e57 208 } ;
caa45040 0:48fd2a912e57 209
caa45040 0:48fd2a912e57 210 GPIOA->ODR = off1;
caa45040 0:48fd2a912e57 211
caa45040 0:48fd2a912e57 212 while (DWT->CYCCNT < 70L){
caa45040 0:48fd2a912e57 213 //a++;
caa45040 0:48fd2a912e57 214 } ;
caa45040 0:48fd2a912e57 215
caa45040 0:48fd2a912e57 216 }//bit_on1