查看数据手册复用是AF0,TIM15_CH2(2),但是发现没有办法输出PWM波形实现呼吸灯效果
实际尝试PA3引脚让LED灯亮灭闪烁是可以实现的,但是却没有办法输出PWM波形,求大佬指点
#include "main.h"
#include "stm32f0xx_gpio.h"
#include "stm32f0xx_tim.h"
#include "stm32f0xx_rcc.h"
#define LED_PIN GPIO_Pin_3
#define LED_GPIO_PORT GPIOA
uint16_t dutyCycle = 0;
uint8_t direction = 1;
void initSystemClock(void);
void initGpio(void);
void initTim15(void);
static void initSystemClock()
{
// 确保系统时钟配置正确,默认是48 MHz
if (RCC_GetSYSCLKSource() != RCC_SYSCLKSource_PLLCLK) {
// 如果系统时钟不是PLLCLK,则重新配置
SystemInit();
}
}
static void initGpio()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_0);
}
static void initTim15()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 4799;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM15, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM15, &TIM_OCInitStructure);
TIM_Cmd(TIM15, ENABLE);
}
int main(void)
{
// 初始化系统时钟
initSystemClock();
initGpio();
initTim15();
while (1)
{
if (direction == 1) {
dutyCycle++;
if (dutyCycle >= 1000) {
direction = 0;
}
} else {
dutyCycle--;
if (dutyCycle <= 0) {
direction = 1;
}
}
TIM_SetCompare2(TIM15, dutyCycle);
for (volatile int i = 0; i < 1000; i++);
}
}