蓝桥杯嵌入式(STM32G431RBT6)入门第四天——系统嘀嗒定时器(SysTick)|CSDN创作打卡
和往常一样,先建立SysTick定时器练习文件夹,并在里面建立SysTick_test和SysTick两个子文件夹。
STM32的通用定时器是通过一个可编程预分频器(Prescaler)驱动的16位自动重装主计数器(Counter Period)构成。可以对内部时钟或触发源以及外部时钟或触发源进行计数。
定时器发生中断时间的计算方法:
查找资料可知:定时时间 = (Prescaler + 1)x (Counter Period + 1) x 1/定时器时钟频率
比如时钟信号1KHz,Prescaler为9,Counter Period为999,定时时间为10s。
蓝桥杯嵌入式比赛一般要把时钟信号设置为80MHz,下面我们就此频率实现三个功能:
1.利用TIM2实现间隔定时,每隔0.3秒将LED1的状态进行翻转。
2.利用TIM3实现间隔定时,每隔1秒将LED4的状态进行翻转。
3.修改TIM3的初始化代码,修改为每隔0.5秒将LED4的状态进行翻转。
下面打开STM32CubeMX进行配置,我们需要初始化的LED1和LED4,对应的IO口为PC8和PC11,以及LE对应的PD2。
首先将两个时钟都打开。
再去配置对应的GPIO口,将PC8、PC11和PD2设置为推挽输出,PC8、PC11初始化为高电平,这样上电LED不会亮,PD2初始化为低电平,这样上电不会对LED有任何的控制。
下面开始配置时钟树,按照下图中的数据进行修改,配置成80MHz。
下面开始配置TIM2和TIM3,根据给定的要求结合计算公式,TIM2的Prescaler需要设置为(8000-1)即7999, Counter Period需要设置为(3000-1)即2999。
TIM3的Prescaler需要设置为(8000-1)即7999, Counter Period需要设置为(10000-1)即9999。
下面在左侧Timers下拉,对TIM2和TIM3按照计算数据进行配置。
配置完成后不要忘记使能中断。
下面依旧是到了对工程的配置阶段,按照下图进行对应修改即可。
完成后即可生成代码。打开工程,首先把启动文件添加进工程,然后进行编译。
打开stm32g4xx_it.c找到下图框中的函数并按F12进入查看函数内部。
会跳转到stm32g4xx_hal_tim.c中void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)函数,继续向下翻找到第二张图①号框对应的回调函数HAL_TIM_PeriodElapsedCallback(htim);并按F12进入到函数内部,此函数是需要我们自行编写内部内容的(即需要完成的功能)。
跳转的内容如下,此函数是一个虚函数,如果检测到在别的地方用户定义了此函数则会执行用户定义的函数而不会执行下图中的虚函数,所以我将此函数复制到主函数进行编写 ,方便后面的代码编写。
编写代码的位置及内容如下:其中HAL_GPIO_TogglePin()函数的功能就是实现GPIO端口电平的翻转。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if(htim->Instance == TIM2){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}if(htim->Instance == TIM3){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_11);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}}
下面需要在main函数中打开定时器,需要找到如下的函数:
在stmg4xx_hal_tim.h中找到 HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
并在主函数的如下位置处打开TIM2和TIM3。
编译好代码,设置好下载器,将代码下载进入开发板即可实现现象。
下面继续打开tim.c,找到 void MX_TIM3_Init(void)函数,将里面的htim3.Init.Period值修改为4999即可实现0.5秒的LED4状态改变。
蓝桥杯嵌入式(STM32G431RBT6)入门第四天——系统嘀嗒定时器(SysTick)|CSDN创作打卡相关推荐
- LED及LCD冲突问题解决及LCD的驱动改进(蓝桥杯嵌入式stm32G431RBT6)
问题描述: 由于LED和LCD有共用引脚.导致调用LCD显示时会修改LED所用gpio的引脚值,导致LED混乱. 解决方法: static int x=0x00; static unsigned ch ...
- 蓝桥杯嵌入式STM32G431——第九届省赛真题电子定时器
第九届省赛真题电子定时器 第九届省赛真题 主函数代码(不包含各模块初始化代码) 按键模块与LCD模块的逻辑图(仅供参考) 第九届省赛真题 主函数代码(不包含各模块初始化代码) #include &qu ...
- 【STM32G431RBT6】蓝桥杯嵌入式 ADC采样DMA传输配置
一.介绍 蓝桥杯嵌入式开发板使用的是STM32G431RBT6,这个G系列的mcu使用STM32cubemax配置的时候和普通的F系列不太一样. 二.原理图 同时开发板预留了两个adc采样通道,分别是 ...
- STM32G431-基于HAL库(第十四届蓝桥杯嵌入式模拟题2)
文章目录 前言 一.CubeMX配置(第十四届模拟题2完整版) 二.代码相关定义.声明 1.函数声明 2.宏定义 3.变量定义 三.主要函数 1.按键扫描 2.各参数控制 3.LCD显示 4.输出信号 ...
- 突击蓝桥杯嵌入式(四)——滴答定时器、按键的三行代码消抖、LCD与ADC
突击蓝桥杯嵌入式(四)--滴答定时器.按键的三行代码消抖.LCD与ADC 1.滴答定时器定时运行 我们利用滴答定时器,让LED每隔1s闪烁一次 //首先我们定义一个变量 __IO uint32_t u ...
- 【STM32G431RBTx】备战蓝桥杯嵌入式→扩展模块→DHT11
文章目录 前言 一.软件准备 二.DHT11 1.扩展板上模块的原理图以及我们需要配置的元素 2.CubeMx的配置步骤 3.代码修改以及应用 方法1.以移植F103驱动包为方法 ①.在工程中添加大赛 ...
- 蓝桥杯嵌入式CT117E-M4学习笔记02-STM32G431RBT6芯片学习
文章目录 前言 一.芯片简介 二.时钟学习 三.SRAM学习 四.总线矩阵学习 五.GPIO学习 总结 前言 首先学习了解一下蓝桥杯嵌入式CT117E-M4开发板的主控芯片STM32G431RBT6, ...
- 第九届蓝桥杯-嵌入式比赛体会与备赛经验
原文地址:http://www.cnblogs.com/NickQ/p/8721317.html 说起蓝桥杯,相信很多电子类的学生,应该很熟悉了吧...上周日,我也去湖北工业大学参与了一下.说起这次经 ...
- 蓝桥杯嵌入式CT117E硬件开发平台经验分享11 | 第九届蓝桥杯国赛题
基于 基于 CT117E 嵌入式竞赛板 嵌入式竞赛板 的 "电子秤"程序设计与调试 赛题硬件框图 由于赛题细节多,赛题PDF要求书放入了附件,链接后续加入.本文主要讲述本届题目的困 ...
最新文章
- 回到intellij的初始界面
- AsyncTask的基础讲解
- 掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇
- 信息传输计算机服务业,信息传输软件和信息技术服务业包括哪些
- intellij Find Usage 查找符号使用快捷键alt + f7在ubuntu下无法使用的解决方法
- 开课吧:大数据时代,数据分析的特点是什么?
- 2018/12/04 PAT刷题 L1-008 求整数段和 java
- ARM开发7.5.2 基础实训( 6 ) 4×4 矩阵键盘和 2 路 LED 显示系统( 2 )--LPC21XX
- 共享单车信号服务器,【严肃科普】【严肃科普】共享单车靠什么黑科技远程定位开锁?...
- 语言代号/地区代号/国家代号
- ADODB.Stream
- vscode vim插件(updating)
- 六级(2020/12-2) Section B
- 关于欧拉四面体公式的推导及证明过程
- Message类的Msg属性所关联的所有ID
- nodejs实现读取本地目录生成文件树
- linux键盘错位1格,键盘按键错乱,教您修复键盘按键错乱的方法
- SharpDevelop浅析_1_AddInTree
- Linux操作系统安装及服务控制
- 关于惠普(hp)电脑的风扇过响问题
热门文章
- Smartbi“三步走”构建智慧经营分析平台,实现国有企业监管报送和数智化转型
- java家电网站_基于jsp的家电销售网-JavaEE实现家电销售网 - java项目源码
- html5给div设置单边界,纯CSS实现border的0.5px设置
- 学生宿舍管理系统接口文档
- 打造世界巨龙时代6.95护肝器
- Python: 从字典中提取子集--字典推导
- 拥有成长思维,扩大舒适圈,获得不断成长
- 【超好懂的比赛题解】HNCPC Multi-university Training Round3 比赛题解
- java卡布列克运算_求验证卡布列克运算的代码及详解
- 常用的RPM软件包命令,常用的Yum软件仓库命令