<
U5ART1->DR=U5ART_O_3U?
[t];wMle[(USARn->SR40>==D);\尊吟兰谨结克
}
printf("\n\n")j/7拯入揍行
nSART_RX_STA=O;
}else
f
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),并使能中断,编写中断服务函数。
四.实验设备
硬件部分:
PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。
软件部分:
PC机WINDOWS系统、MDKKEIL软件、ISP软件、串口调试助手。
五.实验步骤
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计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:
PC机WINDOWS系统、MDKKEIL软件、ISP软件、串口调试助手
五.实验步骤
1.参考教材独立看门狗部分,编写独立看门狗驱动程序。
建立和配置工程
2.编写代码
3.使用ISP下载到实验板
4.记录实验过程,撰写实验报告
源代码:
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上的电平,来指示定时器中断的产生,修改中断时间。
四.实验设备
硬件部分:
PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:
PC机WINDOWS系统、MDKKEIL软件、ISP软件、串口调试助手。
五.实验步骤
1.参考教材定时器中断部分,编写定时器中断的驱动程序
2.编写主程序
3.编译代码,使用JLINK或ISP下载到实验板
4.记录实验过程,撰写实验报告
源代码:
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.实验设备
硬件部分:
PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:
PC机WINDOWS系统、MDKKEIL软件、ISP软件、串口调试助手
5.实验步骤
1编写主程序
2编译代码,使用JLINK或ISP下载到实验板,使用串口调试助手观察数据3记录实验过程,撰写实验报告
6.实验结果及测试
源代码:
while
(1)
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计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:
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
I
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=!
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.
四.实验设备
硬件部分:
PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:
PC机WINDOWS系统、MDKKEIL软件、ISP软件、串口调试助手。
五.实验步骤
1参考教材I2C部分,编写I2C驱动程序。
2编写主程序
3编译代码,使用JLINK或ISP下载到实验板
4记录实验过程,撰写实验报告
六.实验结果及