当前位置: 首页 > news >正文

STM32G030C8T6:定时器1ms中断(以64MHz外部晶振为例)

本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考;

本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过定时器3 每秒中断控制 PB9 引脚输出高低电平,从而实现 LED 灯的亮灭。
原理:通过配置定时器3每1mS进入中断一次,每进入中断服务程序一次,增加一次计数,计数到达500,控制PB9引脚输出高或低电平,从而实现1S钟周期闪烁。。
涉及到的知识:配置UART引脚,定时器中断,STM32CubeMX的使用

文章目录

  • 1 新建工程
  • 2 配置SWD下载引脚
  • 3 配置GPIO输出
  • 4 配置RCC
  • 5 设置系统主频
  • 6 定时器配置
    • 6.1 错误配置记录
    • 6.2 正确配置
  • 7 生成工程
  • 8 增加代码实现每1S 控制PB9 引脚输出高或者低电平

1 新建工程

点击File 菜单下的New Project

在这里插入图片描述

选择芯片型号,如下图所示先输入芯片型号,目前这边输入STM32G030C8,

在这里插入图片描述

双击选择,就确定了芯片型号,界面会变成如下图所示

在这里插入图片描述

2 配置SWD下载引脚

如下图所示,在Pinout&Configuration 栏目的System Core 下,先点击SYS,再勾选Serial Wire 框,
配置好SWD 下载引脚设置:

在这里插入图片描述

3 配置GPIO输出

按下图 的1,2,3 步骤完成PB9 引脚配置成GPIO 输出设置:

在这里插入图片描述

配置成功后如下图所示:
在这里插入图片描述

4 配置RCC

如下图,先点击RCC,在HSE 配置中选择Crystal/Ceramic Resonator 外部晶振设

在这里插入图片描述

5 设置系统主频

如下图, 先点击Clock Configuration 栏目,按下图的1,2,3,4 步骤完成系统64MHZ 主频设置:

在这里插入图片描述

6 定时器配置

6.1 错误配置记录

如下图的1,2,3,4 步骤完成定时器1ms 计时:
(注意,这里我踩了一个坑,误以为Clock source中的Internal Clock为内部时钟,而我是使用的外部晶振,所以我一直选择了第二个选项ETR2。其实第二个选项是ETR2 外部触发输入(ETR)(仅适用TIM2,3,4),意思外接界的其他信号源;正确的应该是:外部晶振也是internal clock ,相当于使用外部时钟分频来的时钟,只要你rcc配置的是外部晶振就没事),所以下面的示例是错误的,正确过程请参考6.2
在这里插入图片描述

ETR2 外部触发输入(ETR)(仅适用TIM2,3,4),意思外接界的其他信号源。

如下图所示完成TIM3 中断使能:

在这里插入图片描述

6.2 正确配置

如下图的1,2,3,4 步骤完成定时器1ms 计时:
在这里插入图片描述
因为我们选择的是64MHz的外部时钟,64分频,1000计数时,1ms产生一次中断。
上图中各个参数的计数以及计数器周期计算方法如下:

Clock Source(时钟来源) :本文中使用的64MHz外部晶振也要使用Internal Clock
计数器设置:
Prtscaler (定时器预分频系数) : 63
Counter Mode(计数模式) : Up(向上计数模式)
Counter Period(自动重装载值) : 999
CKD(时钟分频因子) : No Division 不分频 (可以选择二分频和四分频 )
auto-reload-preload(自动重装载) : Disable 不使能
定时器的定时周期计算方法:
T = (psc+1)(arr+1)/Tclk 其中psc 为定时器预分频系数 arr为自动重装载值 Tclk为系统时钟频率
通过计算 T = (psc+1)(arr+1)/Tclk=(63+1)(999+1)/64us=1000us=1ms

因此实现了1ms中断。

如下图所示完成TIM3 中断使能:

在这里插入图片描述

7 生成工程

按照下图的步骤,进行项目配置,项目名称和路径设置等,生成项目的类型选择STM32CubeIDE(我这里以STM32CubeIDE为例,如果你要试用keil5,那就选择MDK-RAM,如果要使用makefile,就选择Makefile),注意项目名称和路径不要有中文名;
在这里插入图片描述

最后全部设置完毕后点击create code,生成项目代码:

在这里插入图片描述

生成的工程如下图所示:
在这里插入图片描述

8 增加代码实现每1S 控制PB9 引脚输出高或者低电平

如下图,如箭头所示实现1ms 中断回调函数中实现计数到500ms 后PB9 翻转输出,

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//1ms中断回调函数
{TimeCounter++;if(TimeCounter>=500)//500ms时间到{TimeCounter=0;HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);//LED反转输出}
}

在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/305918.html

相关文章:

  • 人工智能聊天机器人如何帮助您实现工作与生活的平衡
  • 3分钟看懂设计模式01:策略模式
  • 数据结构与算法:算法详解
  • AOSP10 替换系统launcher
  • 视频互动游戏如何暴打海王和舔狗
  • 大学生多媒体课程学习网站thinkphp+vue
  • 信息系统项目管理师论文分享(质量管理)
  • Redis实现滑动窗口限流
  • SQL Server查询计划(Query Plan)——XML查询计划
  • 【day02】每天三道 java后端面试题:Java、C++和Go的区别 | Redis的特点和应用场景 | 计算机网络七层模型
  • 【Flink状态管理(八)】Checkpoint:CheckpointBarrier对齐后Checkpoint的完成、通知与对学习状态管理源码的思考
  • 防御保护第八、九、十、十一天笔记
  • 【TypeScript基础知识点】的讲解
  • 牛客周赛 Round 34 解题报告 | 珂学家 | 构造思维 + 置换环
  • LeetCode13 罗马数字转整数
  • 【Hudi】Upsert原理
  • 信息系统服务:演绎数字时代的征程
  • rust连接postgresql数据库
  • [面试] 什么是死锁? 如何解决死锁?
  • 网络原理 HTTP _ HTTPS
  • 软件实际应用实例,茶楼收银软件管理系统操作流程,茶室计时计费会员管理系统软件试用版教程
  • 网络安全“三保一评”深度解析
  • IDA使用-2023CICSN华中赛区pwn题逆向为例
  • 安装虚拟机出现的一些问题
  • Git+py+ipynb Usage
  • eBPF实践篇之环境搭建
  • 机器学习科普及学习路线
  • 如何在本地电脑部署HadSky论坛并发布至公网可远程访问【内网穿透】
  • Spring Boot 笔记 025 主界面
  • (done) Positive Semidefinite Matrices 什么是半正定矩阵?如何证明一个矩阵是半正定矩阵? 可以使用特征值