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

STM32F429I-DISC1【板载LED呼吸灯】

一、硬件介绍

本次开发使用的是STM32F429I-DISC1开发板,是基于STM32F429ZIT6U的MCU,具有Arm Cortex-M4内核,配备2.4英寸QVGA TFT LCD、64-Mbit SDRAM、ST-MEMS陀螺仪(I3G4250D)、USB OTG接口(Micro-USB)、6个LED灯 和 2个按键(User / Reset),带有ST-LINK/V2-B,支持Mbed,同时具有虚拟串口和U盘功能。

LD1:用于USB串口通信 (默认状态 / 通讯

LD2:电源Power指示灯

两个用户LED:LD3 (PG13)LD4 (PG14)

两个USB_OTG LED:LD5LD6(红色 / 过流指示灯)

USER_Button / WAKE-UP Button:PA0

原理图:
在这里插入图片描述
在这里插入图片描述

二、功能实现思想

实现效果:通过控制板载的LED亮度随时间逐渐增强再逐渐衰减,以实现呼吸灯的效果;

板载LED:其中能自定义控制的LED灯有两个用户LEDLD3 (PG13)LD4 (PG14)

LD3、LD4对应的引脚并没硬件定时器功能;

主要实现方法:

1、定时器中断模拟PWM

2、SysTick中断模拟PWM

本次采用通过SysTick定时器来改变LED亮度;
SysTick定时器是存在于系统内核的一个滴答定时器;

在这里插入图片描述

SysTick 定时器

此定时器专用于实时操作系统,但也可用作标准递减计数器。
24位递减计数器
• 自动重载功能
• 当计数器计为 0 时,产生可屏蔽系统中断
• 可编程时钟源。

当SYSTEM_CLOCK为100MHz下,SysTick最短定时计算:
最短定时时间=1SysTick时钟频率=1100,000,000Hz=10ns最短定时时间= \frac{1}{SysTick时钟频率} = \frac{1}{100,000,000Hz} = 10ns 最短定时时间=SysTick时钟频率1=100,000,000Hz1=10ns

因此,可以配置为1us用于定时;

在这里插入图片描述

三、功能实现步骤

在上次例程的基础上更改为Task_2.ioc,并打开项目继续进行相关配置;

1、配置LD3、LD4引脚
在这里插入图片描述

2、配置NVIC优先级
在这里插入图片描述

3、打开生成好的项目代码

编写相关主要代码

main.c:/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */void SysTick_Init(void){//计数值配置if (HAL_SYSTICK_Config(SystemCoreClock / 1000000U))   //1us{printf("SysTick_Init ERROR\r\n");}}volatile uint32_t pwm_duty = 0;   
volatile int8_t  direction = 1;  // +表示增加亮度, -表示减小亮度  线性呼吸灯static uint32_t counter = 0;
const uint32_t pwm_period = 1000;   // T = pwm_period * 1us *  (direction * pwm_period * 2)void Pwm_Led(void) {counter++;if (counter >= pwm_period) {    // t = pwm_period * 1us = 1ms 改变一次占空比counter = 0;// 更新PWM占空比 T = 2 * direction * pwm_period * tpwm_duty += direction;// 改变方向 direction * pwm_period * tif (pwm_duty >= pwm_period) {   pwm_duty = pwm_period;direction *= -1;    // -} else if (pwm_duty <= 0) {pwm_duty = 0;direction *= -1;    // +}}// 根据当前占空比控制LEDif (counter < pwm_duty) {HAL_GPIO_WritePin(GPIOG, LD3_Pin|LD4_Pin, GPIO_PIN_SET);} else {HAL_GPIO_WritePin(GPIOG, LD3_Pin|LD4_Pin, GPIO_PIN_RESET);}
}/* USER CODE END 0 */int main(void)
{HAL_Init();SystemClock_Config();SysTick_Init();MX_GPIO_Init();MX_USART1_UART_Init();while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
stm32f4xx_it.c:/*** @brief This function handles System tick timer.*/
void SysTick_Handler(void)
{/* USER CODE BEGIN SysTick_IRQn 0 *//* USER CODE END SysTick_IRQn 0 */HAL_IncTick();/* USER CODE BEGIN SysTick_IRQn 1 */Pwm_Led();/* USER CODE END SysTick_IRQn 1 */
}

四、实验现象

1s内逐渐由暗到亮、1s再由亮到暗,LD3、LD4循环呼吸效果显示;
在这里插入图片描述

http://www.dtcms.com/a/394458.html

相关文章:

  • OBOO鸥柏工业触摸屏:信创国产化芯片驱动,展现军工级卓越性能
  • Ubantu命令行指令大全
  • 字节面试题:正则化技术如何影响网络梯度
  • Java进阶教程,全面剖析Java多线程编程,死锁,笔记15
  • 【含文档+PPT+源码】基于SpringBoot+Vue的车牌识别实时交通流量统计系统
  • C++动态规划4
  • chmod命令
  • kernel 6.6中新增的EEVDF特性
  • MATLAB M代码解释器设计与C++实现
  • nivida jetson orinnx torch环境搭建
  • Java进阶教程,全面剖析Java多线程编程,线程的生命周期,笔记11
  • Javase 基础加强 —— 12 网络编程
  • 【04】EPGF 架构搭建教程之 工具环境变量的配置
  • Oracle -运维学习路线 --学习篇1
  • 三个余弦:平方和凑成1时会发生什么
  • 碧蓝航线装备参数探究——关于金色之耻
  • Golang圖書館
  • linux命令--迭代积累
  • Unity2D-物理系统
  • 崩铁 预言算牌 解谜
  • 解锁AI巨型模型训练:DeepSpeed ZeRO Offload 全面指南
  • python语言中的常用容器(集合)
  • Python 程序控制流程综合编程
  • Java进阶教程,全面剖析Java多线程编程,同步方法,笔记13
  • 1.6 虚拟机 (答案见原书 P33)
  • 【C++练习】26.在 C++ 中,不使用 “strcpy“ 函数将一个字符串复制到另一个字符串
  • 【分布式技术】Baerer token刷新机制详细解读
  • 第十三章 Ant与Jenkins的集成
  • 通义万相正式开源Wan2.2-Animate动作生成模型
  • 课后作业-2025-09-21