IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【STM32】CubeMX例程四---定时器中断(附工程源码) -> 正文阅读

[嵌入式]【STM32】CubeMX例程四---定时器中断(附工程源码)

经过多次调试,我发现Proteus 8的仿真效果并不是很理想,所以接下来的例程将改用STM32F103RCT6单片机实物进行讲解.

前期准备:

  1. STM32CubeMX
  2. STM32RCT6核心板
  3. IDE Keil(MDK-ARM)

STM32CubeMX部分


1. 配置时钟

在这里插入图片描述
选择STM32F103RCTx系列芯片,配置时钟的同时会自动配置IO口引脚
在这里插入图片描述
将HCLK设置为最大频率72MHz

2.配置TIM

在这里插入图片描述

选择:
Internal Clock(内部时钟)
Prtscaler (定时器分频系数) : 71
Counter Mode(计数模式) Up(向上计数模式)
Counter Period(自动重装载值) : 999
CKD(时钟分频因子) :No Division (不分频 )
auto-reload-preload(自动重装载) : Enable (使能)

1. 定时器溢出时间计算公式:

在这里插入图片描述
Tout:中断溢出的时间
arr:自动重装载值
psc:定时器分频系数
Tclk:时钟频率

Tout = ((71+1)*(999+1))/72 us
Tout = ( 72 * 1000 ) / 72 us
1000us = 1ms
所以这里我们的定时时间为:1ms
也就是说单片机1ms进入一次定时器中断

2. 定时器计数模式:

  1. 向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
  2. 向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
  3. 向上/向下计数模式(中央对齐模式):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
    在这里插入图片描述

2. 计数时钟:

  1. 内部时钟(TIMx_CLK)
  2. 外部时钟模式1:外部捕捉比较引脚(TIx)
  3. 外部时钟模式2:外部引脚输入(TIMx_ETR)
  4. 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

3.配置IO口

在这里插入图片描述
将PB0设置为:
低电平
Output模式
既不上拉也不下拉
响应速度低

3. 工程生成

在这里插入图片描述
工程管理依旧是这几个选项,然后GENERATE CODE,STM32CubeMX部分完成。



Keil部分

  • HAL_TIM_IRQHandler(&htim1);//定时器中断处理函数
    此函数的作用是判断中断是否正常,是哪一类定时器中断(溢出中断/捕获中断/PWM中断…),然后进入相应的中断回调函数
  • void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//定时器溢出中断回调函数
    定时器中断时,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中

点开main.c在这里插入图片描述
在如图位置上添加

HAL_TIM_Base_Start_IT(&htim1);//开启定时器1

然后再tim.c文件中,添加

/* USER CODE BEGIN 0 */
uint16_t Tim_cnt = 0;  //定时器计数
/* USER CODE END 0 */

然后在tim.c文件中重写
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)函数

在这里插入图片描述

/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (htim->Instance == htim1.Instance) 
	{
		Tim_cnt++;
		if(Tim_cnt==500)  //0.5s进行一次下列代码
		{
			Tim_cnt=0;   //清0
			HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
		}
	}
}
/* USER CODE END 1 */

设一个全局变量,每进一次中断+1,因为1ms进入一次中断,所以当Tim_cnt=500的时候(即0.5s)写入我们需要运行的代码(不要忘记清0)



编译下载时需要选择相对应的下载器,勾选以下
在这里插入图片描述
运行即可

VID


链接:本期内容Keil工程
提取码:lctq

到此本期的STMCubeMX、Keil、Proteus 8的学习到此结束啦!
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:39:31  更:2021-07-24 11:41:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 20:00:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计