stm32基础学习——定时器的使用

stm32基础学习------外部中断的使用

所有可用资源可在我的gitee仓库查找,点击即可前往

一、前言

本篇文章继续介绍stm32的一些基本使用,文章主要是介绍定时器的相关使用,咱们常用的STMF103C8T6芯片中有四个定时器,其中TIM1为高级定时器,支持互补PWM输出;TIM2~4为通用定时器。而定时器主要由四部分组成:计数器CNT、预分频器PSC、自动重载器ARR和中断函数,其中PSC用于控制计数器的计数速度,ARR用于设定计数的终点值、中断函数用于计数完成执行内容。先大概知道这些内容,更深入的原理等有需要再理解吧,废话不多说,咱们开始。

二、准备工作

硬件

  • stm32F103C8T6开发板
  • ST-LINK V2下载器一个
  • 3~5V的LED灯(发光二极管)一个
  • 杜邦线若干+面包板

软件

其他(需要自行下载,点击前往,下载template文件即可

  • stm32工程模板(由于新建模板比较麻烦,初学还是找个工程模板吧,方便点)

电路图:

三、编写代码

cpp 复制代码
#include "stm32f10x.h"

int main(void)
{
  //配置 LED的GPIO输出
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	//配置定时器(1s)
	// 中断周期=时钟频率/((RCC+1) * (PSC+1))
	//如1s的中断周期= 720000000 / ((9999 + 1) * (7199 +1)) = 1Hz=1s
	//要改成0.5s就在分母乘以2就可以,那么就把RCC设置为4999即可
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数1 2 3....
	TIM_TimeBaseStructure.TIM_Period = 9999;   //ARR配置
	TIM_TimeBaseStructure.TIM_Prescaler = 7199;  //PSC配置
	
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

	//配置NVIC
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd =  ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	//打开定时器中断
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	//开始运行定时器
	TIM_Cmd(TIM2, ENABLE);
	
	
	while(1){
		
	}
	
}

//定时器中断函数,函数名不能乱写要对应
void TIM2_IRQHandler(void){
	//实现LED灯闪烁
	if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  //清除
		
		//执行中断内容,反转LEDzhuangt
		if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_10) == 1){
			GPIO_ResetBits(GPIOB, GPIO_Pin_10);
		}else{
		  GPIO_SetBits(GPIOB, GPIO_Pin_10);
		}
	}
}

四、结束语

好了,stm32的基本使用------定时器的使用先介绍到这,后续有时间我继续更新这方面的文章,敬请期待,我是"风行男孩",咱有缘再见!(码字不易,转载请标明出处!若是文章有帮助,点个赞留个痕迹即可。)

相关推荐
nashane39 分钟前
HarmonyOS 6学习:画中画(PiP)状态同步与场景化实战指南
学习·pip·harmonyos·harmonyos 5
_李小白1 小时前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习
勤劳的进取家1 小时前
数据链路层基础
网络·学习·算法
普中科技1 小时前
【普中 51-Ai8051 开发攻略】-- 第 20 章 输入捕获实验
单片机·嵌入式硬件·输入捕获·pca·普中科技·ai8051u·aicube
d111111111d1 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
y = xⁿ3 小时前
Redis八股学习日记:布隆过滤器
数据库·redis·学习
d111111111d4 小时前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-134163842124 小时前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
charlie1145141914 小时前
通用GUI编程技术——图形渲染实战(三十八)——顶点缓冲与输入布局:GPU的第一个三角形
开发语言·c++·学习·图形渲染·win32
我想我不够好。5 小时前
监控学习 4.29 1.5hour
学习