广西网站建设工具,网络舆情监测 toom,html教程入门,网站建设寻找可以途径目录
配置PWM输出引脚
使能引脚时钟
配置PWM
使能PWM
配置定时器
使能定时器时钟
使能定时器
例程
例程说明
main.h
main.c
PWM.h
PWM.c
led.h
led.c
DSQ.h
DSQ.c
配置PWM输出引脚 PWM的输出引脚必须配置为复用功能。 注意#xff1a;需要使用哪个引脚…目录
配置PWM输出引脚
使能引脚时钟
配置PWM
使能PWM
配置定时器
使能定时器时钟
使能定时器
例程
例程说明
main.h
main.c
PWM.h
PWM.c
led.h
led.c
DSQ.h
DSQ.c
配置PWM输出引脚 PWM的输出引脚必须配置为复用功能。 注意需要使用哪个引脚必须得先查看数据手册只有含有“TIMx_CHx”或者含有“TIMx_CHxN”的引脚才能用作PWM脉冲信号输出并且对应引脚对应固定不可变。重点重点重点 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);//LED蓝灯 PB1引脚
GPIO_InitTypeDef GPIO;
GPIO.GPIO_SpeedGPIO_Speed_50MHz;
GPIO.GPIO_PinGPIO_Pin_1;
GPIO.GPIO_ModeGPIO_Mode_AF_PP;//复用功能
GPIO_Init(GPIOB,GPIO);
使能引脚时钟
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB1引脚时钟
配置PWM 配置PWM模式。模式1计数值CCR时通道1为有效电平。模式2计数值CCR时通道1为有效电平。 比较输出使能 配置输出比较极性。0高电平有效。1低电平有效。 void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
/*
CHx-TIM_OCxInit
CH几就对应OC几TIMx_-TIMx
TIMx_就对应定时器几
*///PB1 - TIM3_CH4 - TIM3、TIM_OC4Init
TIM_OCInitTypeDef PWM;
PWM.TIM_OCModeTIM_OCMode_PWM2;//PWM模式2
PWM.TIM_OutputStateTIM_OutputState_Enable;//比较输出使能
PWM.TIM_OCPolarityTIM_OCPolarity_High;//输出比较极性
TIM_OC4Init(TIM3,PWM);//初始化PWM
使能PWM
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
/*
CHx-TIM_OCxInit
CH几就对应OC几TIMx_-TIMx
TIMx_就对应定时器几
*///PB1 - TIM3_CH4 - TIM3、TIM_OC4PreloadConfig
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能PWM
配置定时器 根据对应的引脚定时器配置对应的定时器。 配置第一次时钟分频 配置计数模式 配置重载值 配置预分频系数 void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);TIM_TimeBaseInitTypeDef DSQ_3;
DSQ_3.TIM_ClockDivisionTIM_CKD_DIV1;//第一次时钟分频不分频
DSQ_3.TIM_CounterModeTIM_CounterMode_Up;//计数模式向上计数模式
DSQ_3.TIM_Period900-1;//重载值
DSQ_3.TIM_Prescaler0;//预分频系数
TIM_TimeBaseInit(TIM3,DSQ_3);//定时器3初始化
使能定时器时钟
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟
使能定时器
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);TIM_Cmd(TIM3,ENABLE);//使能定时器3
例程
例程说明 使用定时器3的PWM功能输出占空比可变的PWM波用来驱动LED灯从而达到LED[PB5]亮度由1档变5档再又5档变1档每个档位持续1秒如此循环。 main.h
#ifndef _MAIN_H_
#define _MAIN_H_#include stm32f10x.h // Device header
#include stm32f10x_gpio.h // Keil::Device:StdPeriph Drivers:GPIO
#include stm32f10x_tim.h // Keil::Device:StdPeriph Drivers:TIM
#include stm32f10x_rcc.h
#include stm32f10x_usart.h
#include stm32f10x_sdio.h
#include misc.h
#include stdio.h
#include timch.h
#include bsp_SysTick.h#include delay.h
#include PWM.h
#include led.h
#include DSQ.h#endif
main.c
#include main.hint main() {char i;u16 PWM[]{0,225,450,675,900};delay_init();LED_Init();DSQ_3_Init();PWM_Init();while(1){for(i0;i5;i){TIM_SetCompare4(TIM3,PWM[i]);delay_ms(1000);}for(i4;i0;i--){TIM_SetCompare4(TIM3,PWM[i]);delay_ms(1000);}}
}
PWM.h
#ifndef __PWM_H_
#define __PWM_H_#include stdio.h
#include sys.hvoid PWM_Init();#endif
PWM.c
#include PWM.hvoid PWM_Init(){TIM_OCInitTypeDef PWM;PWM.TIM_OCModeTIM_OCMode_PWM2;//PWM模式2PWM.TIM_OutputStateTIM_OutputState_Enable;//比较输出使能PWM.TIM_OCPolarityTIM_OCPolarity_High;//输出比较极性TIM_OC4Init(TIM3,PWM);//初始化PWMTIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能PWM
}
led.h
#ifndef __LED_H_
#define __LED_H_#include stdio.h
#include sys.hvoid LED_Init();
void LED_ALL_OFF();
void LED_R_NO();
void LED_R_OFF();
void LED_G_NO();
void LED_G_OFF();
void LED_B_NO();
void LED_B_OFF();#endif
led.c #include led.hvoid LED_Init(){GPIO_InitTypeDef GPIO;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO.GPIO_PinGPIO_Pin_5;GPIO.GPIO_ModeGPIO_Mode_Out_PP;GPIO.GPIO_SpeedGPIO_Speed_50MHz;//GPIO_Init(GPIOB,GPIO);//GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO.GPIO_PinGPIO_Pin_0;//GPIO_Init(GPIOB,GPIO);//GPIO_SetBits(GPIOB,GPIO_Pin_0);GPIO.GPIO_PinGPIO_Pin_1;GPIO.GPIO_ModeGPIO_Mode_AF_PP;//复用功能GPIO_Init(GPIOB,GPIO);//GPIO_SetBits(GPIOB,GPIO_Pin_1);
}void LED_ALL_OFF(){GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_SetBits(GPIOB,GPIO_Pin_0);GPIO_SetBits(GPIOB,GPIO_Pin_1);
}void LED_R_NO(){GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}void LED_R_OFF(){GPIO_SetBits(GPIOB,GPIO_Pin_5);
}void LED_G_NO(){GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}void LED_G_OFF(){GPIO_SetBits(GPIOB,GPIO_Pin_0);
}void LED_B_NO(){GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}void LED_B_OFF(){GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
DSQ.h
#ifndef __DSQ_H_
#define __DSQ_H_#include stdio.h
#include delay.h
#include led.hvoid DSQ_1_Init();
void DSQ_3_Init();#endif
DSQ.c
#include DSQ.hvoid DSQ_1_Init(){TIM_TimeBaseInitTypeDef DSQ_1;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//使能定时器1时钟DSQ_1.TIM_ClockDivisionTIM_CKD_DIV1;//第一次时钟分频不分频DSQ_1.TIM_CounterModeTIM_CounterMode_Up;//计数模式向上计数模式DSQ_1.TIM_Period900-1;//重载值DSQ_1.TIM_Prescaler0;//预分频系数 TIM_TimeBaseInit(TIM1,DSQ_1);//定时器1初始化//TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//定时器3计数值更新、溢出使能TIM_Cmd(TIM1,ENABLE);//使能定时器3
}void DSQ_3_Init(){TIM_TimeBaseInitTypeDef DSQ_3;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟DSQ_3.TIM_ClockDivisionTIM_CKD_DIV1;//第一次时钟分频不分频DSQ_3.TIM_CounterModeTIM_CounterMode_Up;//计数模式向上计数模式DSQ_3.TIM_Period900-1;//重载值DSQ_3.TIM_Prescaler0;//预分频系数 TIM_TimeBaseInit(TIM3,DSQ_3);//定时器3初始化//TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//定时器3计数值更新、溢出使能TIM_Cmd(TIM3,ENABLE);//使能定时器3
}