没有合适的资源?快使用搜索试试~ 我知道了~
微处理器实验报告1
需积分: 0 0 下载量 75 浏览量
2022-08-03
15:29:40
上传
评论 1
收藏 1014KB PDF 举报
温馨提示
试读
11页
1. 实验目的 2. 目标要求 3. 实验现象 1. 实验要求 2. 实验内容 3. 目标要求 4. 实验程序 5. 实验原理 1. 打开相关外设的时钟 2.
资源推荐
资源详情
资源评论
1
微处理器实验报告
班级
姓名
学号
电气 810
聂永欣
2186113564
实验一:微处理器应用编程及基本输入/输出实验
1. 实验目的
1) 熟练掌握开发环境及 CPU、外设接口、数据的观察、调试等开发方法。
2) 通过 LED、按键,学习、掌握 I/O 的工作原理及编程、应用方法。
3) C 语言、机器指令相结合,观察指令、寄存器,理解、领会微处理器系统工作。
2. 目标要求
1) 填充学号至 sBUF,通过 8 段 LED,轮流显示自己学号各位;
2) 按下 UP 键(PA0),倒序(或暂停)显示自己学号;
3) 根据学号个位数,调整更新间隔[0.5s+学号个位*0.1s];
4) 对 sBUF 前 10 个数据累加、结果存至 sBUF[15];
5) 最后设断点,在 UP 键按下时,可暂停至断点。
3. 实验现象
图 1.1 程序界面截图
2
实验二 定时器及中断实验
1. 实验要求
1) 了解 STM32-F1 系列处理器定时器及定时中断的工作原理及编程方法
2) 编写定时中断服务程序,完成周期性工作,并为其他模块提供时间控制。
2. 实验内容
设定定时器周期,设计定时中断服务程序。以变量计数器观察其运行。
3. 目标要求
不依靠软件延时 Delay(unsigned tDly) ,在主程序实现 1Hz 及 10Hz 周期性简单处理任
务(可通过计数变量如 Cntx 观察)。
4. 实验程序
void TIM3_IRQHandler(void)
{
/* USER CODE BEGIN TIM3_IRQn 0 ¸Ã²¿·ÖÄÚÈÝ¿É×ÔÓÉÐÞ¸Ä */
static unsigned short LEDpwm;
LEDpwm++; LEDpwm%=9800;
if(LEDpwm<4900) TIM3->CCR2= LEDpwm/2+88;
else TIM3->CCR2=4900- LEDpwm/2+88;
if(LEDpwm%10==1) { epmd[50]++; epmd[46]|=0x000f;}
if(LEDpwm%100==0) {
epmd[49]++;
epmd[46]|=0x00f0; } //Set a Click Flag
if(!(GPIOE->IDR&0x08))
//PE2(down Key) push
{ if(LEDpwm%8>3) GPIOB->BSRR|=1<<5; else GPIOB->BRR|=1<<5; }
//Beep
/* USER CODE END TIM3_IRQn 0 */
HAL_TIM_IRQHandler(&htim3);
/* USER CODE BEGIN TIM3_IRQn 1 */
/* USER CODE END TIM3_IRQn 1 */
}
5. 实验原理
定时器中断:
1. 打开相关外设的时钟。以定时器 TIM3 为例,由 stm32 的时钟树可以看到,TIM3 时钟
挂接在 APB1 上面,所以打开 TIM3 时钟时使用
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE),如果其中还使用到了其他
外设,如 GPIO 等,再打开相关的外设时钟就可以了。
2. 清除中断挂起位。由于各种不可知的因素作用,在程序运行前要操作的定时器的中断挂
起位有可能会被置位,这样就会导致在程序一开始就会进入定时器中断的中断服务程序。
为了消除这种影响,我们在程序的一开始就将中断挂起位清除。在固件库中使用:
void TIM_ClearITPendingBit(TIM_TypeDef*TIMx, u16 TIM_IT)
来清除中断挂起位,该函数的具体使用参考固件库手册。
3
3. 定时器基本配置初始化。在这一步骤中主要确定定时器的预分频和设置自动重装载寄存
器周期的值,并确定计数模式,这主要使用固件库中的 TIM_TimeBaseInit()函数进行操
作,该函数的原型为:
void TIM_TimeBaseInit(TIM_TypeDef* TIMx,TIM_TimeBaseInitTypeDef*
TIM_TimeBaseInitStruct)
4. 使能定时器 TIMx。这个简单,直接函数 TIM_Cmd()函数就可以了,比如使能定时器
TIM3 外设,则可用 TIM_Cmd(TIM3,ENABLE)。
5. 使能 TIMx 中断。调用函数即可。因为我们要使用 TIM3 的更新中断, 寄存器的相应
位便可使能更新中断。 在库函数里面定时器中断使能是通过 TIM_ITConfig 函数来实现
的:
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
第一个参数是选择定时器号,这个容易理解,取值为 TIM1~TIM17;第二个参数是用来指
明我们使能的定时器中断的类型,定时器中断的;类型有很多种,包括更新中断
TIM_IT_Update,触发中断 TIM_IT_Trigger,以及输入捕获中断等等;第三个参数就很简
单了, 就是失能还是使能。
如果要使能 TIM3 的更新中断,格式为:TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );
6. 配置中断优先级,也就是配置嵌套向量终端控制器 NVIC。进行本步骤首先需要配置优
先级的分组,可以使用库函数 NVIC_PriorityGroupConfig()进行,分组的编号就是抢占优先
级的位数,然后再配置 NVIC 初始化,使用函数 NVIC_Init()进行,这个函数的原型为 void
NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
7. 编写中断服务程序。首先要清除中断挂起位,接着再编写中断处理内容即可。
6. 实验现象
图 2.1 程序界面截图 1
剩余10页未读,继续阅读
资源评论
UEgood雪姐姐
- 粉丝: 29
- 资源: 319
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功