嵌入式系统实验报告
更新时间:2024-05-07 04:39:01 阅读量: 综合文库 文档下载
- 嵌入式推荐度:
- 相关推荐
嵌入式系统实验报告
学 号:
姓 名:
班 级:13电子信息工程 指导老师:
苏州大学 电子信息学院
2016年12月
1
实验一:一个灯的闪烁
1、实验要求
实现PF6-10端口所连接的任意一个LED灯点亮
2、电路原理图
图1 LED灯硬件连接图
3、软件分析
RCC_Configuration(); /* 配置系统时钟 */ GPIO_Configuration(); /* 配置GPIO IO口初始化 */ for(;;) { GPIOF->ODR = 0xfcff; /* PF8=0 --> 点亮D3 */ Delay(1000000); GPIOF->ODR = 0xffff; /* PF8=1 --> 熄灭D3 */ Delay(1000000);
4、实验现象
通过对GPIOF8的操作,可以使LED3闪烁
5、实验总结
这是第一次使用STM32开发板,主要内容是对IO端口进行配置,点亮与IO端口相连接的LED灯,闪烁周期为2S。通过本实验对STM32开发板的硬件原理有了初步了解。
2
实验二:流水灯
1、实验要求
实现PF6-10端口所连接的5个LED灯顺次亮灭
2、电路原理图
图1 流水灯硬件连接图
3、软件分析
int main(void) {
RCC_Configuration();/* 配置系统时钟 */
GPIO_Configuration();/* 配置GPIO IO口初始化 */
for(;;) {
GPIOF->ODR = 0xffbf;
/* PF6=0 --> 点亮LED1 */ Delay(5000000);
GPIOF->ODR = 0xff7f;
}
/* PF7=0 --> 点亮LED2 */ Delay(5000000);
GPIOF->ODR = 0xfeff; /* PF8=0 --> 点亮LED3 */ Delay(5000000);
GPIOF->ODR = 0xfdff; /* PF9=0 --> 点亮LED4 */ Delay(5000000);
GPIOF->ODR = 0xfbff;
/* PF10=0 --> 点亮LED5 */ }
4、实验现象
LED1~LED5依次点亮,亮灭的时间间隔都为1S。
5、实验总结
本次实验对STM32开发板的GPIO端口进行进一步学习,通过程序可以实现流水灯的闪烁。
3
实验三:单级外部中断
1、实验要求
按下某个按键,触发中断,中断服务程序改变LED灯状态
2、电路原理图
图3 SW1硬件原理图
3、软件分析
int main() {
RCC_Configuration(); GPIO_Configuration(); GPIO_Write(GPIOF,0xffff); Delay(5000); while(1) { }
/* 配置系统时钟 */ /* IO口初始化 */ /* 全灭 */
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==0) /* 如果SW1 PA8=0 */ { GPIO_SetBits(GPIOF, GPIO_Pin_6); /* LED1点亮 */ Delay(0x1FFFFF); GPIO_ResetBits(GPIOF, GPIO_Pin_6); /* LED1 熄灭 */ Delay(0x1FFFFF); } }
4、实验现象
原来5个LED灯都处于熄灭状态,按下SW1,触发中断程序,LED1点亮。
5、实验总结
通过本次实验,可以对某一状态通过外部中断,改变其当前状态。
4
实验四:多中断嵌套
1、实验要求
按下某个按键,触发中断,中断服务程序改变LED灯状态
2、电路原理图
图4 SW1,SW2,SW3硬件原理图
3、软件分析
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; //设定中断源为PA0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //中断占优先级为0 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; //设定中断源为PD3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中断占优先级为1 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //设定中断源为PA8 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //中断占优先级为2 void EXTI0_IRQHandler(void) {
int i=0;
if(EXTI_GetITStatus(EXTI_Line0) != RESET) {
for(i=0;i<10;i++) {
GPIO_Write(GPIOF,0xffff);
GPIO_SetBits(GPIOF, GPIO_Pin_6); /* LED1 点亮 */ Delay(0x5fFFFF);
GPIO_ResetBits(GPIOF, GPIO_Pin_6);/* LED1 熄灭 */ Delay(0x5fFFFF);
EXTI_ClearITPendingBit(EXTI_Line0); } } }
void EXTI3_IRQHandler(void) if(EXTI_GetITStatus(EXTI_Line3) != RESET) { { int i=0; for(i=0;i<10;i++)
5
{
GPIO_Write(GPIOF,0xffff);
GPIO_SetBits(GPIOF, GPIO_Pin_7); /* LED2 点亮 */
Delay(0x5fFFFF);
GPIO_ResetBits(GPIOF, GPIO_Pin_7);/* LED2 熄灭 */
Delay(0x5fFFFF);
EXTI_ClearITPendingBit(EXTI_Line3); } } }
void EXTI9_5_IRQHandler(void) {
int i=0;
if(EXTI_GetITStatus(EXTI_Line8) != RESET) {
for(i=0;i<10;i++) {
GPIO_Write(GPIOF,0xffff);
GPIO_SetBits(GPIOF, GPIO_Pin_8); /* LED3 点亮 */
Delay(0x5fFFFF);
GPIO_ResetBits(GPIOF, GPIO_Pin_8);/* LED3 熄灭 */ Delay(0x5fFFFF);
EXTI_ClearITPendingBit(EXTI_Line8); } } }
4、实验现象
中断优先级从高到低依次为:SW3,SW2,SW1
原来5个LED灯都处于熄灭状态,按下SW1,LED3应该闪烁10次,当其闪烁5次后按下SW2,LED2也应该闪烁10次,当其闪烁4次后按下SW3,LED1也应该闪烁10次,则当LED1闪烁完10次后,LED2继续闪烁6次,之后LED1继续闪烁5次。
5、实验总结
通过本次实验,可以对LED状态实行中断嵌套,由以上实验现象,得出以下结论:高中断优先级可以打断低优先级,中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,反之,低中断优先级不可以打断高优先级。
实验五:TIM2的基本应用
1、实验要求
TIM2定时器将LED灯定时点亮和熄灭一定的时间
2、电路原理图
6
3、软件分析
TIM_Cmd(TIM2, ENABLE); /* TIM2 enable counter */ TIM_TimeBaseStructure.TIM_Period = 1999;
TIM_TimeBaseStructure.TIM_Prescaler = 35999; //定时时间为1s void TIM2_IRQHandler(void) {
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
GPIO_WriteBit(GPIOF, GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6))); }
4、实验现象
LED1灯按照1S的定时时间不断闪烁
5、实验总结
通过本次实验,可以实现对LED灯进行定时控制其闪烁,而不需要延时函数控制了,定时时间较为精准。
7
实验六:TIM2,TIM3,TIM4多定时器的应用
1、实验要求
利用TIM2,TIM3,TIM4定时器使LED灯以不同的频率闪烁
2、电路原理图
3、软件分析
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; 此处比上一个实验增加了2个定时器,同时又增加了一个优先级
4、实验现象
中断优先级从高到低依次为:TIM2,TIM3,TIM4
首先LED1以1S的定时时间闪烁5次,之后LED2以2S的定时时间闪烁5次, 最后LED3以3S的定时时间闪烁5次
5、实验总结
利用定时器可以同时使LED灯按照不同的频率闪烁,但是为了现象明显,可以加一个优
8
先级,分别观察现象。
实验七:串口USART1读取CPU的ID号
1、实验要求
通过USART1读取 CPU 的 96 bit ID
2、电路原理图
图 开发板USART原理图
3、软件分析
void Get_ChipID(void) /* 获取芯片ID */ {
ChipUniqueID[0] = *( u32 *)(0X1FFFF7F0); /* 高字节 */ ChipUniqueID[1] = *( u32 *)(0X1FFFF7EC);
ChipUniqueID[2] = *( u32 *)(0X1FFFF7E8); /* 低字节 */ }
void USART_Configuration(void) {
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_TXE, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_ClearFlag(USART1, USART_FLAG_TC); USART_Cmd(USART1, ENABLE); /* Enable USART1 */ }
4、实验现象
PA9连接的是USART1 Tx,PA10连接的是USART1 Rx,再通过串口调试助手就可
9
以在电脑上面显示出CPU的ID以及flash容量大小。
5、实验总结
本次实验实现了串口和PC机的传输,可以通过USART1将CPU的ID在电脑上显示出来。
实验八:异步通信USART2的重映射
1、实验要求
实现异步通信USART2的重映射,将数据传送到PC机上
2、电路原理图
图 开发板USART原理图
3、软件分析
void GPIO_Configuration()
10
/* IO口初始化 */
{
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; /* USART2 Tx --> PD05 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /* PD05 --> JP7 WR */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; /* USART2 Rx --> PD06 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); }
该程序将USART2重映射到PD05,PD06引脚
4、实验现象
PD05连接的是USART2 Tx,PD06连接的是USART2 Rx,通过串口调试助手就可以在电脑上面显示Program Running!
5、实验总结
通过本次实验,可以实现对异步通信USART2的重映射,再通过串口调试助手在电脑上显示出来。
11
{
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; /* USART2 Tx --> PD05 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /* PD05 --> JP7 WR */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; /* USART2 Rx --> PD06 */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); }
该程序将USART2重映射到PD05,PD06引脚
4、实验现象
PD05连接的是USART2 Tx,PD06连接的是USART2 Rx,通过串口调试助手就可以在电脑上面显示Program Running!
5、实验总结
通过本次实验,可以实现对异步通信USART2的重映射,再通过串口调试助手在电脑上显示出来。
11
正在阅读:
嵌入式系统实验报告05-07
新标准大学英语综合教程1 unit4 unit test答案06-29
2022年鲁东大学艺术学院825外国美术史考研强化五套模拟题04-09
公司股东合伙协议范本03-17
神奇的鸡蛋壳作文400字06-15
巧记单词,词缀词根记忆法(2)05-20
中医治肿瘤,早介入更放心07-03
都是挑食惹的祸作文600字06-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 嵌入式
- 实验
- 报告
- 系统
- 堤防施工组织设计
- 2018年高考浙江卷化学试题(含答案4月选考)
- 电影的社会作用
- 操作系统实验报告(贪吃蛇游戏)
- 徐霞客
- 织造学课件
- 江苏省化学小高考常考必背知识点汇总
- crystal maker 教程
- 中考地理模拟试题 - 图文
- 开发区机器人及智能装备产业调研报告
- 历年大学英语四级翻译真试题及范文答案2013、2014、2015、2016
- 第一章 热力学第一、二定律试题及答案
- 东北师范北理工《刑法学》在线作业
- 尔雅通识课社会心理学2016年6月期末考试
- 反常积分与级数 2(1)
- 河道治理汇报材料(精选多篇)
- 北京市朝阳区2015届九年级5月综合练习(一)物理试题
- 考研英语长难句(上)
- 硬笔书法课时安排
- 2:龙门吊基础设计计算正文