原文: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
- void setup()
- {
- pinMode(PB0, PWM);
- pinMode(PA7, PWM);
- pinMode(PA6, PWM);
- pinMode(PA3, PWM);
- pinMode(PA2, PWM);
- pinMode(PA1, PWM);
- pinMode(PA0, PWM);
- pinMode(PB7, PWM);
- pinMode(PB6, PWM);
- pinMode(PA10, PWM);
- pinMode(PA9, PWM);
- pinMode(PA8, PWM);
- }
- void loop()
- {
- for (int i = 0; i < 65536; i++)
- {
- delayMicroseconds(40);
- pwmWrite(PB0, i);
- pwmWrite(PA7, i);
- pwmWrite(PA6, i);
- pwmWrite(PA3, i);
- pwmWrite(PA2, i);
- pwmWrite(PA1, i);
- pwmWrite(PA0, i);
- pwmWrite(PB7, i);
- pwmWrite(PB6, i);
- pwmWrite(PA10, i);
- pwmWrite(PA9, i);
- pwmWrite(PA8, i);
- }
- }
PWM精度過高了,驅動LED不必那麼高,再來一個指數式適合驅動LED的,看起來亮度更線性。code
- void setup() {
- pinMode(PB0, PWM);
- pinMode(PA7, PWM);
- pinMode(PA6, PWM);
- pinMode(PA3, PWM);
- pinMode(PA2, PWM);
- pinMode(PA1, PWM);
- pinMode(PA0, PWM);
- pinMode(PB7, PWM);
- pinMode(PB6, PWM);
- pinMode(PA10, PWM);
- pinMode(PA9, PWM);
- pinMode(PA8, PWM);
- }
- void loop() {
- //指數式增長亮度,適合驅動LED,看起來亮度更線性
- for (int i = 0; i < 256; i++)
- {
- delay(20);
- pwmWrite(PB0, i * i);
- pwmWrite(PA7, i * i);
- pwmWrite(PA6, i * i);
- pwmWrite(PA3, i * i);
- pwmWrite(PA2, i * i);
- pwmWrite(PA1, i * i);
- pwmWrite(PA0, i * i);
- pwmWrite(PB7, i * i);
- pwmWrite(PB6, i * i);
- pwmWrite(PA10, i * i);
- pwmWrite(PA9, i * i);
- pwmWrite(PA8, i * i);
- }
- }
或者用序號表示:htm
- int pins[12] = {0, 1, 2, 3, 6, 7, 8, 9, 10, 16, 22, 23};
- void setup()
- {
- for (int i = 0; i < 12; i++)
- {
- pinMode(pins[i], PWM);
- }
- }
- void loop()
- {
- for (int i = 0; i < 100; i++)
- {
- for (int j = 0; j < 12; j++)
- {
- pwmWrite(pins[j], i * i);
- }
- delay(20);
- }
- }
三、容許的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
- void setup()
- {
- Serial.begin(115200);
- pinMode(PB0, INPUT_ANALOG);
- pinMode(PA7, INPUT_ANALOG);
- pinMode(PA6, INPUT_ANALOG);
- pinMode(PA5, INPUT_ANALOG);
- pinMode(PA4, INPUT_ANALOG);
- pinMode(PA3, INPUT_ANALOG);
- pinMode(PA2, INPUT_ANALOG);
- pinMode(PA1, INPUT_ANALOG);
- pinMode(PA0, INPUT_ANALOG);
- pinMode(PB1, INPUT_ANALOG);
- }
- void loop()
- {
- delay(50);
- Serial.print("\tPB0="); Serial.print(analogRead(PB0));
- Serial.print("\tPA7="); Serial.print(analogRead(PA7));
- Serial.print("\tPA6="); Serial.print(analogRead(PA6));
- Serial.print("\tPA5="); Serial.print(analogRead(PA5));
- Serial.print("\tPA4="); Serial.print(analogRead(PA4));
- Serial.print("\tPA3="); Serial.print(analogRead(PA3));
- Serial.print("\tPA2="); Serial.print(analogRead(PA2));
- Serial.print("\tPA1="); Serial.print(analogRead(PA1));
- Serial.print("\tPA0="); Serial.print(analogRead(PA0));
- Serial.print("\tPB1="); Serial.println(analogRead(PB1));
- }
四、容許的串口
總共3個硬件外接串口Serial一、Serial二、Serial3,一個USB虛擬串口Serial:
- void setup()
- {
- Serial.begin(115200);
- Serial1.begin(115200); //TX=PA9,RX=PA10
- Serial2.begin(115200); //TX=PA2,RX=PA3
- Serial3.begin(115200); //TX=PB10,RX=PB11
- }
- void loop()
- {
- delay(100);
- Serial.println("Test Serial");
- Serial1.println("Test Serial1");
- Serial2.println("Test Serial2");
- Serial3.println("Test Serial3");
- }