文章目录

  • 前言
  • 一、设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”
    • 1、创建工程项目
    • 2、项目配置
    • 3、代码编写
      • 1、重定向printf函数
      • 2、定时器代码
    • 4、效果
  • 二、设置一个2秒的定时器,让LED等周期性地闪烁
    • 1.项目配置
    • 2、代码编写
    • 3、效果
  • 三、总结
  • 四、参考资料

前言

  • 硬件:stm32f103c8t6 核心板
  • 软件:STM32CubeMX 6.4.0
  • 软件:keil5 mdk
  • 软件:野火串口调试助手

一、设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”

之前一般使用delay函数实现延时,这让CPU停下来等待时间,这样极大的浪费了资源。我们可以设置定时器,解放COU,让它去忙别的事,到时间再回来处理这边的时间,资源的利用率更大。

1、创建工程项目

  • 选择STM32C8T6型号。

2、项目配置

  • SYS设置,选择Serial Wire模式。

  • 时钟RCC配置,将HSE选为外部晶振模式

  • 设置USART
  • 时钟树设置
  • 定时器设置

分频系数由于系统处理的时候会自动加上1,于是我们填71。由于时钟树我们上面配置为72MHZ,所以72分频后得到1MHZ的时钟。1MHZ的时钟,计数5000次,得到时间5000/1000000=0.005秒。也就是每隔0.005秒定时器2会产生一次定时中断。

  • 开启定时器的中断

  • 设置优先级

设置工程路径、工程名,最后导出文件。
可参考:https://blog.csdn.net/qq_52215423/article/details/127516169?spm=1001.2014.3001.5501

3、代码编写

1、重定向printf函数

分别在main.c和usart.c文件添加头文件

#include "stdio.h"

keil配置允许重定向


在main.c文件中重写printf函数:

int fputc(int ch, FILE *f){HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;}

2、定时器代码

在main函数里添加下面这句语句用于开启定时器

  HAL_TIM_Base_Start_IT(&htim2);

定义一个全局变量

  unsigned int flag = 1;

在while里添加输出语句

if(flag == 1){      printf("Hello windows! \r\n");flag=0;}

重写定时器的中断回调函数,当产生定时中断的时候,会自动调用这个函数。因为上面我们设置了一次中断的时间为0.005秒,所以我们需要1000次中断才满足5秒。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static uint32_t time_cnt =0;if(htim->Instance == TIM2){if(++time_cnt >= 1000){time_cnt =0;if(flag==0)flag=1;elseflag=0;}}
}

4、效果

编译烧录成功后的效果如下:

20221102_213840

二、设置一个2秒的定时器,让LED等周期性地闪烁

上面已经写了创建项目流程,就不再赘述,直接进行项目配置。

1.项目配置

  • SYS设置,选择Serial Wire模式。

  • 时钟RCC配置,将HSE选为外部晶振模式

  • 时钟树设置

  • 配置IO管脚,用于输出LED电平,这里选择PC14.

  • 定时器设置

  • 开启定时器的中断

  • 设置优先级

    设置工程路径、工程名,最后导出文件。

2、代码编写

  • 在main函数里添加启动定时器2的语句:
HAL_TIM_Base_Start_IT(&htim2);
  • 重写定时器的中断回调函数

由于前面的时钟树的设置可知,每次的中断时间为0.005秒,于是400次的中断等于2s,符合我们的要求

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static uint32_t time_cnt =0;if(htim->Instance == TIM2){if(++time_cnt >= 400){time_cnt =0;HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);}}
}
  • 编译烧录均无问题。

3、效果

VID_20221102_200720


三、总结

通过定时器的TImer方式极大的利用了CPU资源,并且STMCube也构建好了许多库,可以直接对定时器进行操作,方便了许多。

四、参考资料

http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/

通过定时器的Timer方式替代delay/Hal_delay函数进行定时相关推荐

  1. 【嵌入式系统开发15】STM32F103C8T6下通过定时器Timer方式实现时间的精准控制,实现串口通信并让LED等周期性地闪烁

    本文目的是主要介绍通过STM32F103C8T6采用定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务.请设置一个5秒的 ...

  2. 用定时器Timer方式实现LED周期性闪烁

    文章目录 一.环境配置 二.定时器简介 三.用STM32CubeMX配置工程 四.用Keil配置代码 五.运行效果 六.总结 七,参考资料 一.环境配置 软件:STM32CubeMX:6.6.1 Ke ...

  3. 定时器new Timer().schedule()的使用

    文章目录 一.基础知识 1. 简介 2. 常用API 二.需求案例 2.1. 案例1 2.2. 案例2 2.3. 案例3 三.场景案例 3.1. 在特定时间执行任务,只执行一次 3.2. 指定第一次执 ...

  4. Arduino ESP32 通过定时器(Timer)功能唤醒深度睡眠

    Arduino ESP32 通过定时器(Timer)功能唤醒深度睡眠 通过定时器功能,设置5秒,时间到就唤醒深度睡眠 实例代码 /*通过定时器功能唤醒深度睡眠(设置为5秒) */#define uS_ ...

  5. 定时器(Timer)

    1.时钟 时钟就是一个可以产生周期性信号的设备. 时钟信号就是周期性变化的信号. T:时钟周期 最小重复的信号单元的时间长度,基本单元为s(秒) F:时钟频率 1s内有多少个重复的信号单元,单位为Hz ...

  6. Android中定时器实现的方式对比

    在android中经常需要定时循环执行某一段代码,大家首先想到的是Timer,在一般的场合下,Timer和TimerTask可以完全胜任,但是在有些情况下,Timer就不能很好的完成定时循环任务,如与 ...

  7. 利用定时器0工作方式1——独立按键控制流水灯模式

    目录 1.前言 1.1 项目资源 1.2 实验现象 2.定时器/计数器 2.1定时器/计数器0&1的相关寄存器 2.2定时器的工作方式(总结) 3.中断系统 3.1中断概念 3.2中断流程: ...

  8. Java定时器(Timer)

    1.介绍 Timer和TimerTask是用于在后台线程中调度任务的java util类.简单地说,TimerTask是要执行的任务,Timer是调度器. 2.调度一次性任务 2.1 指定延迟后执行 ...

  9. 定时器0工作方式2,定时1s

    定时器0工作方式2,定时1s

最新文章

  1. softmax layer 简单理解以及实际例子【有白话讲解】
  2. android 课程——样式
  3. 化浆池是什么东西_头次见聪明人在阳台上砌洗衣池,开始被人笑话,装完都跟着学...
  4. Redis Lua脚本中学教程(下)
  5. mysql 连接超时 wait_timeout interactive_timeout 简介
  6. ubuntu pdf转jpg或txt
  7. 6升小米6——算法解题
  8. 2022年企业微信生态研究报告
  9. Node.js 的Web 服务器--Fenix
  10. WMS软件国内主要供应商分析
  11. python 中文字符串 编码转换_Python合集之Python字符串编码转换
  12. python气象卫星云图解析_零基础python效率提升资源汇总
  13. 广东诚美计算机专修学院面试,三下乡|一轮面试,与你不期而遇
  14. 大三如何找暑期技术实习?技术实习找大公司还是小公司?
  15. 资源吧网站模板下载织梦cms精仿资源吧网站模板
  16. 装出一个好的WIN2000最经典的步骤
  17. java txt文件追加_java如何追加写入txt文件
  18. C++的学习之路---12
  19. ABeam中国2022社招 | ABeam旗下艾宾信息技术开发(大连) 最新招聘信息
  20. PHP商城 商品模块 数据库 表设计

热门文章

  1. 理解 multipart/form-data 请求
  2. Debian9+openmediavault4搭建全纪录
  3. 东北林业大学林学院及园林学院相关调查
  4. Random Forest随机森林
  5. 海外中国留学生应为国争光保持诚信,和中提醒,海外中国留学生心中都应有本“诚信账”
  6. billion laughs attack
  7. 选择美国主机的机房地理位置、网络分析及相关主要机房服务商
  8. Anaconda Tutorial
  9. 神经网络技术是啥意思,神经网络是啥意思
  10. 难得一遇的5G大屏手机 荣耀X10 Max配置分析