![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
stm32f103 ws2812b r1
Dependencies: mbed mbed-STM32F103C8T6 USBDevice_STM32F103
main.cpp@0:48fd2a912e57, 2021-06-15 (annotated)
- Committer:
- caa45040
- Date:
- Tue Jun 15 14:24:46 2021 +0000
- Revision:
- 0:48fd2a912e57
stm32f103 ws2812 2
Who changed what in which revision?
User | Revision | Line number | New 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 |