这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » NUCLEO L053R8 边学边玩(二) IO电平

共14条 1/2 1 2 跳转至

NUCLEO L053R8 边学边玩(二) IO电平

专家
2015-11-09 16:33:05     打赏

话说,无知者无畏。


Nucleo上有一组号称Arduino UNO R3兼容的接口,而且上边也有个5V的电源接口,所以想当然的就以为所有IO口高电平都是5V呢。毕竟咱玩的Arduino UNO R3都是5V的呀。

所以,咱板卡模块拿回来就是一顿接,一顿上电,总之冒烟了也不会有绳命危险。

还好,真没冒烟。


不过没冒烟只能说是幸运,咱不能一直赌运气,严谨的灌水专员不能让人挑剔。

那高低电平到底是多少V啊。

本来这事挺简单的,拿万用表一测就就结了,但是万用表一直给儿子当玩具呢,已经罢工很久了。

然后就去找那个论坛里的大神炫Q求助,让他帮忙测一下,结果这家伙答应好好的,但是回头告诉我nucleo说明上都写着什么3.3 3.6啥的,那么就肯定是3.3啦


还是自己动手测试吧。

先写个简单的mbed程序,在D4口输出高低电平。


#include 

DigitalOut PIN_D4(D4);

int main() {
    while(1) {
        PIN_D4 = 1; 
        wait(1); 
        PIN_D4 = 0; 
        wait(1);
    }
}


然后,用Arduino写了个程序,简单的电压测量。


void setup() {
  Serial.begin(9600);
}

float f_map(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}


void loop() {
  int val = analogRead(A0);
  float v = f_map(val, 0, 1023, 0, 5);
  Serial.println(v);
  delay(500);
}

共地,连接Arduino的A0以及NUCLEO的D4

然后,打开Arduino的串口监视器


可见监视器上交替输出:

3.23
3.23
0.00
0.00

由此可见,NUCLEO L053R8 数字脚输出高电平是3.23V。

断开Arduino的A0以及NUCLEO的D4,连接Arduino的A0以及NUCLEO的3.3,同样输出3.23V
不纠结了,要么是我UNO不准,要么是NUCLEO不准。
(测试Arduino的3.3V输出3.24,5V输出5.00)




那啥,又写了一堆空洞无物的内容,大神会不会鄙视我骗分?

这么多内容骗2分是不是有点纠结。


不过咱比较厚道,回头楼下帖子再补充点内容。



专家
2015-11-09 16:33:46     打赏
2楼

那啥,又插入串了,我晕了



专家
2015-11-09 17:37:27     打赏
3楼

做人要信守承诺

说好的要更新内容的。


前文我们说过,数字口输出高电平是3.3V

那么作为输入被Arduino读取时,不会有啥问题,因为好像2.8V(具体多少我记不准了)以上就会被识别成高电平。


那么如果Arduino的数字口输出,而NUCLEO L053R8的数字口读取呢?会不会因为电压过高烧毁NUCLEO L053R8呢?

另外,在通讯时,比如说I2C,UART, SPI时,又是咋样呢?


去找那个论坛里的大神炫Q求助,大神说串电阻

串电阻无疑是很安全的方案,但是一则电阻不好找,二则咱们懒不是嘛。


专家
2015-11-09 19:11:54     打赏
4楼
腰疼啊

专家
2015-11-09 20:34:45     打赏
5楼

实践证明:

NUCLEO L053R8的PIN口输出,Arduino读入,是没有一点问题的。

符合我们的预期。


那么Arduino输出,NUCLEO L053R8的PIN口读入呢?

查了一下STM32L053R8的datasheet

Features
• Ultra-low-power platform
– 1.65 V to 3.6 V power supply
– -40 to 125 °C temperature range
– 0.27 μA Standby mode (2 wakeup pins)
– 0.4 μA Stop mode (16 wakeup lines)
– 0.8 μA Stop mode + RTC + 8 KB RAM retention
– 139 μA/MHz Run mode at 32 MHz
– 3.5 μs wakeup time (from RAM)
– 5 μs wakeup time (from Flash)
• Core: ARM® 32-bit Cortex®-M0+ with MPU
– From 32 kHz up to 32 MHz max.
– 0.95 DMIPS/MHz
• Reset and supply management
– Ultra-safe, low-power BOR (brownout reset)
with 5 selectable thresholds
– Ultralow power POR/PDR
– Programmable voltage detector (PVD)
• Clock sources
– 1 to 25 MHz crystal oscillator
– 32 kHz oscillator for RTC with calibration
– High speed internal 16 MHz factory-trimmed RC
(+/- 1%)
– Internal low-power 37 kHz RC
– Internal multispeed low-power 65 kHz to
4.2 MHz RC
– PLL for CPU clock
• Pre-programmed bootloader
– USART, SPI supported
• Development support
– Serial wire debug supported
• Up to 51 fast I/Os (45 I/Os 5V tolerant)


在查查都哪些IO 5V tolerant)

大家可以自己去查数据手册中这个表:

Table 15. STM32L053x6/8 pin definitions


貌似需要注意的就是
A2, D13(SPI1_SCK), 其它的几个也落在非Arduino兼容的口上了
福音呀


专家
2015-11-09 20:38:16     打赏
6楼

测试一下Arduino输出,NUCLEO L053R8读入


void setup() {
  pinMode(3, OUTPUT);
  Serial.begin(9600);

}

void loop() {
  digitalWrite(3, HIGH);
  delay(5000);
  digitalWrite(3, LOW);
  delay(5000);
}

 

#include <mbed.h>

DigitalIn enable(D4);
DigitalOut led(LED1);
int main() {
	  //enable.mode(PullUp);
	  enable.mode(PullDown);
    while(1) {
        if(enable) {
          wait(0.1);  
        }
				else {
					wait(1);
				}
				led = !led;  
    }
}

 

实测NUCLEO L053R8上的LED交替慢闪5秒,快闪5秒

与预期完全一致。


PS:NUCLEO L053R8 上的上拉下拉比Arduino强多啦。


专家
2015-11-09 20:41:58     打赏
7楼
代码没格式化好,哈哈哈哈

专家
2015-11-09 20:51:17     打赏
8楼

上一篇帖子中,

我们直接用I2C接口连接ds3231,一切正常

因为I2C接口是5V tolerant的


而SPI接口SCK(D13并非是5V tolerant)

而时钟信号是单向的,所以如果NUCLEO L053R8做主设备与其它设备通讯,那么IO电平上应该是没有问题的。


所以,貌似Arduino的东西(模块等)差不多都可以直接用啊。


专家
2015-11-09 20:54:21     打赏
9楼

以上是自己测试和遐想的结果,仅供参考。

万一谁拿这个当依据搞冒烟了,本人概不负责。


话说,我一直没搞明白,干嘛整那么多电压啊

都统一多好,书同文,车同轨,呼叫秦始皇。


专家
2015-11-09 20:59:40     打赏
10楼

我发现我真能水

啥东西没有也能水半天。


共14条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]