打印
[技术问答]

NUC230片子的ADC采集数据有问题,

[复制链接]
821|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 通宵敲代码 于 2019-3-14 22:40 编辑



问题如上描述,ADC可以采集数据,但采集到的数据一直接近0xFFF(有变化),
经测量发现,ADC使用的IO引脚初始化后,依然会输出电压,
通过更改程序测试后发现,尽管配置了ADC模式,并关闭了该引脚的数字逻辑输出,
单IO引脚印染可以控制输出高低电平,
输出高电平时,ADC采样接近0xFFF,输出低电平时,ADC采样接近0x000,
不知道是不是芯片自身有BUG,还是我初始化程序不会对
@奔跑的牛 @clyu @Risn


///////////////////////////////////////////////////////////////////////////////////////////////////////
更新一下,问题已解决,是BSP库中的参考例程移植的坑
其中本次所用的库为NUC230_240 Series BSP CMSIS V3.01.001,
参考的例程为*\StdDriver\CAN_NormalMode_Transmit


针对问题现象,通过分析发现,ADC确实是已经在工作了,但IO口功能并未关闭,
导致引脚仍然可以继续输出逻辑点评0或1,通过外接可调电阻测试,
发现当引脚电压强制逐渐拉低时,ADC采样是会随着输入电压值变化的,

迫不得已使用了最简单也是最笨的办法,挨个函数逐条语句屏蔽,定位问题,
最终发现,当关闭CAN1初始化函数时,ADC采样正常,
继续定位后发现,问题由如下一条语句引起,顿然醒悟


其中关于CAN1函数引脚复用功能配置的时候,并未使用位或赋值
而是直接对整个寄存器直接赋值,导致PA端口除CAN1以外的其他引脚,
均作为了普通IO口使用,具体函数如下

经检查发现,此版本的BSP中四个关于CAN的测试例程,程序均是如此,还望避坑






沙发
heisexingqisi| | 2019-3-14 16:39 | 只看该作者
你跑个官方的测试代码看看

使用特权

评论回复
板凳
heisexingqisi| | 2019-3-14 16:39 | 只看该作者
BSP里的测试代码肯定是对的。你试试,如果还是有问题,可能你使用不当给烧毁内部电路了

使用特权

评论回复
地板
通宵敲代码|  楼主 | 2019-3-14 22:42 | 只看该作者
heisexingqisi 发表于 2019-3-14 16:39
BSP里的测试代码肯定是对的。你试试,如果还是有问题,可能你使用不当给烧毁内部电路了 ...

问题已解决,多谢

使用特权

评论回复
5
zhuomuniao110| | 2019-3-18 23:42 | 只看该作者
  /* Disable the GPB0 - GPB3 digital input path to avoid the leakage current. */
    GPIO_DISABLE_DIGITAL_PATH(PB, 0xF);
是不是要关闭这个。

使用特权

评论回复
6
通宵敲代码|  楼主 | 2019-3-21 09:14 | 只看该作者
zhuomuniao110 发表于 2019-3-18 23:42
/* Disable the GPB0 - GPB3 digital input path to avoid the leakage current. */
    GPIO_DISABLE_DI ...

使用ADC时这句指令是要有的,
是为了防止内部逻辑电路引起漏电流,
干扰ADC采样数据的准确性,

不过我的问题跟这个没有关系,
我程序中也关闭了逻辑通道电路

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:年轻不是资本,奋斗才是良策!

302

主题

7539

帖子

69

粉丝