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

[STM32F401-DISCO开发板]实验三、2路ADC采样+2路PWM输出实验

[复制链接]
zhjb1 发布时间:2017-12-10 10:53
[STM32F401-DISCO开发板]实验一、STM32F401 DISCO开发板介绍,点亮LED& p) e8 N+ ^7 I/ ~7 B% i
[STM32F401-DISCO开发板]实验二、驱显黑白LCD_6903,串口调试- i* n7 P6 s( l( T6 u( {  f; @  |

- ]% T: v5 A4 B6 ]# a* G/ _2 p/ p- O) g: e) l7 a; b
- ~! P0 h8 Z% c% y2 Q
本实验较为简单,设置2论ADC采样和2路PWM输出,并且显示在LCD上同时从串口输出数据。
* F7 s" |+ h. x9 ^定义对象:1 p( B; P$ j5 _3 j
AnalogIn adc0(PA_4);
: S8 A  b# Y  Q/ @* S% J* g% F9 MAnalogIn adc1(PA_5);0 @" e! _9 J2 M$ c
PwmOut pwm0(PA_10);
- T1 t: V' g2 |6 q: uPwmOut pwm1(PA_8);) H. ]7 S! q/ D% H" S! z! w- r0 p2 `
Ticker tick;//Time Interupt Clock$ F( P; r! {3 _5 a/ T
//DigitalOut led(LED1);
6 F9 r/ i) Y& l4 pSerial sout(PA_2,PA_3);//(USBTX, USBRX);8 a  ~7 t' D& r/ n5 y
定义显示函数:
- N5 u; y# l. f0 bvoid dispBase(void);8 i8 H, K+ o; }6 @/ U# q
void dispMes(void);
% ^& a) L" a3 s3 X- Q4 u& H' ^5 M定义变量:( w0 h8 ]+ Z$ R" F# }
//DEFINE VARIABLE( e. |3 ~0 t; E  o
int32_t jsq;) w0 I# f; Q" w( f$ M# C
float val0,val1,dut0=0.330f,dut1=0.450f,ddu0=0.003f,ddu1=0.002f;+ Y* b, F5 W8 Q) r& n
int pdir0=1,pdir1=1,twAddr1=0xBC,twAddr2=0xBB;/ w- \+ Y3 C9 ]; |
char twData[2]={0,0};
: S* X8 l* k* b) m0 o1 `定义中断Tick实现程序计数器:
4 \' N; S8 B3 X0 F1 r$ S; U3 pvoid tipInt(void){jsq++;}
8 @! b0 o: }* K4 M8 _定义GPIO[仅仅PWM周期]:
0 l" |* K4 ^( b+ L9 {$ i6 Avoid ioInit(void){
+ r: ?, e0 U+ h8 W% ?$ F+ i pwm0.period(0.003f);//pwm0
/ M; C! I6 P5 Q pwm1.period(0.004f);//pwm1
. |% J* i/ o% l1 w4 Y}
5 z' O" h! t( G/ Lmain函数:
# S6 D' Z# [+ T* a% n$ gint main(){
% p+ K6 \# d1 @  `1 C' e ioInit();$ u  K; O3 u/ r! w( @0 h+ Y
lcdInit();7 O- K; Y7 E0 A# T5 l2 Z1 B
lcdClear();% [1 w: e  J* w7 b6 G0 _
dispBase();
% q+ C# g) ?$ o. C5 M. x3 c tick.attach(&tipInt,0.005f);" G& C: {1 J) R3 k3 d; n2 C
sout.printf("TEST 2ADC 2PWM a LCD Display\n\r");9 x( S& ^5 i. ~4 ]. j: g  Q
while(true){6 X( c, ^9 ]! `) b) K' n% V
  val0=adc0.read();
7 q8 w% k& D( {- V  val1=adc1.read();) E. ~* E( x/ n& R8 Q; ~7 ^
  if(dut0>0.810f){pdir0=0;};if(dut0<0.180f){pdir0=1;}
, R$ q/ T- P9 X1 g2 v  if(pdir0==0){dut0 -=ddu0;};if(pdir0==1){dut0 +=ddu0;}
; i+ f. G0 s/ w% |! A4 X  pwm0=dut0;
% M; F' k( h- K" ~# u& N6 d0 W  v  if(dut1>0.610f){pdir1=0;};if(dut1<0.160f){pdir1=1;}
  ^( A6 }7 |/ l  P, ~; ^" i  if(pdir1==0){dut1 -=ddu1;};if(pdir1==1){dut1 +=ddu1;}( |0 n: ]; ?% U
  pwm1=dut1;
  }7 h4 [. d. y  //i2c.read(twAddr1,twData,2);
9 w2 k$ w3 J! q+ k  if((jsq/5)%5==1){dispMes();}' W: S6 r7 ]0 \, M1 u7 q
  sout.printf("ADC1=%0.4f ADC2=%0.4f PWM1=%0.3f PWM2=%0.3f ",val0,val1,dut0,dut1);6 X; C8 ]. ]+ W; p% Q
  sout.printf("DATA0:%d DATA1:%d \n\r",twData[0],twData[1]);
* ], K6 l; f* d& A; a4 V  //led=!led;  T, L1 ]8 p+ o% B% T" p( X
  //wait(0.05);, z; k3 q( h/ ~, I
}3 w1 v7 i2 w3 g% l3 b' |
}3 j& D/ K+ x) \9 W
显示固定字符函数:
9 Q  \7 `; J& ]7 y* z) f0 E//Display Base Meseger% ^5 Q9 p2 y' j( H5 E  t
void dispBase(void){
) N6 C" a7 L  I c2l(0,0,19);c2l(1,0,28);c2l(2,0,26);c2l(3,0,40);//JSQ:5 g+ Y7 y* u/ Q9 n8 D" w
c2l(0,1,10);c2l(1,1,13);c2l(2,1,0);c2l(3,1,40);//AD0:5 M, z5 _, a% [* l& [) C! i
c2l(9,1,10);c2l(10,1,13);c2l(11,1,1);c2l(12,1,40);//AD1:
$ p0 T" [2 G- r9 U; @2 t c2l(0,2,25);c2l(1,2,32);c2l(2,2,0);c2l(3,2,40);//PW0:
. P! M" I1 y# V! o- b c2l(9,2,25);c2l(10,2,32);c2l(11,2,1);c2l(12,2,40);//PW1:
: v' a) j- C2 h: y c2l(0,3,29);c2l(1,3,14);c2l(2,3,22);c2l(3,3,40);//TEM:4 _5 G$ m/ X6 _& o; I2 }2 }) o
c2l(9,3,17);c2l(10,3,30);c2l(11,3,22);c2l(12,3,40);//HUM:0 ?; }, ^( D! ^8 M9 a
}$ X  X# m' z  n4 D: e
显示采样和PWM输出计数器输出数据:# E# ^$ x2 O! W$ l9 r* ~/ Z; L
//Display Messeg6 u3 e8 h7 h2 E! W# U
void dispMes(void){/ Q# ]/ S+ E$ s$ i
c2l(4,0,(jsq/1000000)%10);c2l(5,0,(jsq/100000)%10);c2l(6,0,(jsq/10000)%10);c2l(7,0,(jsq/1000)%10);//JSQ:
( s3 k6 C8 h4 a0 j6 Q* L6 w c2l(8,0,(jsq/100)%10);c2l(9,0,(jsq/10)%10);c2l(10,0,(jsq)%10);//JSQ:; c( s8 F! D/ z, J( ?
c2l(4,1,int(val0*10)%10);c2l(5,1,int(val0*100)%10);c2l(6,1,int(val0*1000)%10);c2l(7,1,int(val0*10000)%10);//ad03 ]$ G  C' S" @% O
c2l(13,1,int(val1*10)%10);c2l(14,1,int(val1*100)%10);c2l(15,1,int(val1*1000)%10);c2l(16,1,int(val1*10000)%10);//ad05 |  i" P2 `- o) [9 Z
c2l(4,2,int(dut0*10)%10);c2l(5,2,int(dut0*100)%10);c2l(6,2,int(dut0*1000)%10);
2 y- D! ?& d, |2 [ c2l(13,2,int(dut1*10)%10);c2l(14,2,int(dut1*100)%10);c2l(15,2,int(dut1*1000)%10);
. q6 _8 H: R  [/ O1 M6 F c2l(4,3,(twData[0]/100)%10);c2l(5,3,(twData[0]/10)%10);c2l(6,3,(twData[0])%10);
1 _( Y* Q1 z1 i1 w* |& ~3 q c2l(13,3,(twData[1]/100)%10);c2l(14,3,(twData[1]/10)%10);c2l(15,3,(twData[1])%10);! x7 s9 s, S6 x; _* |' ?
}/ f0 D# H) J0 g( J& E2 o6 v
编译后下载运行结果见照片和截图。照片31为硬件连接;照片32为LCD显示结果;照片33为PWM控制2个LED轮流渐亮暗;截图34为牟尼出口输出的ADC和PWM数据。. P& z7 J7 h- P7 P9 w8 ^$ E" t3 c

31

31

32

32

33

33

34

34
收藏 评论4 发布时间:2017-12-10 10:53

举报

4个回答
anywill 回答时间:2017-12-10 13:30:10
继续点赞
浪花雷雨 回答时间:2017-12-11 09:03:58
赞,很不错
wolfgang 回答时间:2017-12-11 21:09:39
很不错~~
stm32f107 回答时间:2018-7-5 09:55:13
不错
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版