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

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

[复制链接]
STMCU小助手 发布时间:2022-11-15 23:53
项目简介
0 m5 Z3 @9 u* q- c7 J  [( z4 ~# i        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第五部分针对STM32单片机内置ADC模块的学习和理解。
# A- E: W. Q2 u9 N
. {/ r/ n! L9 v硬件模块5 W0 ^! t0 O* }+ n$ c! O" A' R0 a3 [) D5 L$ K
        STM32F103R4. `$ q, v8 g; n& i8 J6 d

; l) z7 O2 ~& t) V8 `! h        LDR5 Q( F5 L6 T  B: R/ r+ w

1 J; B  i$ ^( V* D: f. m8 _3 i        串口模块/ F" c9 R4 E7 k6 Y2 V

* @, {6 c  |4 P% C  l* O软件工具
2 F6 O$ ^: b5 c5 p' w$ U        CubMX
% C- E" v' f; t9 W7 j7 c8 N" v8 m2 d9 \- o. y# W
        Proteus" o4 z) S: J( I. `
( a- \! c* g! v. d
        KEIL
1 L: {# o% f& Y" a! s1 `7 V
/ q' e% w' I% ^: a2 U4 u! ?电路连接图9 o' x& f) t1 f

0 E5 c, p  M9 A/ k8 P. U( H
+ K: a1 O. o7 y; t3 u, v# G$ P4 Q( J& V) c% f
LPA(U_5HP}SV_]A]AQ0C{T9.png " }# h$ L; w$ }  F+ Y$ {! E' I
( V) l; P9 o; }, [7 z7 J  L8 e
工作流程
* `8 Q" y: |) o, ]) n! Q
        首先创建一个CubMX工程,选择ADC模块3 A( n, r& P$ r- |4 P% Z& l1 p6 D
* n! p2 ?* ]: S& `: C8 {4 ]; L
K[X$QHT)VR$_F4]XQ4CET2T.png
# I- ^3 K: m! [" J6 _5 E' g
9 ?( H  I2 A" x% M2 c# M. n        其余保持默认即可。 然后就是编写程序,程序代码在后面会列出来,这里简单说说自己遇到的一些问题。刚开始出来的结果全是0,但是网上有人说在实物开发板上是可以正常运行的。本来想放弃选用ADC0832模块的,不过不幸的事情又发生了,因为我已经在网上找到了相关的源代码和仿真原理图,因此我一开始觉得没有什么问题,但是我的Proteus软件上没有ADC0832的仿真Model,很奇怪,为什么别人安装的Proteus上就有,我安装的就没有,我上网查也查不出来。  A4 Q' ^6 Q. Y8 I
1 B5 M6 t4 P' Z5 L( X3 C, J. r
        后来,我坚信自己的程序是没有问题的,于是开始找硬件的问题,我在Proteus的引脚配置里好好查看了一下,发现我的VSSA在GND类里,肯定是不对的,于是调整过来了。重新运行程序,发现程序直接卡死了,卡死的位置在Printf函数中,上网查了一下资料,也有许多Printf函数卡死的现象和解决办法,比较简单的就是使用use microlib(微库),但是我的Keil里设置的是已经采用微库了,然而网上推荐的是说最好不要使用微库,除非是在单片机资源很紧张的情况下,于是我就把微库勾选去掉了,哎,程序居然就好用了。最终结果如下图所示。
% h9 [& E' [  C3 z# E/ b) W. ~( ^5 h$ @" D0 h
@[PA%VX0NDB2T5OQ[QXR9BV.png   _7 M) m" q: t

, z% k+ p5 L& g 2D%3}(S_TW7MT6R5F@TS_]C.png
6 Q& y9 g! K( a) ~8 W: s& L* y! d4 L& r4 a* t- @
程序代码
9 u/ B8 }. S; k& n: U
          main.c
) W( O# G9 L2 w* W( Y3 |6 O% d, m1 \% V3 n6 E) D! {
  1. HAL_ADC_Start(&hadc1);. e# v9 N" h$ K+ ]; M6 L3 p
  2.         //HAL_Delay(10);
    , ^; ?8 C" Y# l6 b1 s
  3.         if(HAL_ADC_PollForConversion(&hadc1,50)==HAL_OK)//等待转换完成# t- F$ i; c" B8 }
  4.         {
    5 E( G$ |4 V$ E
  5.                 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
    4 p, b3 Q9 ]) ]* ]- G5 `
  6.                 if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))//检测是否检测完成. @7 A4 U  ?5 A# J6 p: o* P
  7.                 {. a# `! e7 M1 v4 O
  8.                 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);9 e$ g" L  z, I5 ^" ]( N
  9.                 AD_Value=HAL_ADC_GetValue(&hadc1);( X. |1 I5 e0 F6 }
  10.                 //HAL_Delay(500);( C/ j; U$ \" I5 g: R8 |* H0 U( w: z
  11.                 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
    ( l& [% ^$ A- G9 ^! b% I
  12.                 printf("the AD Value%d\r\n",AD_Value);! A- z3 V+ J, G
  13.                 printf("the voltage=%.1fmv\r\n",((float)AD_Value)*5000.0/4096.0);
    " N: H$ E' `- E1 O) a% ~" M% h( r
  14.                 }0 P# ]' @8 q; O, o
  15.         }
复制代码
% G: p' b: W6 `4 w

0 z. d9 l8 q  X9 e5 A2 I% B6 P4 \3 X; Z
作者:jxjajl bilibili  ~5 F# f$ Z( O% j

  H6 S, d( j  X$ V8 [: C
赞 收藏 评论0 发布时间:2022-11-15 23:53

举报

0个回答

所属标签

相似技术帖

官网相关资源

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