【MCU】基于STM32CubeMX定时器中断实现LED闪烁

基于STM32CubeMX定时器中断实现 LED 闪烁

本实验基于STM32CubeMX实现对STM32开发板的配置,通过定时器中断实现 LED 闪烁。

Table of Contents

基于STM32CubeMX定时器中断实现 LED 闪烁

1. 软件与硬件

1.1 硬件要求

1.2 软件要求

2. STM32CubeMX配置开发板

2.1 Pinout & Configuration

2.2 Clock Configuration

2.3 Project Manager 

3. 程序代码

3.1 usart.c

3.2 main.c

4. 程序分析 

4.1 定时器中断逻辑

4.2 定时器周期

4.3 主要函数

 

1. 软件与硬件

1.1 硬件要求

(1)ALIENTEK ELITE STM32F103 开发板 (STM32F103ZET6 芯片)

(2)USB转TTL 模块

1.2 软件要求

(1)Java Runtime Environment (JRE) 1.8.0 版本

(2)STM32CubeMX 5.6.1 版本

(3)IAR Embedded Workbench 8.0

(4)串口调试工具

2. STM32CubeMX配置开发板

LED 0:PB5

LED 1:PE5

USART1_TX:PA9

USART1_RX:PA10

2.1 Pinout & Configuration

(1)RCC 配置

(2)GPIO 配置

 (3)NICV 配置

  (4)SYS 配置

 (5)Timers 配置

  (6)USART1 配置

2.2 Clock Configuration

2.3 Project Manager 

3. 程序代码

3.1 usart.c

实现printf的重定向

/* USER CODE BEGIN 0 */    
/******************************************************************
*@brief  Retargets the C library printf  function to the USART.
*@param  None 
*@retval None
******************************************************************/
#include "stdio.h"
    
#ifdef __GNUC__
	#define PUTCHAR_PROTOTYPE int _io_putchar(int ch)
#else 
	#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__*/
	
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}
/* USER CODE END 0 */

3.2 main.c

(1)添加头文件

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes */

(2)主函数中开启定时器中断

  /* USER CODE BEGIN 2 */
  
  HAL_TIM_Base_Start_IT(&htim2);

  /* USER CODE END 2 */

(3)中断回调函数中反转 LED 状态 

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static unsigned char ledState = 0;
    if (htim == (&htim2))
    {
        if (ledState == 0)
            HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET);
        else
            HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);
        ledState = !ledState;
    }
}
/* USER CODE END 4 */

4. 程序分析 

4.1 定时器中断逻辑

4.2 定时器周期

本实验的时钟频率为72MHz,由此可知,时钟周期为1/72MHz

Tclk:时钟频率

Tout :定时器周期

不太官方的理解,有错欢迎指正:

(Prescaler+1)x 1/Tclk 可理解为一次计数的时间,(Counter Period +1) 可理解为总的计数次数,

则不难理解,定时器周期 = 一次计数时间 x 总的计数次数。通过带入参数,可知本实验的定时器周期为 500ms。

 

4.3 主要函数

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值