你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用CubMX和Proteus学习STM32单片机(五)------ADC模数转换

[复制链接]
STMCU小助手 发布时间:2022-12-31 19:10
项目简介
0 H3 X9 m9 n& b- R3 \9 ]        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第五部分针对STM32单片机内置ADC模块的学习和理解。1 w* E# Z2 p7 L8 V# `
. l8 B, ?( n$ B0 d
硬件模块
& d4 g! W& ~' ~        STM32F103R4
( z1 ?4 `( A5 n: M4 c5 U) g        LDR
* F' z# ]; O6 Q1 m" s, \$ B        串口模块
, S6 ?7 k; V1 p& b5 T/ U5 m. v2 @1 h6 z9 ?; F0 W: C' E
软件工具
+ y) B9 T& b0 B& ^! o        CubMX/ k6 C4 {8 Z5 t4 d) u9 `: H
        Proteus
! G8 z( E3 t; z0 D9 w        KEIL
" Q7 j* P* A7 p, {- n9 d- B
( x. B0 [7 K3 {( S. p8 d8 K
电路连接图9 W' g6 ]" y! _+ d4 o$ d
        
# {* {% }; x% f( R3 |$ T TGQE4D)O(KA{B2B%NVVDR%9.png $ |+ G: d. J" h
% e: m- p: S- `1 k) i7 N. V
E)(B`DJ2F]AZS3A1%GK`23J.png 9 A- j; @& }' ~( x
3 s3 N) M' C9 A

5 U0 V5 Q! ^8 `) |, A7 n& U/ X( }工作流程
2 q/ B/ z* s/ Q$ J
        首先创建一个CubMX工程,选择ADC模块( U# B0 X0 y$ ^$ j! m( m
. I( p; l3 [5 [
X4JOAH4C2M%L[PL5ZA~BE8N.png : Z$ J( t7 j5 P
      
1 ?9 n# b+ |+ g5 z# W        其余保持默认即可。 然后就是编写程序,程序代码在后面会列出来,这里简单说说自己遇到的一些问题。刚开始出来的结果全是0,但是网上有人说在实物开发板上是可以正常运行的。本来想放弃选用ADC0832模块的,不过不幸的事情又发生了,因为我已经在网上找到了相关的源代码和仿真原理图,因此我一开始觉得没有什么问题,但是我的Proteus软件上没有ADC0832的仿真Model,很奇怪,为什么别人安装的Proteus上就有,我安装的就没有,我上网查也查不出来。! _- S7 v  c; ?" Z8 R) d
  s. f! a* M' k; T( K1 X
        后来,我坚信自己的程序是没有问题的,于是开始找硬件的问题,我在Proteus的引脚配置里好好查看了一下,发现我的VSSA在GND类里,肯定是不对的,于是调整过来了。重新运行程序,发现程序直接卡死了,卡死的位置在Printf函数中,上网查了一下资料,也有许多Printf函数卡死的现象和解决办法,比较简单的就是使用use microlib(微库),但是我的Keil里设置的是已经采用微库了,然而网上推荐的是说最好不要使用微库,除非是在单片机资源很紧张的情况下,于是我就把微库勾选去掉了,哎,程序居然就好用了。最终结果如下图所示。/ i; O, M& _* S% [

$ W- }# L# S& p' F  G
E6HEE90UM{4@Y6FVI(E[ENT.png
5 G7 ^, W% o) _4 l0 ^8 I5 c3 g. X$ F
NQ)7R125T9D`H(4XA)MWSBL.png 9 t  N: |) v* x7 u; @
/ l8 c; y2 p0 b
程序代码) ?, y) X. U" J$ I& A# G+ W
          main.c
( P! u& P& |/ W' o) p
  1. HAL_ADC_Start(&hadc1);- @# C) ^+ L/ w- H# I  B
  2.         //HAL_Delay(10);
    2 y9 O6 `/ E! {* |2 j( t- g
  3.         if(HAL_ADC_PollForConversion(&hadc1,50)==HAL_OK)//等待转换完成7 B. {4 L$ u1 q3 n  ]
  4.         {
    1 d% E. C7 N4 y8 l2 E# L: n
  5.                 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
    4 G+ B1 c0 x6 a6 y% t; H' w4 B
  6.                 if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))//检测是否检测完成% N  h: D* f) X8 v* r( p/ p3 F
  7.                 {; m3 D: G' ~  ^! `. |' [5 Z+ m
  8.                 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);' ^8 B2 w* d$ r) q
  9.                 AD_Value=HAL_ADC_GetValue(&hadc1);
    1 ^, b$ T! j- }& l% Q# }2 K% J  f) p
  10.                 //HAL_Delay(500);
    ( g1 V4 B8 B7 i/ f: I
  11.                 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);2 Y/ Z; s+ o7 K8 C
  12.                 printf("the AD Value%d\r\n",AD_Value);3 J% A3 I  S* q: Y
  13.                 printf("the voltage=%.1fmv\r\n",((float)AD_Value)*5000.0/4096.0);
    + W# x. {" L3 W
  14.                 }" v6 S4 d' n4 i  P3 d
  15.         }
复制代码
' |1 F; X% w2 w  l
作者:jxjajl
, X% |: s" R0 J* X# Y6 e5 t' L4 Q; W, ?# L- Z4 n3 i6 a
赞 收藏 评论0 发布时间:2022-12-31 19:10

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版