【嵌入式07】定时器&PWM练习

一、串口定时点LED灯

之前作业中的延时功能都是通过循环、delay/Hal_delay函数等实现,本次作业通过定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。

1、定时器介绍

定时器(Timer)
人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多。人们甚至将定时器用在了军事方面,制成了定时炸弹,定时雷管。不少家用电器都安装了定时器来控制开关或工作时间。

定时器的种类有:接通延时型定时器、断开延时型定时器、保持型接通延时定时器、脉冲型定时器。

接通延时型定时器,接通延时型定时器是各种PLC中最常见最基本的定时器,这种定时器在SIEMENS的PLC中,称为SD型定时器。

断开延时型定时器,这种定时器是当输入条件00000为ON时无延时作用,只有在输入条件00000为OFF时产生延时作用。在SIEMENS的PLC中,称为SF型定时器。

保持型接通延时定时器,这种定时器是当输入条件00000为ON后,即产生锁存功能,即使输入条件00000又变为OFF,仍视输入条件为ON,当定时器的当前值等于设定值时,定时器动作,这种定时器在SIEMENS的PLC中,称为SS型定时器。

脉冲型定时器,这种定时器是当输入条件00000为ON后,定时器即时动作,但经过定时器所设定的时间后,即使输入条件00000仍为ON,定时器却变为OFF状态。即这种定时器ON状态的维持时间是由设定值决定的。如果00000为ON的时续时间小于定时器的设定值,定时器的ON状态维持时间为输入条件00000为ON的持续时间。这种定时器在SIEMENS的PLC中,称为SP型定时器。

通用定时器特点

位于ABP1低速总线上

16位向下,向上/向下(中心对齐模式)计数模式,自动重装载计数器(TIMx_CNT)

3.16位可编程(可以实现修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535任意数值

4.四个独立通道(TIMx_CH1~4),通道用来支持:
输入捕获、
输出比较、
PWM生成、
单脉冲模式输出

可使用外部信号(TIM_ETR)控制定时器和定时器互连的同步电路

定时功能:

定时/计数器说明(最高单次计时时间是71毫秒=65535*1.085us,1.085us是机器周期):
在这里插入图片描述
设置定时寄存器的工作模式:
在这里插入图片描述
向上计数模式: 计数值从0计数到自动加载值(TIM_ARR),产生一个计数溢出事件,然后重新从0开始计数

向下计数模式: 计数器从自动装入的值(TIM_ARR)开始向下计数到0,产生一个计数溢出事件,然后从计数装入值重新开始。

中央对齐模式: 计数器从O开始到(自动装入值-1),产生计数溢出事件,然后向下计数到1,产生定时器溢出事件,然后从0开始计数。

2、电路连接

LED灯长脚——+极
LED灯短脚——A1
RXD——A9
TXD——A10
3.3v—— -极
在这里插入图片描述

3、HAL库建立

点击新建工程,然后选择需要的芯片,选择具体的芯片信息,然后点击start。

配置SYS、RRC
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里笔者选择PA1作为LED灯的输出,将其选为GPIO-OUT
在这里插入图片描述
配置定时器2和定时器3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置中断
在这里插入图片描述
在这里插入图片描述
配置USART
在这里插入图片描述
时钟配置
在这里插入图片描述
设置项目名称、路径等,勾选下图的选项,然后点击创建项目。
在这里插入图片描述
在这里插入图片描述

4、编写代码

启动定时器:该函数表示启动相应的定时器,“h”表示HAL库,“tim2”表示定时器2。所以这行代码的意思就是启动定时器2和定时器3。

HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);

串口通信:在main.c中定义STM32需要给上位机发送的消息,进行串口通信,将其放入后续的定时器中断回调函数

uint8_t hello[20]="hello windows!\r\n";
HAL_UART_Transmit(&huart1,hello,20,100000);

main.c

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2022 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_NVIC_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
  uint8_t hello[20]="hello windows!\r\n";
int main(void)
{
   
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值