实验一跑马灯实验Word文档格式.docx
- 文档编号:18479596
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:27
- 大小:547.94KB
实验一跑马灯实验Word文档格式.docx
《实验一跑马灯实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验一跑马灯实验Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
5tm32_Clock_IniC(9);
/,耒红对甘去置delay^init(72>
;
"
延吋初始<
t
LEDTnit:
C>
;
初维花与LED连接的硬伴接口
whiletl)
{
匚EDO=O;
匸ED1=1;
de.layms(300J;
LEDO=1;
LEDL-0;
delayms(3"
0^;
两个灯LEDO与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。
七.实验总结
通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDKKEILC软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDKKEIL软件,用这个软
件来编程和完成一些功能的实现。
作为STM32的入门第一个例子,详细介绍了STM32的10口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。
实验二按键输入实验
在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。
熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。
实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。
使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。
PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器
1在实验1代码的基础上,编写中断初始化代码
2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序
3编写中断服务程序
4编译代码,使用JLINK下载到实验板
5.单步调试
6记录实验过程,撰写实验报告
源代码:
intrf_ain(vdid)
u8t;
Stm32_Cloc}e_rnie.:
〃系统时钟逐置
delay_init(72);
〃延时初始化
LEOInitO:
〃初始化与LED連接的硬f牛聂H
KEY^InitO;
利始比与按键連接的硬徉揆口
while
(1)
if件厂
(
switah(t}
na.seL:
LEDD=!
LEDO;
break;
case2\LEDL=!
LED1;
breaK;
case3:
LEDO-!
匸EDO;
LEDL-!
break;
}
}elsedela^ir^(10);
我们将通过MiniSTM32板上载有的3个按钮,来控制板上的2个LED,其中KEYO控制LEDO,按一次亮,再按一次,就灭。
KEY1控制9LED1,效果同KEYO。
KEY_2(KEY_UP),同时控制LEDO和LED1,按一次,他们的状态就翻转一次。
通过本次实验,我学会了如何使用STM32的10口作为输入用。
TM32的10口做输入使用的时候,是通过读取IDR的内容来读取I0口的状态的。
这里需要注意的是KEYO和KEY1是低电平有效的,而WK_UP是高电平有效的,而且要确认WK_UP按钮与DS18B2O的连接是否已经断开,要先断开,否则DS18B2O会干扰WK_UP按键!
并且KEYO和KEY1连接在与JTAG相关的I0口上,所以在软件编写的时候要先禁用JTAG功能,才能把这两个10口当成普通I0口使用。
实验三串口实验
编写代码实现串口发送和接收,将通过串口发送来的数据回送回去。
掌握STM32基本串口编程,进一步学习中断处理。
编写主程序,初始化串口1,设置波特率为9600,无校验,数据位8位,停止位1位编写中断服务程序代码实现将发送过来的数据回送。
PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。
软件部分:
PC机WINDOWS系统、MDKKEIL软件、ISP软件、串口调试助手。
1编写串口初始化代码
2编写中断服务程序代码
3编译代码,使用JLINK或ISP下载到实验板
4记录实验过程,撰写实验报告
while(1}
if(USART_RX_STA4CJx55>
f
Len-U5ART_RXSTAftOx3f;
V遍到St頁歩文艺的裁圭长嗖printf发谨的哨息垢J\r\nff);
for(t:
=0;
■t<
Len;
Jt++)
U5ART1->
DR=U5ART_O_3U?
[t];
wMle[(USARn->
SR40>
==D);
\尊吟兰谨结克
printf("
\n\n"
)j/7拯入揍行
nSART_RX_STA=O;
}else
time3++;
if(t-imes^SOOO^-OJ
printf(n\r\rLMiniSTM33开发板串匚实验\工\即);
prinrf「正点原子电仏工瓦肛已贰八小讥小讹口帀);
it(tiires:
%2OO«
D)prlncfL请St入数蛊『以罔孚铤努束\工\叮}:
if(tl»
s*3O-=O5LEDO-!
LEDD;
//|X]®
LEDrJSS垂统定在运行-delayits(102
把代码下载到MiniSTM32开发板,可以看到板子上的LEDO开始闪烁,说明程序已经在跑了。
接着我们打开串口调试助手,看到如下信息:
证明串口数据发送没问题。
接着,我们在发送区输入上面的文字,输入完后按回车键。
然后单击发送,可以得到如下结果:
通过本次实验,我进一步了解了串口的使用,学会了通过串口发送和接收数据,将通过串口发送来的数据回送回去。
该实验的硬件配置不同于前两个实验,串口1与USB串口默认是分开的,并没有在PCB上连接在一起,需要通过跳线帽来连接一下。
这里我们把P4的
RXD和TXD用跳线帽与P3的PA9和PA10连接起来。
实验四外部中断实验
STM32的IO口在本章第一节有详细介绍,而外部中断在第二章也有详细的阐述。
这里我们将介绍如何将这两者结合起来,实现外部中断输入。
进一步掌握串口编程,进一步学习外部中断编程,提高编程能力。
初始化IO口的输入,开启复用时钟,设置IO与中断的映射关系,从而开启与IO口相对应的线上中断事件,设置触发条件。
配置中断分组(NVIC),并使能中断,编写中断服务函数。
1.编写中断服务程序代码
2.使用ISP下载到实验板
3.测试运行结果
4.记录实验过程,撰写实验报告
打开串口助手。
首先需要将10设置为中断输入口:
1)初始化I0口为输入。
2)开启I0口复用时钟,设置I0口与中断线的映射关系。
3)开启与该I0口相对的线上中断/事件,设置触发条件。
4)配置中断分组(NVIC),并使能中断。
5)编写中断服务函数。
这一节,使用的是中断来检测按键,通过WK_UP按键实现按一次LEDO和LED1同
时翻转,按KEYO翻转LEDO,按KEY1翻转LED1。
试验中外部中断函数不能进入的原因分析:
1)GPIO或者AFIO的时钟没有开启。
2)GPIO和配置的中断线路不匹配。
3)中断触发方式和实际不相符合。
4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线。
5)外部中断是沿触发,有可能不能检测到沿,比如中断线是低电平(浮空输入),触
发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续为高
电平。
6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;
因为软件
中断先于边沿中断处理。
实验五独立看门狗实验
一.实验简介
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。
窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
通过编程,编写一个独立看门狗驱动程序
启动STM32的独立看门狗,从而使能看门狗,在程序里面必须间隔一定时间喂狗,否则将导致程序复位。
利用这一点,我们本章将通过一个LED灯来指示程序是否重启,来验证STM32的独立看门狗。
PC机WINDOWS系统、MDKKEIL软件、ISP软件、串口调试助手
1.参考教材独立看门狗部分,编写独立看门狗驱动程序。
建立和配置工程
2.编写代码
3.使用ISP下载到实验板
intmain(void)
3-IT.S2二二二二G;
"
三乏彳兀上土;
寸萱
ielayinic(了2);
uartinlt(72r9600};
"
延时初始比
串口初始化
LEDInic.():
〃初绝化三匸切逹接的硬舞接口
():
〃按键初始化
delayms(30D);
辻人看得到灭
IWDS_Inl匸或2右》;
LED0=0;
wrtiile(l)
〃号分频数为钳「里載值为駝屏溢出时同为"
〃点亮ITD0
if(KEY_Scan().—-
3)IWDG_Feed();
//5D果玄下喂狗
dtliy_m3(ID}*};
—
在配置看门狗后,看到LEDO不停的闪烁,如果WK_UP按键按下,就喂狗,只要WK_UP不停的按,看门狗就一直不会产生复位,保持LEDO的常亮,一旦超过看门狗定溢出时间
(Tout)还没按,那么将会导致程序重启,这将导致LEDO熄灭一次。
通过本次实验,我掌握了启动独立看门狗的步骤:
1)向IWDG_KR写入0X5555。
2)向IWDG_KR写入0XAAAA。
3)向IWDG_KR写入0XCCCC。
通过上面3个步骤,启动STM32的看门狗,从而使能看门狗,在程序里面就必须间隔一定时间喂狗,否则将导致程序复位。
利用这一点,本章通过一个LED灯来指示程序是
否重启,来验证STM32的独立看门狗。
在配置看门狗后,LEDO将常亮,如果WK_UP按键按下,就喂狗,只要WK_UP不停的按,看门狗就一直不会产生复位,保持LED0的常亮,一旦超过看门狗溢出时间(Tout)还没按,那么将会导致程序重启,这将导致LED0熄灭一次。
实验七定时器中断实验
实验简介
STM32的定时器是一个通过可编程预分频器(PSC)驱动的16位自动装载计数器(CNT)构成。
STM32的通用定时器可以被用于:
测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。
使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几微秒到几毫秒间调整。
STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。
.实验目的
熟练掌握定时器中断,学会对定时器中断的编程操作
使用定时器产生中断,然后在中断服务函数里面翻转LED1上的电平,来指示定时器中断的产生,修改中断时间。
1.参考教材定时器中断部分,编写定时器中断的驱动程序
2.编写主程序
3.编译代码,使用JLINK或ISP下载到实验板
intmam(voidi
{__
Stir.32_Clock_Init(9):
/丿至统时餐设置delay2init讯>
;
延侖和始征
uart_Znit{72r9600);
爭口初始牝
LED_Tniv(}f"
初始北与逵接的谡■件接口
丁5鼻拆_】泌匸I把汩小二阳》;
/7i;
^z的计敎姦座丁汁敎至.50:
。
为,7曲耳whileCl)
LEDO=:
LEDO;
delay_ir,s(200};
通过本次实验,认识到时间中断来控制LED灯的闪烁,同时也可以将时间中断应用到控
制其他的程序块。
以TIME3为例产生中断的步骤为
1)TIM3时钟使能。
2)设置TIM3_ARR和TIM3_PSC的值。
3)设置TIM3_DIER允许更新中断。
4)允许TIM3工作。
5)TIM3中断分组设置。
6)编写中断服务函数。
在中断产生后,通过状态寄存器的值来判断此次产生的中断属于什么类型。
然后执行相关的操作,我们这里使用的是更新(溢出)中断,所以在状态寄存器SR的最低位。
在处理完中断之后应该向TIM3_SR的最低位写0,来清除该中断标志。
实验十三ADC实验
通过DAC将STM32系统的数字量转换为模拟量。
使用ADC将模拟量转换为数字量
掌握DAC和ADC编程
3.实验内容
编写代码实现简单的DAC单次发送
编写代码实现ADC采集DAC发送的数据,并发送到串口
4.实验设备
5.实验步骤
1编写主程序
2编译代码,使用JLINK或ISP下载到实验板,使用串口调试助手观察数据3记录实验过程,撰写实验报告
6.实验结果及测试
adcx};
//蛊示ADC值
(float}Adest*(3.3/4096);
adc^<
=terrp:
pzint±
(w^ia\n"
fadcx);
显示电压直
pilntl(n^±
\n"
r「eiEfi);
LEDO=]LEBO;
delayma(250):
R:
<?
疋
IXU
打幵文料
JJ—'
-Ua.
耕系妆就件升MiF撷原干制作们上
周則:
1的
空剋
THP
关鬪岸戶|
厂AUTO「DEC
7.
昱存为
153.54J
YI
盍述
实验总结
本节将利用STM32的ADC1通道0来采样外部电压值,并在串口调试助手中显示出来。
步骤如下:
1)开启PA口时钟,设置PA0为模拟输入。
2)使能ADC1时钟,并设置分频因子。
3)设置ADC1的工作模式。
4)设置ADC1规则序列的相关信息。
5)开启AD转换器,并校准。
6)读取ADC值。
在上面的校准完成之后,ADC就算准备好了。
接下来我们要做的就是设置规则序列0里面的通道,然后启动ADC转换。
在转换结束后,读取ADC1_DR里面的值。
通过以上几个步骤的设置,可以正常的使用STM32的ADC1来执行AD转换操作。
通过本次实验的学习,我们了解了STM32ADC的使用,但这仅仅是STM32强大的ADC功能的一小点应用。
STM32的ADC在很多地方都可以用到,其ADC的DMA功能是很不错的,
实验十五DMA实验
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
熟练掌握DMA编程,学会对EPC02的读写操作,学习双缓冲兵乓操作,理解互斥资源。
提高编程能力。
利用外部按键KEY0来控制DMA的传送,每按一次KEY0,DMA就传送一次数据到USART1,然后在串口调试助手观察进度等信息。
LEDO还是用来做为程序运行的指示灯。
这里我们使用到的硬件资源如下:
1)按键KEY0。
2)指示灯LEDO。
3)使用串口调试助手观察数据
PC机WINDOWS系统、MDKKEIL软件、ISP软件、网络调试助手
1编写主程序
2编译代码,使用JLINK或ISP下载到实验板,使用串口调试助手观察数据
3记录实验过程,撰写实验报告
ririntf(rf\nPressKEY3TcStart!
Xntt)j=siEeo±
(TEXT_TO_SENE};
for(i=0;
K520?
i++)//#(充AS匚工工字符集JfcJE{_
if(t>
=:
)//加入匡行時
it(rtask}{
Send3ufi[i]=0x0a;
t=0;
Jelse{
f[i]=jxfld;
rEask-i-+^
else//复制HEXT_TO_3END语句
i~一
IT.a5K=0;
SendBuff[1]-TEXTTOSENE[Z];
T-H-;
1-0;
while(_]
I
t-KEYScan(J;
if(t==l>
¥
/KEYO^T
prin匸f(rr\nS匸且r匸Iransiniltpzintf("
XniXn"
);
//^示百分号
printf(r,XnSnDMADATA:
\nnJj
U5MT1->
CR3=1«
7;
■吏臺事口丄旳DMA笈遥
MYIWlEnable(DMA16ann巳14}:
异站一次DMA传输!
罅舂EMR传输兗成7此时我们来做另外一些事,点灯"
实际应用中■转翰数据期间,可H执行另外的任务
while(1J
if(UI4Al->
ISn£
(1«
13}J./等待通逍弓传输芫战
DMA1-MFCR\斗心请忑通這4隹轲亮哀环志break;
pro=DMA:
_ChaMrel4->
CNDTF;
/1得M刍左匹g.舍参少屮垃龙pro-^-pro/55./轉到百另比
pro*=100-丿/护悟
piinvf(r,%fX^ntf二匚);
)
print£
(r*\i:
TrftnsimitFinishedl\n'
r);
i■十十*
dElay_iris(10};
if(i—
{_
LEDO=!
//提示系统正在运行
i=o;
伴随LEDO的不停闪烁,提示程序在运行。
我们打开串口调试助手,然后按KEY0,可以看到串口显示如下内容:
本节利用STM32的DMA来实现串口数据传送,DMA通道的配置需要:
1)设置外设地址。
2)设置存储器地址。
3)设置传输数据量。
4)设置通道4的配置信息。
5)使能DMA1通道4,启动传输。
通过以上5步设置,我们就可以启动一次USART1的DMA传输了。
DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。
当CPU执行完当前总线周期即可释放总线控制权。
此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。
DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。
在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过中不需要中央处理器的参与。
开始时需提供要传送的数据的起始位置和数据长度。
当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。
当I/O接口收到结束信号后,一方面停止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。
最后,带着本次操作结果及状态继续执行原来的程序。
由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。
实验十六I2C实验
编程实现对使用I2C接口的EPC02芯片进行写和读操作。
熟练掌握I2C编程,学会对EPC02的读写操作。
编写I2C驱动程序,使用驱动程序初始化EPC02,判断设备正确性。
写256个0x5A到EPC02,读出并发送给串口,通过串口调试助手判别是否读到的都是0x5A.
1参考教材I2C部分,编写I2C驱动程序。
2编写主程序
六.实验结果及
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 跑马