STM32单片机定时器输出PWM实现呼吸灯实验
创作时间:
作者:
@小白创作中心
STM32单片机定时器输出PWM实现呼吸灯实验
引用
CSDN
1.
https://blog.csdn.net/labvvv/article/details/142662693
本文将介绍如何使用STM32单片机的定时器输出PWM信号,实现一个简单的呼吸灯实验。通过这个实验,读者可以了解STM32定时器的基本使用方法,以及如何通过软件控制硬件输出PWM信号。
1.硬件准备
- STM32单片机最小系统
- LED灯模块
2.软件准备
- pwm驱动文件添加
- 定时器HAL驱动层文件添加
- GPIO常用函数
- 定时器输出PWM配置步骤
main.c程序
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "pwm.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init(); /* 初始化LED灯 */
pwm_init(500 - 1, 72 - 1);//arr=499,psc=71
uint16_t i = 0;
while(1)
{
for(i = 0; i < 300; i++)
{
pwm_compare_set(i);//修改CCR值
delay_ms(10);
}
for(i = 0; i < 300; i++)
{
pwm_compare_set(300 - i);
delay_ms(10);
}
// led1_on();
// led2_off();
// delay_ms(500);
// led1_off();
// led2_on();
// delay_ms(500);
}
}
led.c程序
#include "led.h"
#include "sys.h"
//初始化GPIO函数
void led_init(void)
{
GPIO_InitTypeDef gpio_initstruct;
//打开时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); // 使能GPIOB时钟
//调用GPIO初始化函数
gpio_initstruct.Pin = GPIO_PIN_8 | GPIO_PIN_9; // 两个LED对应的引脚
gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
gpio_initstruct.Pull = GPIO_PULLUP; // 上拉
gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH; // 高速
HAL_GPIO_Init(GPIOB, &gpio_initstruct);
//关闭LED
led1_off();
led2_off();
}
//点亮LED1的函数
void led1_on(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); // 拉低LED1引脚,点亮LED1
}
//熄灭LED1的函数
void led1_off(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); // 拉高LED1引脚,熄灭LED1
}
//翻转LED1状态的函数
void led1_toggle(void)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);
}
//点亮LED2的函数
void led2_on(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET); // 拉低LED2引脚,点亮LED2
}
//熄灭LED2的函数
void led2_off(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET); // 拉高LED2引脚,熄灭LED2
}
//翻转LED2状态的函数
void led2_toggle(void)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
}
led.h程序
#ifndef __LED_H__
#define __LED_H__
void led_init(void);
void led1_on(void);
void led1_off(void);
void led1_toggle(void);
void led2_on(void);
void led2_off(void);
void led2_toggle(void);
#endif
pwm.c程序
#include "pwm.h"
TIM_HandleTypeDef pwm_handle = {0};
// init函数
void pwm_init(uint16_t arr, uint16_t psc)
{
TIM_OC_InitTypeDef pwm_config = {0};
pwm_handle.Instance = TIM4;
pwm_handle.Init.Prescaler = psc;
pwm_handle.Init.Period = arr;
pwm_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_PWM_Init(&pwm_handle);
pwm_config.OCMode = TIM_OCMODE_PWM1;//指定定时器工作模式1
pwm_config.Pulse = arr/2;//CCR初值
pwm_config.OCPolarity = TIM_OCPOLARITY_LOW;//有效电平
HAL_TIM_PWM_ConfigChannel(&pwm_handle, &pwm_config, TIM_CHANNEL_3);//通道3
HAL_TIM_PWM_Start(&pwm_handle, TIM_CHANNEL_3);
}
//msp函数
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM4)//判断是否为TIM4
{
GPIO_InitTypeDef gpio_initstruct;
//打开时钟
__HAL_RCC_GPIOB_CLK_ENABLE();//GPIO口时钟 // 使能GPIOB时钟
__HAL_RCC_TIM4_CLK_ENABLE();//TIM4时钟
//调用GPIO初始化函数
gpio_initstruct.Pin = GPIO_PIN_8; // 两个LED对应的引脚
gpio_initstruct.Mode = GPIO_MODE_AF_PP; // 推挽输出
gpio_initstruct.Pull = GPIO_PULLUP; // 上拉
gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH; // 高速
HAL_GPIO_Init(GPIOB, &gpio_initstruct);
}
}
//修改CCR值的函数
void pwm_compare_set(uint16_t val)
{
__HAL_TIM_SET_COMPARE(&pwm_handle, TIM_CHANNEL_3, val);
}
pwm.h程序
#ifndef __PWM_H__
#define __PWM_H__
#include "sys.h"
void pwm_init(uint16_t arr, uint16_t psc);
void pwm_compare_set(uint16_t val);
#endif
3.实物效果
硬件模块接线
- LED1正—>VCC
- LED1负—>PB8
- ST-Link下载方式
实验现象
使用定时器4通道3生成PWM波控制LED1实现呼吸灯。频率:2kHz,PSC=71,ARR=499。LED1连接STM32F103的PB8管脚,通过产品手册可知其在定时器4通道3。
定时器输出PWM实现呼吸灯实验keil源文件
热门推荐
整形医生郑锦洪:瘦脸针全面解析——原理、维持时间及注射频率
十大食用菊花菜谱做法 10种受欢迎的菊花吃法分享
被掌掴后还手算不算正当防卫?法律这样界定
企业数字化转型指南:背景、方案与案例分析
加勒比海海域发生7.6级地震,海底强烈地震有诱发海啸的极大风险
猪脆骨是哪个部位?补钙,延缓骨质疏松!
斗罗大陆武魂觉醒主角武魂选择攻略
中级职称申报流程分几个步骤
最佳延寿运动出炉!这几种运动延寿效果好,你练对了吗?
上海机场联络线即将开通,高铁级配置抢先体验,乘车细节大揭秘
AI浪潮下就业市场的变革与挑战:被替代者的未来
土豆什么时候种植合适?
详解三种工时制:标准工时、综合工时与不定时工时
王殿武:真正的高人都是不受外界干扰,找到自我,做真实的自己
农村宅基地确权:定义、意义及与不动产证的区别
骨质疏松新机制药物罗莫佐单抗中国申报上市,百亿市场波澜再起
认识氮氧化物(NOX)
西梅干糖尿病人可以吃吗
西安房价最新分析2024:未来走势如何?
丝瓜种植方法全过程
尿酸高能吃花生吗
Excel成绩分类完全指南:5种实用方法详解
最伤肝的六种行为,第一名竟然不是过量饮酒!
口腔发炎看哪科?专业医师完整解答
费时费力还没效果?你量化了你的训练量了吗?
全麻术后为何不让睡觉?医生这样说
行业洞察|中美科技战加剧全球供应链动荡,2025年半导体行业8大趋势值得关注!
多国祝贺联盟党获胜,舆论担心极右翼崛起,德国胜选政党希望迅速组建政府
津贴的定义是什么?
情感健康与恋爱关系:培养健康情感观