ARM实训报告汇总Word文件下载.docx
《ARM实训报告汇总Word文件下载.docx》由会员分享,可在线阅读,更多相关《ARM实训报告汇总Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
图2
其中PWR是系统电源指示灯,为蓝色。
LED0和LED1分别接在PA8和PD2上,PA8还可以通过TIM1的通道1的PWM输出来控制DS0的亮度。
为了方便大家判断,我们选择了DS0为红色,DS1为绿色的LED灯。
3、按键
图3
KEY0、KEY1和KEY2用作普通按键输入,分别连接在PA13、PA15和PA14上。
WK_UP按键连接到PA0(STM32的WKUP引脚),它除了可以用作普通输入按键外,还可以用作STM32的唤醒输入。
4、EEPROM
ALIENTEKMiniSTM32自带了24C02的EEPROM芯片,该芯片的容量为2Kbit,也就是256个字节。
图4
这里我们把A0~A2均接地,对24C02来说也就是把地址位设置成了0了。
5、SPIFLASH
ALIENTEKMiniSTM32开发板载有SPIFLASH芯片W25X16,该芯片的容量为2M字节。
图5
6、温度传感器
图6
7、2.8寸液晶连接示意图
图7
8、红外接收头示意图
REMOTE_IN接到P2的第二脚,也没有直接接在MCU的IO口上,目的也是防止IO口在做其他功能使用的时候,收到红外信号的干扰。
图8
8、USB采用PL_2303芯片,为28引脚的SSOP封装。
如图9.
图9
实训二:
跑马灯与按键输入
一、实训目的
1.掌握STM32项目开发流程;
2.学会画出算法流程图;
3.掌握按键、LED的控制编程;
二、实训内容
1、实现LED0和LED1交替闪烁,间隔300ms.
三、实训要求
1、用C语言实现算法;
2、建立工程项目,生成目标文件;
3、将目标文件编程下载到开发板,观察结果是否满足设计要求;
四、硬件设计
该实验的硬件电路在ALIENTEMMiniSTM32开发板上默认是已经连接好了的。
DS0接PA8,DS1接PD2。
所以在硬件上不需要动任何东西。
其连接原理图如下:
五、软件程序
#include<
stm32f10x_map.h>
stm32f10x_nvic.h>
#include"
led.h"
voidLED_Init(void)//该函数的功能就是用来实现配置PA8和PD2为推挽输出,在配置STM32外设的时候,任何时候都要先使能该外设时钟
{
RCC->
APB2ENR|=1<
<
2;
//使能PORTA时钟,APB2ENR是APB2总线上的外设时钟使能寄存器
5;
//使能PORTD时钟//端口时钟的配置A和D看一下寄存器APB2ENR各位的含义
GPIOA->
CRH&
=0XFFFFFFF0;
CRH|=0X00000003;
//PA8推挽输出
ODR|=1<
8;
//PA8输出高
GPIOD->
CRL&
=0XFFFFF0FF;
CRL|=0X00000300;
//PD.2推挽输出
//PD.2输出高
}
该代码里面就包含了一个函数voidLED_Init(void),该函数的功能就是用来实现配置,PA8和PD2为推挽输出。
在配置STM32外设的时候,任何都要先使能该钟!
APB2ENR是APB2总线上的外设时钟使能寄存器。
sys.h"
usart.h"
delay.h"
intmain(void)
{
Stm32_Clock_Init(9);
//系统时钟设置
delay_init(72);
//延时初始化
LED_Init();
//初始化与LED连接的硬件接口
while
(1)
{
LED0=0;
LED1=1;
//代表灯灭
delay_ms(300);
LED0=1;
LED1=0;
}
代码先包含了"
这句,使得LED0、LED1、LED_Init等能在main函数里被调用。
接下来,main函数先配置系统时钟为72M,然后把延时函数初始化一下。
接着就是调用LED_Iint来初始化PA8和PD2为输出。
最后在死循环里面实现LED0和LED1交替闪烁,间隔300ms.
实训三:
串口实验
一、实验目的
1.掌握STM32项目开发流程;
2.学会画出算法流程图;
3.掌握串口的控制编程;
二、实验内容
1.用串口助手通过USART1向STM32F103发送“A”,STM32F103收到后发送回来信息“hello!
”。
三、实训要求
1.用C语言实现算法;
2.建立工程项目,生成目标文件;
3.将目标文件编程下载到开发板,观察结果是否满足设计要求;
四、硬件设计
五、软件设计
struct__FILE
{
inthandle;
};
/*FILEistypedef’dinstdio.h.*/
FILE__stdout;
_sys_exit(intx)
x=x;
}
intfputc(intch,FILE*f)
while((USART1->
SR&
0X40)==0);
//循环发送,直到发送完毕
USART1->
DR=(u8)ch;
returnch;
#endif
#ifdefEN_USART1_RX//如果使能了接收
u8USART_RX_BUF[64];
//接收缓冲,最大64个字节.
u8USART_RX_STA=0;
//接收状态标记
voidUSART1_IRQHandler(void)
u8res;
if(USART1->
(1<
5))//接收到数据
res=USART1->
DR;
if((USART_RX_STA&
0x80)==0)//接收未完成
{
if(USART_RX_STA&
0x40)//接收到了0x0d
{
if(res!
=0x0a)USART_RX_STA=0;
//接收错误,重新开始
elseUSART_RX_STA|=0x80;
//接收完成了
}else//还没收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x40;
else
{
USART_RX_BUF[USART_RX_STA&
0X3F]=res;
USART_RX_STA++;
if(USART_RX_STA>
63)USART_RX_STA=0;
}
}
}
}
#endif
voiduart_init(u32pclk2,u32bound)
{
floattemp;
u16mantissa;
u16fraction;
temp=(float)(pclk2*1000000)/(bound*16);
//得到USARTDIV
mantissa=temp;
//得到整数部分
fraction=(temp-mantissa)*16;
//得到小数部分
mantissa<
=4;
mantissa+=fraction;
RCC->
//使能PORTA口时钟
14;
//使能串口时钟
GPIOA->
=0XFFFFF00F;
CRH|=0X000008B0;
//IO状态设置
APB2RSTR|=1<
//复位串口1
APB2RSTR&
=~(1<
14);
//停止复位
BRR=mantissa;
//波特率设置
CR1|=0X200C;
//1位停止,无校验位.
#ifdefEN_USART1_RX//如果使能了接收
CR1|=1<
//PE中断使能
//接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQChannel,2);
//组2,最低优先级
#endif
实训四:
外部中断实验
1.掌握STM32项目开发流程;
3.掌握外部按键中断、LED的控制编程;
1.按键KEY0,在中断程序中控制LED0亮;
2.按键KEY1,在中断程序中控制LED0熄灭;
五、软件设计
exti.h"
key.h"
//外部中断0服务程序
voidEXTI0_IRQHandler(void)
delay_ms(10);
//消抖
if(KEY2==1)//按键2
{
LED0=!
LED0;
LED1=!
LED1;
}
EXTI->
PR=1<
0;
//清除LINE0上的中断标志位
//外部中断15~10服务程序
voidEXTI15_10_IRQHandler(void)
{
//