**写在开头,本人本科对单片机还是比较熟悉的,8/16/32的单片机都玩过(寄存器的配置,库函数的调用),最近接了个很小的项目,以为1~2天就搞完了,结果弄了好几天,因此将该问题记录下来,大家以后碰到可以参考。
**
项目中:一个功能是通过STM32103ZET6的串口(UART1)与一个数字传感器进行通信获取数据,第二个功能通过12位ADC单通道采集模拟传感器数据,最终将二者数据进行屏显,并通过键盘进行阈值大小设置,声光报警功能。
坑1:ADC采集问题
我当时写的代码在我的一个开发板(芯片:STM32VET6)上是可以正常ADC采集数据的,当时通过串口将数据发至串口助手上打印查看,发现是OK的,(这里提一下,为了防止摸黑调试,串口助手是个好东西,)结果下载到我的STM32103ZET6最小系统板上就不对,串口助手打印一直为高电平(3.29V),我开始以为是芯片不兼容的问题(管脚定义错误这种问题我排除了,换个ADC通道采集的问题试过我也排除了),于是我找了份STM32103ZET6采集程序在ZE上还是不行,但在VE开发板上却可以,这就排除芯片不兼容问题,剩下肯定是硬件上的问题没跑了。(一步步将问题排查缩小)。由于身边还有块32的板子,我就直接拿了过来用,结果发现还是采集不了(我有3块STM32板子,1个是VE的开发板,2个是ZE的最小系统板),我纳闷了,难道是2块板子都有问题,这种问题出现的概率应该不大啊,试了一下午也没找出问题,最后我试了两块ZE板子上其他功能GPIO口,都好着,我排除两块板子的问题,可是为什么我那个VE的开发板能采集,为什么这两块就是不行,是硬件问题可是硬件到底哪里有问题?我想到了VE的开发板人家为了稳定在做的时候肯定把好多电路都已经设计上去了,而我的核心板很小,为了简化肯定哪里电路没有连接之类的(我核心板只有芯片,管脚,晶振),是不是就是ADC那里漏了,于是我找手册,发现基准电压,Vref+管脚接3.3V,Vref-接地(什么VDDA我没管),然后我用万用表一测,果然我的核心板Vref+管脚没有拉高,Vref-没有拉低,当我焊上使其连接时,好了,一切的问题搞定,其实我是先焊上Vref+接到3.3V,可以正常采集了(我开始用的湿度传感器做测试,输出在3V左右),但我的传感器输出只有10mv,采集出来还是0v,最后将Vref-接地问题才得以解决。(建议大家以后买核心板做ADC采集时,一定要先看板子上Vref和3.3V之间的跳帽有没有插上,或者测量其电压是否为高电平)。
坑2:电流问题,USB线与电流不匹配
我的供电方式通过USB线给单片机,从单片机的电压管脚引出给(2个传感器,显示屏),USB线我用的带磁环的线,一切工作正常。当我交付时,我不太想给我的USB线,所以淘宝买了根0.5米不带磁环的线,可问题就来了,单片机工作不正常问题,导致屏显输出问题,采集问题,按键按下失败问题,旁边人说是不是电路哪里虚焊了,我认为肯定是电流和线不匹配导致的问题,电流输出2A,影响单片机正常工作会导致后面这一系列问题,回来把线换了,结果一切正常,终于交付了。
至此,所有问题都解决了,有快一年半没有玩单片机了,这次的问题也是让我找了好久,所以当大家遇到问题时,先不要急,冷静分析下自己的问题有可能出现在哪里,利用手上工具尝试并排除,缩小问题范围,实在解决不了, 上各大论坛都找找解决方案。
关键字:STM32开发 ADC采集 电流大小
引用地址:
记一次在STM32开发踩过得坑(ADC采集、电流大小的影响)
推荐阅读最新更新时间:2024-11-11 12:45
stc12c5a60s2单片机用自带ADC采集电压源程序
stc12c5a60s2采集电压实物图: 单片机源程序如下: /*********************************************************** 程序功能:STC12C5A60S2自带ADC采集电压信号+DS18B20温度传感器+LCD1602液晶显示 MCU型号: STC12C5A60S2 晶振频率:11.0892MHz 整理时间:2012年4月25号 ************************************************************/ #include reg51.h #include intrins.h sfr P4 = 0XC0;
[单片机]
linux下STM32开发环境搭建
前言: 本文最终目的是在 ubuntu 16.04 系统下开发STM32。 用到了 STM32CUBEMX 去生成带有 Makefile 的代码,然后使用 gcc-arm-none-eabi 工具对程序进行编译。再通过 openocd 加 CMSIS-DAP的方式连接到目标板(这里是一块STM32F103C8T6)加下载程序。最终使用 GDB 工具进行调试程序。 安装 JAVA 环境 安装 STM32CUBEMX 是需要JAVA的环境的,下载的地址详见文首“参考”项。下载 linux 版本的压缩包。将其放到 linux 系统下进行解压,注意你文件放的路径。 1:使用下面命令打开 profile sudo vi /e
[单片机]
STM32 —— 多路ADC采集
#ifndef _ADC_H_ #define _ADC_H_ #include type.h #include debug.h void ADCInit(void); uint16_t ADCGetData(uint8_t channel); uint16_t ADCGetAverage(uint8_t channel, uint8_t times); #ifndef CONFIG_CAN void adc_test(void); #endif #endif /* _ADC_H_ */ // input1~5 -- 模拟量IO口; input6~10 -- 普通IO口用 #define ADC_CHANNEL
[单片机]
意法半导体(ST)与Yogitech合作开发STM32微控制器安全组件
意法半导体(STMicroelectronics,简称ST)和Yogitech 签订了一项合作开发微控制器完整安全组件的协议,以简化基于STM32微控制器的关键安全应用的开发和认证过程。 意法半导体和Yogitech同意开发一个安全手册和测试软件库,作为一个简单、快速且高效的测试方式,使用IAR系统的定制化开发工具,检测并标记STM32微控制器潜在的危害性故障。合作双方瞄准一个仅在欧洲就预计约为4亿多欧元的巨大市场,工程师可从意法半导体的500余款微控制器中选择一款适合的产品,用于研发创新且安全的工业自动化用产品。
Yogitech首席执行官Silvano Motto表示:“鉴于现代集成电路的复杂性,使用黑匣子进行安全性分析的方
[单片机]
在Mac OS X中搭建STM32开发环境(3)
在上两篇文章中,我们先后编译和安装了ST-Link2和交叉编译工具,在大家确认安装成功以后,可以做一个小Demo来测试一下是否成功。 (三)Demo (1)首先下载我做好的工程文件 http://pan.baidu.com/s/1hq9jU9e (如果分享链接失效,请联系我QQ:291402127),下载完成后,解压到你的用户文件夹(~/)中,目录结构如下: 在这里,我已经给大家编译好了,main.bin就是已经编译好的文件,大家可以直接烧写。 (2)手动编译 cd到stm32f4-discovery文件夹中,运行 make clean 清理编译成功的文件。 然后运行 make 编译过程中应该会出现以下信息: 完成
[单片机]
STM32开发笔记57: 复位电路设计
本篇文章针对所有的STM32芯片,网上有不少文章叙述了有关STM32复位电路的相关内容,也有很多推荐电路,例如ALIENTEK给出的复位电路,如下图所示。 不过还有一些推荐电路,不需加上拉电阻,或者电容也不加,那到底应该如何设计呢?还需看一下官方手册的推荐电路,如下图所示。 可看到,复位电路具有内部上拉电阻,外部只需接0.1uf电容即可,不需在外部电路上拉10K电阻,上拉后只会使上拉电阻变小,减小复位时间,或会导致复位不正常。内部上拉电阻阻值和其它参数如下表所示,供参考。
[单片机]
STM32开发笔记4: STM32F407 UART的使用方法
STM32F4内嵌4个通用异步/同步收发器(USART1、USART2、USART3、USART6)和两个通用异步收发器(UART4和UART5)。本文讲解此6个串行口,在异步模式下的使用方法,如不加说明,以USART1为例。 可以按照下述步骤,对通用异步串行口进行设置。 1、打开config.h文件,对如下图所示的宏进行设置,0x0c表示将当前串行口UART1的波特率设为115200bps,无效验。 2、打开main.c文件,可以在其中断服务函数中,完成接收逻辑的代码编写,如下图所示。此代码表明,当串行口收到1个字节的数据后,将触发串行口中断,在中断服务程序中,将接收到的1字节数据取出,送u8_Ua
[单片机]
STM32F10XXX 双通道ADC数据采集,TIM2触发采集
/********** (C) COPYRIGHT 2007 STMicroelectronics *********** *STM32F10XXX 双通道ADC数据采集 *环境:keil for arm mdk 4.71a 官方V3.5库 *STM32数据采集部分 * 1、ADC1/ADC2实现并行同时数据采集,12BIT最高可达1MSPS采样速度并通过STM32的DMA传输放入内存中 * 2、TIM2 CC2实现对ADC采样的触发,ADC_Sample_Frequency_Set函数实现自定义TIM2 CC2频率输出, * 3、采样的频率和采样个数通过接收到的UDP控制命令来指定
[单片机]