ARM实训报告汇总.docx
- 文档编号:28181340
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:17
- 大小:852.27KB
ARM实训报告汇总.docx
《ARM实训报告汇总.docx》由会员分享,可在线阅读,更多相关《ARM实训报告汇总.docx(17页珍藏版)》请在冰豆网上搜索。
ARM实训报告汇总
实训一、绘出STM32开发板的MCU外围硬件连接图
学生:
吴磊郑黄庆阿不力孜
指导老师:
王宜结
电子工程学院电子信息工程
一、实训目的
1.握STM32开发板的封装和引脚
2.能够测量开发板外围器件与STM32芯片的实际连接,并画出电路图
二、实训内容
1.画出开发板上MCU与发光二极管DS0、DS1的连接示意图
2.画出开发板上MCU与按键KEY0、KEY1、KRY2、KEYM的连接示意图
3.画出开发板上MCU与24C02芯片的连接示意图
4.画出开发板上MCU与W25X16芯片的连接示意图
5.画出开发板上MCU与温度传感器18B20的连接示意图
6.画出开发板上MCU与2.8寸液晶的连接示意图
7.画出开发板上MCU与红外接收头的连接示意图
8.画出开发板上MCU与PL2302芯片的连接示意图
三、实训过程
1、MCU
图1
图1中上部的BOOT1用于设置STM32的启动方式,其对应启动模式如下表所示:
表1
我们用串口下载代码,则配置BOOT0为1,BOOT1为0即可,如果想让STM32一按复位键就开始跑代码,则需要配置BOOT0为0,BOOT1随便设置都可以。
2、LED
图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
#include〈stm32f10x_nvic。
h〉
#include”led。
h"
voidLED_Init(void)//该函数的功能就是用来实现配置PA8和PD2为推挽输出,在配置STM32外设的时候,任何时候都要先使能该外设时钟
{
RCC->APB2ENR|=1<〈2;//使能PORTA时钟,APB2ENR是APB2总线上的外设时钟使能寄存器
RCC->APB2ENR|=1〈〈5;//使能PORTD时钟//端口时钟的配置A和D看一下寄存器APB2ENR各位的含义
GPIOA->CRH&=0XFFFFFFF0;
GPIOA—>CRH|=0X00000003;//PA8推挽输出
GPIOA->ODR|=1〈<8;//PA8输出高
GPIOD-〉CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300;//PD.2推挽输出
GPIOD-〉ODR|=1<<2;//PD。
2输出高
}
该代码里面就包含了一个函数voidLED_Init(void),该函数的功能就是用来实现配置,PA8和PD2为推挽输出.在配置STM32外设的时候,任何都要先使能该钟!
APB2ENR是APB2总线上的外设时钟使能寄存器。
#include"sys。
h"
#include"usart.h"
#include"delay。
h"
#include"led.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;
delay_ms(300);
}
}
代码先包含了”#include"led。
h"这句,使得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。
将目标文件编程下载到开发板,观察结果是否满足设计要求;
四、硬件设计
五、软件设计
#include”sys.h"
#include"usart.h”
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-〉SR&(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-〉APB2ENR|=1〈〈2;//使能PORTA口时钟
RCC—〉APB2ENR|=1〈〈14;//使能串口时钟
GPIOA—>CRH&=0XFFFFF00F;
GPIOA-〉CRH|=0X000008B0;//IO状态设置
RCC-〉APB2RSTR|=1〈<14;//复位串口1
RCC-〉APB2RSTR&=~(1<<14);//停止复位
USART1->BRR=mantissa;//波特率设置
USART1->CR1|=0X200C;//1位停止,无校验位.
#ifdefEN_USART1_RX//如果使能了接收
USART1-〉CR1|=1<〈8;//PE中断使能
USART1—〉CR1|=1<<5;//接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级
#endif
}
实训四:
外部中断实验
学生:
吴磊郑黄庆阿不力孜
指导老师:
王宜结
电子工程学院电子信息工程
一、实训目的
1.掌握STM32项目开发流程;
2。
学会画出算法流程图;
3。
掌握外部按键中断、LED的控制编程;
二、实训内容
1.按键KEY0,在中断程序中控制LED0亮;
2.按键KEY1,在中断程序中控制LED0熄灭;
三、实训要求
1。
用C语言实现算法;
2。
建立工程项目,生成目标文件;
3。
将目标文件编程下载到开发板,观察结果是否满足设计要求;
四、硬件设计
五、软件设计
#include”exti。
h"
#include"led。
h”
#include”key.h”
#include"delay。
h”
#include”usart。
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)
{
delay_ms(10);//消抖
if(KEY0==0)//按键0
{
LED0=!
LED0;
}elseif(KEY1==0)//按键1
{
LED1=!
LED1;
}
EXTI-〉PR=1<〈13;//清除LINE13上的中断标志位
EXTI—>PR=1<〈15;//清除LINE15上的中断标志位
}
//外部中断初始化程序
//初始化PA0,PA13,PA15为中断输入.
voidEXTIX_Init(void)//外部中断初始化函数
{
RCC—>APB2ENR|=1〈〈2;//使能PORTA时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
GPIOA—〉CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA—>CRL|=0X00000008;
GPIOA—〉CRH&=0X0F0FFFFF;//PA13,15设置成输入
GPIOA—>CRH|=0X80800000;
GPIOA—>ODR|=1〈<13;//PA13上拉,PA0默认下拉
GPIOA—〉ODR|=1〈<15;//PA15上拉
Ex_NVIC_Config(GPIO_A,0,RTIR);//上升沿触发
Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2
}
实训五、定时器中断实验
学生:
吴磊郑黄庆阿不力孜
指导老师:
王宜结
电子工程学院电子信息工程
一、实训目的
1.掌握STM32项目开发流程;
2。
学会画出算法流程图;
3。
掌握定时器、LED的控制编程;
二、实训内容
1.定时器2中断发生时,是使得LED0取反;
2定时器3中断发生时,是使得LED1取反;
三、实训要求
1。
用C语言实现算法;
2.建立工程项目,生成目标文件;
3。
将目标文件编程下载到开发板,观察结果是否满足设计要求;
四、硬件设计
五、软件设计
#include”timer。
h”
#include”led。
h"
voidTIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
LED1=!
LED1;
}
TIM3—>SR&=~(1〈<0);//清除中断标志位
}
voidTimerx_Init(u16arr,u16psc)
{
RCC-〉APB1ENR|=1<〈1;//TIM3时钟使能
TIM3—>ARR=arr;//设定计数器自动重装值//刚好1ms
TIM3—〉PSC=psc;//预分频器7200,得到10Khz的计数时钟
TIM3-〉DIER|=1〈<0;//允许更新中断
TIM3->CR1|=0x01;//使能定时器3
MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 报告 汇总