stm32f103_arduino

原文:html

 

https://www.geek-workshop.com/thread-28954-1-1.html編程

 

基於迷你強的STM32duino文章,感受很是有價值,這小單片機作Arduino實在太強了,甩AVR的幾條街,結合Maple Mini研究了一下,總結下面基礎資料:
oop

 


0、編程語法參考
http://docs.leaflabs.com/static.leaflabs.com/pub/leaflabs/maple-docs/latest/language.html

一、引腳對應關係:
32個GPIO,也能夠用序號表達。
<ignore_js_op> 測試

序號        物理引腳
0        PA0
1        PA1
2        PA2
3        PA3
4        PA4
5        PA5
6        PA6
7        PA7
8        PA8
9        PA9
10        PA10
11        PA11
12        PA12
13        PA13
14        PA14
15        PA15
16        PB0
17        PB1
18        PB2
19        PB3
20        PB4
21        PB5
22        PB6
23        PB7
24        PB8
25        PB9
26        PB10
27        PB11
28        PB12
29        PB13
30        PB14
31        PB15
32        PC13
33        PC14
34        PC15


二、容許PWM引腳:ui

序號        物理引腳
0        PA0
1        PA1
2        PA2
3        PA3
6        PA6
7        PA7
8        PA8
9        PA9
10        PA10
16        PB0
22        PB6
23        PB7


PWM引腳簡易測試程序,總共有12個PWM引腳,16bit即65536級PWM,很精密了:spa

  1. void setup()
  2. {
  3.         pinMode(PB0, PWM);
  4.         pinMode(PA7, PWM);
  5.         pinMode(PA6, PWM);
  6.         pinMode(PA3, PWM);
  7.         pinMode(PA2, PWM);
  8.         pinMode(PA1, PWM);
  9.         pinMode(PA0, PWM);
  10.         pinMode(PB7, PWM);
  11.         pinMode(PB6, PWM);
  12.         pinMode(PA10, PWM);
  13.         pinMode(PA9, PWM);
  14.         pinMode(PA8, PWM);
  15. }
  16. void loop()
  17. {
  18.         for (int i = 0; i < 65536; i++)
  19.         {
  20.                 delayMicroseconds(40);
  21.                 pwmWrite(PB0, i);
  22.                 pwmWrite(PA7, i);
  23.                 pwmWrite(PA6, i);
  24.                 pwmWrite(PA3, i);
  25.                 pwmWrite(PA2, i);
  26.                 pwmWrite(PA1, i);
  27.                 pwmWrite(PA0, i);
  28.                 pwmWrite(PB7, i);
  29.                 pwmWrite(PB6, i);
  30.                 pwmWrite(PA10, i);
  31.                 pwmWrite(PA9, i);
  32.                 pwmWrite(PA8, i);
  33.         }
  34. }


PWM精度過高了,驅動LED不必那麼高,再來一個指數式適合驅動LED的,看起來亮度更線性。code

  1. void setup() {
  2.   pinMode(PB0, PWM);
  3.   pinMode(PA7, PWM);
  4.   pinMode(PA6, PWM);
  5.   pinMode(PA3, PWM);
  6.   pinMode(PA2, PWM);
  7.   pinMode(PA1, PWM);
  8.   pinMode(PA0, PWM);
  9.   pinMode(PB7, PWM);
  10.   pinMode(PB6, PWM);
  11.   pinMode(PA10, PWM);
  12.   pinMode(PA9, PWM);
  13.   pinMode(PA8, PWM);
  14. }
  15. void loop() {
  16.   //指數式增長亮度,適合驅動LED,看起來亮度更線性
  17.   for (int i = 0; i < 256; i++)
  18.   {
  19.     delay(20);
  20.     pwmWrite(PB0, i * i);
  21.     pwmWrite(PA7, i * i);
  22.     pwmWrite(PA6, i * i);
  23.     pwmWrite(PA3, i * i);
  24.     pwmWrite(PA2, i * i);
  25.     pwmWrite(PA1, i * i);
  26.     pwmWrite(PA0, i * i);
  27.     pwmWrite(PB7, i * i);
  28.     pwmWrite(PB6, i * i);
  29.     pwmWrite(PA10, i * i);
  30.     pwmWrite(PA9, i * i);
  31.     pwmWrite(PA8, i * i);
  32.   }
  33. }


或者用序號表示:htm

  1. int pins[12] = {0, 1, 2, 3, 6, 7, 8, 9, 10, 16, 22, 23};
  2. void setup()
  3. {
  4.   for (int i = 0; i < 12; i++)
  5.   {
  6.     pinMode(pins[i], PWM);
  7.   }
  8. }
  9. void loop()
  10. {
  11.   for (int i = 0; i < 100; i++)
  12.   {
  13.     for (int j = 0; j < 12; j++)
  14.     {
  15.       pwmWrite(pins[j], i * i);
  16.     }
  17.     delay(20);
  18.   }
  19. }



三、容許的ADC引腳:
ADC總共有10個通道,12bit即4096級。引腳以下blog

物理引腳,ADC通道
PA0        CH0
PA1        CH1
PA2        CH2
PA3        CH3
PA4        CH4
PA5        CH5
PA6        CH6
PA7        CH7
PB0        -(不能用序號表達)
PB1        -(不能用序號表達)


ADC測試程序:get

  1. void setup()
  2. {
  3.   Serial.begin(115200);
  4.   pinMode(PB0, INPUT_ANALOG);
  5.   pinMode(PA7, INPUT_ANALOG);
  6.   pinMode(PA6, INPUT_ANALOG);
  7.   pinMode(PA5, INPUT_ANALOG);
  8.   pinMode(PA4, INPUT_ANALOG);
  9.   pinMode(PA3, INPUT_ANALOG);
  10.   pinMode(PA2, INPUT_ANALOG);
  11.   pinMode(PA1, INPUT_ANALOG);
  12.   pinMode(PA0, INPUT_ANALOG);
  13.   pinMode(PB1, INPUT_ANALOG);
  14. }
  15. void loop()
  16. {
  17.   delay(50);
  18.   Serial.print("\tPB0="); Serial.print(analogRead(PB0));
  19.   Serial.print("\tPA7="); Serial.print(analogRead(PA7));
  20.   Serial.print("\tPA6="); Serial.print(analogRead(PA6));
  21.   Serial.print("\tPA5="); Serial.print(analogRead(PA5));
  22.   Serial.print("\tPA4="); Serial.print(analogRead(PA4));
  23.   Serial.print("\tPA3="); Serial.print(analogRead(PA3));
  24.   Serial.print("\tPA2="); Serial.print(analogRead(PA2));
  25.   Serial.print("\tPA1="); Serial.print(analogRead(PA1));
  26.   Serial.print("\tPA0="); Serial.print(analogRead(PA0));
  27.   Serial.print("\tPB1="); Serial.println(analogRead(PB1));
  28. }



四、容許的串口
總共3個硬件外接串口Serial一、Serial二、Serial3,一個USB虛擬串口Serial:

  1. void setup()
  2. {
  3.   Serial.begin(115200);
  4.   Serial1.begin(115200);  //TX=PA9,RX=PA10
  5.   Serial2.begin(115200);  //TX=PA2,RX=PA3
  6.   Serial3.begin(115200);  //TX=PB10,RX=PB11
  7. }
  8. void loop()
  9. {
  10.   delay(100);
  11.   Serial.println("Test Serial");
  12.   Serial1.println("Test Serial1");
  13.   Serial2.println("Test Serial2");
  14.   Serial3.println("Test Serial3");
  15. }
本站公眾號
   歡迎關注本站公眾號,獲取更多信息