3648|8

324

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

使用mbed下载到STM32 Nucleo板子上现象不对 [复制链接]

导入了一个官方的例程,程序如下:
  1. #include "mbed.h"

  2. AnalogIn analog_value(A0);

  3. DigitalOut myled(LED1);

  4. // Calculate the corresponding acquisition measure for a given value in mV
  5. #define MV(x) ((0xFFF*x)/3300)

  6. int main() {
  7.     while(1) {      
  8.         uint16_t meas = analog_value.read_u16(); // Converts and read the analog input value
  9.         if (meas > MV(1000)) { // If the value is greater than 1000 mV toggle the LED
  10.           myled = !myled;
  11.         }
  12.         wait(0.2); // 200 ms
  13.     }
  14. }
复制代码
程序的现象理应当是当输入电压超过1000mV时,,led不断翻转闪烁,

可是实际现象是:只有把A0接地,led就不闪烁,当A0引脚悬空或者有电压输入,led都会闪烁,输入电压小于1000mV,led也会闪烁,,,很奇怪,,,哪里出了问题?




此帖出自stm32/stm8论坛

最新回复

MBED上A0~A5口的外部中断也有BUG  详情 回复 发表于 2016-4-1 16:12
点赞 关注
个人签名

欢迎关注:JL单片机

 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
哪一个Nucleo板子?
此帖出自stm32/stm8论坛

点评

STM32L053R8  详情 回复 发表于 2014-11-27 21:33
 
 

回复

324

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
dcexpert 发表于 2014-11-27 21:19
哪一个Nucleo板子?
STM32L053R8
此帖出自stm32/stm8论坛
 
个人签名

欢迎关注:JL单片机

 

回复

1万

帖子

25

TA的资源

版主

4
 
注意到你使用的是read_u16函数啊,它的返回值是[0x0, 0xFFFF]。使用read函数就可以得到0-1之间的浮点数。

Mbed的函数,和我们习惯是有些区别的,它不是读取ADC的寄存器并直接返回的。同样PWM、延时等也是这样。
此帖出自stm32/stm8论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
本帖最后由 dcexpert 于 2014-11-27 23:05 编辑

因此,你的测试程序可以修改一下:

        float meas = analog_value.read(); // Converts and read the analog input value
        if (meas > 1000f/3300)) { // If the value is greater than 1000 mV toggle the LED
          myled = !myled;
        }
或者

#define MV(x) ((0xFFFFL*x)/3300)

        uint16_t meas = analog_value.read_u16(); // Converts and read the analog input value
        if (meas > MV(1000))) { // If the value is greater than 1000 mV toggle the LED
          myled = !myled;
        }
此帖出自stm32/stm8论坛

点评

上面贴的程序不是我写的,官方给的例程,,,,,我就下载进去验证一下,,结果出现现象不对,,,我用串口输出这个语句uint16_t meas = analog_value.read_u16();中的meas值,发现最大值可以到65535,,,问题又来  详情 回复 发表于 2014-11-28 15:28
 
 
 

回复

324

帖子

0

TA的资源

一粒金砂(高级)

6
 
本帖最后由 hjl240 于 2014-11-28 15:39 编辑
dcexpert 发表于 2014-11-27 22:49
因此,你的测试程序可以修改一下:

        float meas = analog_value.read(); // Converts and read t ...

           上面贴的程序不是我写的,官方给的例程,,,,,我就下载进去验证一下,,结果出现现象不对,,,我用串口输出这个语句
  1. uint16_t meas = analog_value.read_u16();
复制代码
中的meas值,发现最大值可以到65535,,,问题又来了,,MCU内部AD不是12位的么,怎么可能出现65535,,,,不知道是我哪里搞错了还是官方的mbed软件中的函数库确实有bug。。。。


         我又把下面程序下载进MCU,发现现象就对了,,,
  1.        float meas = analog_value.read(); // Converts and read the analog input value
  2.         if (meas > 1000f/3300)) { // If the value is greater than 1000 mV toggle the LED
  3.           myled = !myled;
  4.         }
复制代码

是analog_value.read_u16();这个函数有问题么。。。。。。


此帖出自stm32/stm8论坛
 
个人签名

欢迎关注:JL单片机

 
 

回复

1万

帖子

25

TA的资源

版主

7
 
MBed估计是为了统一,所以将AD的read_u16()函数读取数据换算成16位的,实际值就需要自己在进行换算。如果是浮点数,范围就是[0..1],这样可能更符合MBed的风格。
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

8
 
nucleoL053R8 AnalogIn函数有bug吧,我用了后会直接卡住,也看很多人在mbed上反馈了但现在没见解决呢
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
MBED上A0~A5口的外部中断也有BUG
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表