设为首页收藏本站

极客工坊

 找回密码
 注册

只需一步,快速开始

查看: 1913|回复: 19

【玩STM32】STM32Duino的引脚映射,ADC,PWM等介绍

  [复制链接]
发表于 2017-6-9 15:03:55 | 显示全部楼层 |阅读模式
本帖最后由 Ansifa 于 2017-7-31 23:02 编辑

基于迷你强的STM32duino文章,感觉非常有价值,这小单片机做Arduino实在太强了,甩AVR的几条街,结合Maple Mini研究了一下,总结下面基础资料:


0、编程语法参考
http://docs.leaflabs.com/static.leaflabs.com/pub/leaflabs/maple-docs/latest/language.html

1、引脚对应关系:
32个GPIO,也可以用序号表达。
引脚对应.png
序号        物理引脚
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

2、允许PWM引脚:
序号        物理引脚
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,很精密了:
  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的,看起来亮度更线性。

  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. }
复制代码

或者用序号表示:

  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. }
复制代码


3、允许的ADC引脚:
ADC总共有10个通道,12bit即4096级。引脚如下
物理引脚,ADC通道
PA0        CH0
PA1        CH1
PA2        CH2
PA3        CH3
PA4        CH4
PA5        CH5
PA6        CH6
PA7        CH7
PB0        -(不能用序号表达)
PB1        -(不能用序号表达)

ADC测试程序:
  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. }
复制代码


4、允许的串口
总共3个硬件外接串口Serial1、Serial2、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. }
复制代码
回复

使用道具 举报

发表于 2017-6-10 13:43:35 | 显示全部楼层
。。。。。。。。这是抛弃AVR的节奏ing
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-10 15:44:57 | 显示全部楼层
弘毅 发表于 2017-6-10 13:43
。。。。。。。。这是抛弃AVR的节奏ing


主频快,AD多PWM多串口还多,多出来的串口可以接几个MAX3232又稳定,没办法,对手太强劲
回复 支持 反对

使用道具 举报

发表于 2017-6-10 16:23:33 | 显示全部楼层
这个确实甩atmega系列的好几条街
回复 支持 反对

使用道具 举报

发表于 2017-6-10 18:12:10 | 显示全部楼层
库再多点我就可以扔掉arduino了
回复 支持 反对

使用道具 举报

发表于 2017-6-10 19:57:46 | 显示全部楼层
既然是今天新帖 STM32像Arduino风格很喜欢
回复 支持 反对

使用道具 举报

发表于 2017-6-11 11:04:45 | 显示全部楼层
源地的这块32还是很经典的,一般都用它
回复 支持 反对

使用道具 举报

发表于 2017-6-11 12:14:27 | 显示全部楼层
老铁!请问哪里有卖的啊!
回复 支持 反对

使用道具 举报

发表于 2017-6-11 16:04:18 | 显示全部楼层
我还特意买了块Maple Mini
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-15 13:52:56 | 显示全部楼层
王八顺 发表于 2017-6-11 12:14
老铁!请问哪里有卖的啊!

淘宝搜“STM32F103C8T6 系统板”挑个同样子的就行,价格十一二
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册  

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )  

GMT+8, 2017-9-20 06:23 , Processed in 0.044745 second(s), 11 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表