单片机STM32试验报告.docx
《单片机STM32试验报告.docx》由会员分享,可在线阅读,更多相关《单片机STM32试验报告.docx(31页珍藏版)》请在冰豆网上搜索。
单片机STM32试验报告
实验报告
课程名称:
单片微机原理与车载系统
学生姓名蒋昭立
班级电科1601
学号
指导教师易吉良
2018年12月17日
实验1GPIO实验
实验目的
1)熟悉MDK开发环境;
2)掌握STM32单片机的GPIO使用方法。
实验设备
1)一台装有Keil和串口调试软件的计算机;
2)—套STM32F103开发板;
3)STlink硬件仿真器。
基本实验内容
1)熟悉MDK开发环境,参考《STM32F1开发指南(精英版)-寄存器版本》第3章,安装MDK并新建test
工程,运行例程,在串口窗宽观察结果,并记录如下:
从图片可以看出,例程运行成功,没有错误。
Uir.^iici^|^hunn
MiiMVlitaPl■毎HIAMbvhitteMMS押缶jr*电
tSh'Cj^ni,H
二&z
亠CM
|J
_Jeiarti<.EteiiUtltta_liMie丄!
」Mtr-c
□咿■
口ttrw4«
qUM
.!
lilHfMd
ij血曲直电百
TtHl^lOl4HfA
InLlTYTV&vl
kg»FUFw&pta_0PXcaPim«B^idl_i&.iE.St.tuElMiE«.91Id^iN■*Dlja_^kfi_Sj,»L±I-»■»f5.Swsarl
ap3»wZB4.E|ccuei^».gFIC_H«i*■-EFJd.feh曲气护m:
Nr打limpid
ajr^o^1114-*cwin.■■矢事'>*t^K^waWi-#
辛■二耳■(!
»[啊_0■谒-■lrll」:
l|l//HLrl・二|(
4FZ?
-lHiLs3lE-iumiiE>fl9^VIQ~F&n~"ffTZOi_V'!
|riiH>J-'-ZXC-LH
tFlO^lEJ-Ef&flOE>PIO_iillESLl«n:
iir»tJrjteUG4X0
iEPTO^VbiRii■*SFJil[兀L・〕pf/PT.I■睥■
iFia_a«ii4-^ad.TMigfiod.,weq_fsji._5]丫科gHvfwiohw・wa&jrr^tTjwins-till:
Ht||r曲理W・iL■■何时*■酣toFiAIDJ1■丁点七汕鼻I曲囲■亍fSfLBs
.*4(.'L3IHfIMliRiii*■■・
^Min・&♦-◎liri-«ri»pri&tt4i:
nuf|»|・
2)按键输入实验,《STM32F1开发指南(精英版)-寄存器版本》第8章。
实现功能:
3个按钮(KEY_URKEY0和KEY1),来控制板上的2个LED(DS0和DS1)和蜂鸣器,其中KEY_UP控制蜂鸣器,按一次叫,再按一次停;KEY1控制DS1,按一次亮,再按一次灭;KEY0则同时控制DS0和DS1,按一次,他们的状
态就翻转一次。
理解连续按概念及其实现代码。
参数mode为0的时候,KEY_Scan函数将不支持连续按,扫描某个
按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候比较不合适。
当mode为1的时候,KEY_Scan函数将
支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。
寄存器方法实现不支持连续按的关键代码,以及程序运行后的效果。
由程序可知,给KEY_Scan函数输入的值为0,为不支持连按模式。
总支螂;of^nedv.匚匸兀.
T魚星勇屯子科技有霞土圧
11mtmain(vaxd}
歩*r5二E?
I■耐初鼻化KEYInit(};
LEDO-';
3T-5C7EiTiT*fci-_T®Ta_tj-
20
21
庄厂阻匚5can〔匚}:
//SS.rtl
if(key)
(
rwitchdcey)
<
3i3eNKUP_PRES:
3EEP=?
3EEP;break;
6&seKE¥2_PRE£s//tSMlfDOflW
LEDO-?
LEDO;breat;
caseKEYX^PRES:
总刮LID亠相眉
LED1-!
LED1;bre^at;
c*«cKEyO_PRESi"同0H£1H1EDO*LED1毎轉
LEOO-?
LEDO;LEDSLED"bz&at;
)elaedelay_^(2->;
寄存器方法实现支持连续按的关键代码,以及程序运行后的效果。
由程序可知,给KEY_Scan®数输入的值为1,为支持连按模式。
3)采用库函数方法实现按键输入实验,参考《
STM32F1开发指南(精英版卜库函数版本》第
c
8早。
库函数实现不支持连续按的关键代码,以及程序运行后的效果。
由程序可知,给KEY_Scan函数输入的值为0,为不支持连按模式。
r"J*.
u8ji
SmaS^Clock^lBL^(?
);delay_ime「_)
LEDImt(i:
3EEP_Init();
KEY^init(i:
led3=while
互疚对井设賈這时
5^与1«ED逹黑
//<
"初始址域喝器漏口
"钿歯比与HEflt连療曲硬洋接口f先点壬红H
ke^KEY_Scan();ifcaseWKUPFRE5:
BEEF*'BEEP;breaks
匚aseKEI2_PRES!
LEDQ-!
££DOrbr»Kz
ca«eKEY^_PRES:
LEPJ.-J.LiDL;breakz
xnuKE'i-_FR£5:
LEDO-ttXOOrI£Dl-fL£DL^breaks
"同时控畧LZire.LEPlii?
?
?
库函数实现支持连续按的关键代码,以及程序运行后的效果。
由程序可知,给KEY_Scan函数输入的值为1,为支持连按模式。
创新实验内容
在实验步骤的基础上,通过修改代码,实现如下功能:
1)按下任意一个按键,蜂鸣器响x下后停止,然后DSO闪烁y次,DS1闪烁z次(x、y、z分别为你学
号的末3位的数);
由我学号最后三位为119,所以蜂鸣器响1下后停止,然后DS0闪烁1次,DS1闪烁9次。
37
38
39申
40
41
42
daseKEYO^PRES:
!
for(i^0;i()
//得到键It
switch
KEY1
WKUP
PRES
PRES
Init(>
Inxt
BEEPKEY_LEDO-O;I;while
(1)
y=KEY_Scan(0)if(key)』[
—T血屋删
「〃初始化与按键连接的硬件
//红miSKIIia
aIt
鴛
27
28
29[
30
31
32
33
34
35
36
BEEP=IBEEP;delayms(Lp
■
BEEP=!
SEEP;de
43
44卜
}
lay_rcis
:
LEDO;
实验2定时器实验
实验目的
1)理解定时器工作原理;
2)掌握STM32定时器的使用方法。
实验设备
1)一台装有Keil和串口调试软件的计算机;
2)一套STM32F103开发板;
3)STlink硬件仿真器。
基本实验内容
1)定时器中断实验,参考《STM32F1开发指南(精英版)-库函数版本》第13章,利用TIM3的定时器中断来控制DS1的翻转,在主函数用DS0的翻转来提示程序正在运行。
通过本例程,理解定时器中断原理,记录关键代码,写出定时器中断过程:
一开始程序会一直执行死循环里面的代码,让LEDO不断的亮然后熄灭来提示程序正在运行。
当计数器
计数500ms之后,程序将跳出循环,去执行定时器里面的程序,实现DS1的反转
气TMR
agHW
屛「AtiHI
EJ«hr
-」*nltf1bi_t£
E科HWWUI
由」■占
■Jl^nrj-u言档TH*曇出cm-亠UM*-』*fj™n
EG3XV子”
M-奄1『士鼻*:
-口丁并■港・_富-:
工■哀乐尊-I4:
卄Elt*:
*朋Hir.”-A_・s■关*咋-
HNr
.■-T
xnt■arIk工曲
耳V
旺1*1匚4*1昭汁//ja.1'5£B.<4
HVZfTwn■吟口|1呼||1¥1:
Pri4ii雀fit・:
unrt:
gm弭二:
切囂•□'<*3--1-:
o'
g3UI111/X3JDII□*7Vk
iiSL5_i±.T_L±LlE115?
-,!
-!
■^I=.J.JEJ:
上朝计17呛鼻汙眩b!
:
IW』勺乩.a
«U,M1Jik
BC
g>*」uc暫j
d»3*T_nw«:
2C>-,;
HTB-
打定时器彳中豔饕昜程字
veldTlM3_iRQHanaier(voi
{_
iti(TIH3rT1B_1I_Jpdate)!
-
<---
TIKTCLearITFencLingBj.LiTZM3FTIM_IT_t;pd*teLEOl-flXDl;
RESET*//tt»lH3£fF中斷发生与否);"摘寒"Mir更新中汗标志
2)PWM输出实验,参考《STM32F1开发指南(精英版)-库函数版本》第14章,使用TIM3的通道2,把通道2重映射到PB5,产生PWM来控制DS0的亮度。
通过本例程,理解定时器PWM输出功能的使用方法,记录关键代码,写出STM32定时器PWM输出实现过程:
本实验通过重映射复用功能,将TIM3的通道2,把通道2重映射到PB5引脚,通过PWM的高低电平来控制DS0的亮度,电平为高电平时为亮,低电平时为熄灭,由主函数的程序可以看出,随着ledOpwmval
的数越大,PWM输出的占空比就越大,此时灯就越亮。
±=trr.air(uoid)
delay_F3
(1);
i*(dir)leiup^xrai++:
led'jTW^TS;--;
■Sit阳+jLz3i
UAXtIKAt{亠-E二■>;LED_I*icO;
TIH3_FWH_Init(1whil«
(1)
<1
-80Kh=
l£(ledQpwmva1>i?
S)dir-..';最六可if(1edOpwmva1—.)dir-^;
TIHSetCcrqpareZTlM3jledCpUTtvalJ:
rtfr4*^B_^ai—■
即y范为9
3=
22
:
/台和tr平子工
uil^dCf^rrveil"7r
USdll*2;
delay_init(J;"延时話整初姻化
MVICFxlGrltyGroipConflg(ET^'ICPilarltySrijf_2”;-一"S2O0];//♦口
/ME>瑞口韦
分麵.PW痺率
设需SVI
3)定时器输入捕获实验,参考《STM32F1开发指南(精英版)-库函数版本》第15章,利用TIM5的通道1(PAO)做输入捕获,捕获PAO上高电平的脉宽(用WK_UP按键输入高电平),通过串口打印高电平脉宽时间。
通过本例程,掌握定时器输入捕获实现过程,记录关键代码,并写出捕获输入实现原理:
C■£.Il
别tv.NT
rt9-3:
胡:
:
蟲妙Hlop訂台M41G啄霏寻芋孑膨itWW1甲-■■7电丐玉实:
"tt.-Ja诵咅三壬圧權7亠|±朱叱匕
亠三亠二IS声去L作
J
LBUBTLM5匚5U_CaFTUM_5lA7■牺人壇兼社去
LB«XTarnUlfrTIMSCMT_iZRPTUwi_VAL;/20ibxmin(void)
uJZrenif"?
1;
d«l*y_iait<|i:
"延Jt畠麺初谄址
irvic_piior11v&JtouioCQafia13VIcf;f讨*kvi:
申眇号俎2
uirt_init|.1?
'》;丿;串Z1打Sf比,询\13」d".
却%亍niu[};fiUE3可也tt
TUtJpni^iaie(iss,ojj"不井■・PMMffA«?
2000/^+1}*S0KS±
:
l”匸牯匸肚丄3宁旷FF""-_;k'l
血le(T)
delay^niai(丄:
):
TIH^SttCenfNiixe^ETIM3,TIH^Geiue2ITIKI|丰J;
38a
3&«G4丄
ifiTLK^tC*p^we2(TM3—:
=ITIH=5«C™p«c:
(TLH3.j|i;
*irnB<3LL_e*>TORt_STA—X冋"晝功ft快列T—it上羿幡t
tsp-TIHSi:
H._C*FTURE_5TJUj刖和
t«nsp"*^5S3£;/.7二討商总和reEp^=TIM5CBl_GAPTUKE_VAL;=£3.:
蔓电年时可^*XniE£Ut邛才八色些□/打洛遷•jlS:
.戶干另伺
TIM5CJ!
l_C*>TUM_SrA"L-J//?
ffiT-代摘僉
4£
4fi
创新实验内容
在实验步骤的基础上,通过修改代码,实现如下功能:
1)通过定时器相关功能实现控制蜂鸣器音调。
查找资料理解蜂鸣器发出不同音调的控制原理,按下某个按键,实现“多来米发梭拉西”的发声;
)freeze
JIE筋」E叫
J」Hm32ri0wJ*mx
w^ilc{■!
)
科□
£
31
delay_ru(|;
321
for(a-:
;a<:
1■;
日")
33B
{
討
BEEP-!
BEEP;
35
delay_vs(..1j
3£
hi
>
for(b-;
39□
(
REELBEEF;
delay_u3(H
12
>
13k
for(c-;c<..j';
c*+)
佃申
{
BEEf-^BEEf;
delayus(tj.);
>
49k
50
for(d™I?
'■;
戎屮
SIR
(
551
BEEF-1BEEF;
汨
delayus(z?
};
5勺
>
55k
5枣
tor(e-j:
e<:
;一:
J;
C++)
57S
(
ss
BEEP-SEEP;
59
delay_u5(i'■'I;
«0
>
€1
实验3ADC及显示实验
实验目的
1)理解ADC工作原理;
2)掌握STM32ADC的使用方法。
实验设备
1)一台装有Keil和串口调试软件的计算机;
2)—套STM32F103开发板;
3)STlink硬件仿真器。
基本实验内容
1)ADC实验,参考《STM32F1开发指南(精英版)-库函数版本》第22章,将利用STM32的ADC1通道1采样外部电压值(注意:
输入电压不能超过!
),并在TFTLCD模块上显示出来。
ADC输入端口查找请参
考《STM32F1开发指南(精英版)-库函数版本》第2章实验平台硬件资源详解。
通过本例程,理解ADC原理,
记录关键代码,写出ADC采样实现过程:
通过Get_Adc_Average函数可以获得由通道
1采样得到的采样值,然后经过转换计算输出我们需要的
数字量电压值。
incmibivo&d.)
4
止呂Bi:
J*
riiSlACL«^J
de-laqr^lnlE;rr适姉曲敖初・*住
m:
」•““Li—斗—呕“中:
」"“sw-工鼻’p迥-*了虐—•:
匚担二■:
丸逼-匸燮空予一十常
M產口村站化中E1阳皿
LCDImtJ):
打工E®□初姑吒
工0_丄nit(pf
Mu二Tn”o/
k»rr_gL«・《EM斡1U字
LCT_siwwB5riftfl1£=.rS二昇“八右』齢刑鼻『问||FRU^■k/
LCD_S!
iot5cxxe-e?
UJP"-HJ,-tBIt,5LKTUT"];
L£D~ShxwSerla-gi翻乃H号俎比WTOt"j
:
LcpaiicwSEripfli«P7-■<-;丄丿一q.ij
和摄示廉示建9.
neirr_>:
ciLM-u»f/■^S>字*K寛亜*
ICD^hwScF4B.QIU-^30pSPOB丄E*LCj1■]1
L±D±hWL)・U|
*i_LK.™j^^AOeL^V#!
dLg*tu>-EU||a1iF2.JB;
US^MonHual114,JUOrhAK,.«vM*dTf^/S丽血JIf|t«qp-(flcat*bx±cx■().=:
」■;.t|-j
■iilZMmp;
LO_Jh«WHNiMI41((»<】科川如・IrfKpftjJ/j14^.■圧(t
talztb;
E.i^pB*ljj-3j
lcv_处pintfnai*"八wxgrkh*
LEEO-!
.LEM7
i3ilA-f_u\2'-J=
2)内部温度传感器实验,参考《STM32F1开发指南(精英版)-库函数版本》第23章,利用STM32F1的
内部温度传感器读取温度值,并在TFTLCD模块上显示出来。
通过本例程,理解STM32内部温度传感器的使
用方法,记录关键代码,写出读取内部温度传感器温度值的实现过程:
invmibivaid»
tBaxttufiF
吐2扯.gi耳I>』■/SPT西畫El饌优
if*lC_rtibtl!
t^SrflapCMiTlffdl*iC_Wietlt;^rc-JF_-Ir-u.riiBisJ;.ii|>,ii/醮口暫化为Ml■:
■■门
:
xd-和牛/rta匹与工匸進携韵枝呻垄口LEe^iutf>j/-!
fttil峙Up
|]jFrxcc軻fie■>
Eci!
:
irziSS^IItAijft.
l»j_P<-hnwSET3,ngj11..■r«vi•■,•,Bl*?
-THj,j
LjEDrhsowStri-n^ri.,r*_,liP.P■iBsrp*rat-ar-BTE_T■"-;yi^SwH■凝A.H41J-3#H«4:
04»llvJ■•_^m*AL;EBTIlE111jiLlD*=fldHfSrTlfl5?
EOIFZ_C3LC6-<Ef芒■之忸F盖奧
g■新gMkFUg门旺祐】靳Ki"TDCFEUlTEl料-牝Ll』
I
_Trwf««■vCl-r1/嘗■舟-AT西
[上■雹j
创新实验内容
在实验步骤的基础上,通过修改代码,实现如下功能:
1)用信号发生器输出正弦波、三角波信号(注意峰值小于!
),接入某ADC通道,在TFTLCD上动态
显示输入数据(也可以用图形方式显示);
rLCDFill(3J,7jF200+3Ci,?
D+16rWHITE};
delsyms(2JO};
i-}-
)ICDStiowSrrin^OO,^0,20;,lc,L£f^SD匚axelOK"}j
XCD_ShovStrin.^(30#90^200f16,16^-^FontUpdating...n);fcey=u(xiat^font{20r110,16f二0:
卄:
"更新字库
(while(key)//更新■失敗
LCD_5howString11l£rltr^FonDUpdateFailedJn];
■lelay_ics(2J:
};
LCDFill(阿初110+ie,WHITE);
delayins(200);
}_
MH^ShawString-(30,L10r200,16,16rX^n^UpdateSuccess!
n};del^y_m5(1500);
LCD_Clear{TSHITl)f//i#W
)_
POINT_COLOR=RED;
ShcvStr(30,50,200,16,16f□};
Show2Etl(30,70,200.L£r^L64O170O115F'fl€fO};
£how_Str(30,110,200,!
€,^2019^12^20SH,2t,j);
实验总结
通过这三次实验,我遇到了很多问题,比如,如何开始去新建一个工程,如何运行一个程序,如何下载到开发板中。
也学到了如何去解决这些问题,遇见软件问题也多不胜数,比如:
调试文件系统程序时,程序编译没有错,仿真时程序总是跑飞到硬件中断。
这是因为初始化文件系统时,前面忘记调用设备选择函数,导致一些参数未能及时存储变量的值,致使程序跑飞,加入设备选择函数后,该现象解决。
这样的还
有很多很多,问题越多,在与别人交流的过程中受益匪浅,别人的程序往往使人豁然开朗,通过这几次实验,我不仅加深了对单片机的了解,将理论很好的融
入到实践中,同时也让我意识到自己的不足,无论是理论上还是遇到问题的处理能力还有待提高。