Stm32f103c8t6(proteus仿真)学习——6.定时器中断TIM

一、proteus原理图绘制

在这里插入图片描述
双击主控芯片 -> OSC Frequency 改成 72M
在这里插入图片描述

二、定时器代码的编写

1. timer.c文件

头文件

#include "timer.h"                  // Device header

定时器计数值的定义

extern uint16_t Time_Num ; //定时器计数值

定时器初始化函数

void Timer_Init(void){ //定时器初始化函数
	//TIM_TimeBase的结构体定义,定义一个GPIO类型的结构体,名字为TIM_TimeBaseInitStructure
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	//NVIC的结构体定义,定义一个NVIC类型的结构体,名字为NVIC_InitStructure
	NVIC_InitTypeDef NVIC_InitStructure;
	
	//开启定时器的时钟,注意是APB1(GPIO的是APB2)
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	
	//选择定时器的内部时钟源
	TIM_InternalClockConfig(TIM2);
	
	//配置定时器时基单元:TIM_TimeBase
	//选择时钟分频,可以选择1分频、2分频和4分频
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //TIM_CKD_DIV1:1分频
	//选择定时器计数方式,可选择向上计数、向下计数、中心对齐计数
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM_CounterMode_Up:向上计数
	/* 定时频率 = 72M/(PSC+1)(ARR+1) ,定时时间T=7200*10000/72M=1s  定时1s */
	//设置ARR,即定时器周期:TIM_Period,取值0-65535
	TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;
	//设置PSC,即定时器预分频器的值:TIM_Prescaler,取值0-65535
	TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;
	//高级定时器才用的到,重复计算器,先用不上赋值为0
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	//TIM_TimeBase初始化
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);
	//使能定时器 更新中断TIM_IT_Update
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//ENABLE使能
	
	//选择NVIC的中断优先级分组
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//2组,抢占优先级2位,响应优先级2位
	//一个项目只需选择一次NVIC的中断优先级分组,全项目通用
	/*   分组                 抢占优先级                  响应优先级
		  	0                 0位(取值为0)              4位(取值为0-15)
				1                 1位(取值为0-1)            3位(取值为0-7)
				2                 2位(取值为0-3)            2位(取值为0-3)
				3                 3位(取值为0-7)            1位(取值为0-1)     
				4                 4位(取值为0-15)           0位(取值为0)    */
	
	//配置NVIC
	//选择中断源,定时器2的中断源名字是:TIM2_IRQn
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	使能中断源
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	//设置抢占优先级(中断优先级分组为2组,抢占优先级2位,取值0-3)
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
	//设置响应优先级(中断优先级分组为2组,响应优先级2位,取值0-3)
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	//初始化NVIC
	NVIC_Init(&NVIC_InitStructure);
	
	//定时器TIM2使能
	TIM_Cmd(TIM2, ENABLE);
}

定时器中断函数

//中断函数名字固定,定时器2的中断函数名字是:TIM2_IRQHandler
void TIM2_IRQHandler(void){  //定时器中断函数
	//获取TIM2 更新中断TIM_IT_Update 的中断标志位
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) //如果更新中断TIM_IT_Update 的中断标志位 == SET
	{
		Time_Num ++;  //定时器的计数
		
		//清除 更新中断TIM_IT_Update 的中断标志
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	}
}

2. timer.h头文件

#ifndef __TIMER_H
#define __TIMER_H

#include "stm32f10x.h"                  // Device header
#include "delay.h"

void Timer_Init(void);
void TIM2_IRQHandler(void);

#endif

3. main.c文件

#include "stm32f10x.h"
#include  "OLED.h"
#include  "timer.h"
#include "delay.h"
uint16_t Time_Num =0 ; //定时器中断的计数值

int main(void)
{ 
	delay_init();
	OLED_Init();
	Timer_Init();
	
	OLED_ShowString(2,1,"Time_Num:"); //定时器中断TIM

	while(1){ 
			OLED_ShowNum(2, 10, Time_Num , 5);
	}		
}

4. 效果展示

定时器中断每1s中断一次,计数值加1
在这里插入图片描述

三、项目(代码+仿真)分享链接

百度网盘
链接:https://pan.baidu.com/s/1pcVtAcER2mAwnQnyRL3aXQ
提取码:p8q4

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 您好,关于stm32f103c8t6Proteus中的仿真,您可以参考以下步骤: 1. 首先,需要下载并安装STM32F1系列芯片的Proteus模型库,可以在官网或者其他网站上下载。 2. 打开Proteus软件,新建一个工程,选择STM32F103C8T6芯片。 3. 在工程中添加所需的元器件,例如晶振、电容、LED等。 4. 连接元器件,设置芯片的引脚连接。 5. 编写程序,将程序下载到芯片中。 6. 开始仿真,观察程序运行情况。 希望以上步骤能够对您有所帮助。 ### 回答2: STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,常用于工业自动化、嵌入式系统等领域。Proteus是一个虚拟电子设计和仿真软件,可以用于设计和仿真电路、PCB板、嵌入式系统等。 在Proteus仿真STM32F103C8T6,需要先添加相应的元件库和模型文件。元件库中包含了STM32F103C8T6的各种电器元件,而模型文件则描述了这些元件的物理特性和行为。 接下来,需要进行电路原理的设计和连线。在设计中要注意元件的正确连接和电气特性的符合。设计好电路原理后,就可以进行仿真试验。 仿真试验时,可以通过设置各个元件的参数、输入输出信号等来模拟真实的运行环境。在仿真过程中,可以通过监测各个元件的状态、电压、电流等参数来分析电路的性能和优化设计。同时也可以进行软件调试和测试。 总之,STM32F103C8T6Proteus中的仿真可以帮助开发人员在设计前更好地理解整个系统的工作原理和性能,同时也可以快速测试和验证自己的设计。 ### 回答3: 首先,stm32f103c8t6是一款常用的微控制器,其具备强大的处理能力,可用于各种嵌入式应用。而Proteus则是一款流行的电子设计自动化软件,能够进行仿真、测试和验证电路设计,方便设计者进行电路验证和电路分析等工作。 在进行stm32f103c8t6 Proteus仿真时,需要准备好stm32f103c8t6的芯片模型和Proteus软件。其中,stm32f103c8t6芯片模型可以从STM官方网站上下载,也可以从第三方提供的模型中获取。 在Proteus软件中,我们需要利用ISIS软件来搭建仿真电路,并用仿真器Virtual System Modeling Language (VSML) 模型来模拟stm32f103c8t6芯片在真实的电路环境中的运行情况。该仿真模型可以通过添加仿真器配置文件的方式进行添加。 在搭建完成仿真电路后,我们可以使用Proteus仿真器进行仿真,进行仿真过程中可以观察stm32f103c8t6联系其他外设的操作情况,验证电路中各个部件的功能是否正常,并采取相应的调整措施。 此外,在进行stm32f103c8t6 Proteus仿真时,还需要注意一些操作事项,如仿真器的设置、仿真电路的搭建等。只有掌握了这些技能,才能够进行高效的stm32f103c8t6 Proteus仿真,实现更加准确的电路设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值