1;目的:用STM32f10x的TIM3产生占空比50%,频率10Khz的方波;
2;操作步骤;
(1)开启TIM3时钟;
(2)设置自动重装载值和预分频系数;
(3)设置通道和PWM模式;
(4)使能TIM3;
(5)修改CCR1来控制占空比;
3;代码部分;
pwm.c
在这里插入代码片#include "pwm.h"void TIM3_PWM_Init(u16 arr,u16 psc){RCC->APB1ENR |=1<<1;//TIM3时钟使能//端口复用RCC->APB2ENR |=1<<2;//开启A时钟GPIOA->CRL&=0XF0FFFFFF; //PA6清除之前的设置GPIOA->CRL|=0X0B000000; //复用功能输出 TIM3->ARR=arr;//自动重装载值TIM3->PSC=psc;//预分频系数TIM3->CCMR1|=7<<4; //CH1 PWM2 模式//比较捕获模式配置寄存器TIM3->CCER|=1<<0; //OC1 输出使能 //捕获/比较使能寄存器TIM3->CR1 |=0X0001;//使能定时器3}
pwm.h
在这里插入代码片#ifndef _PWM_H_#define _PWM_H_#include "sys.h"#include "led.h"#define CH1_PWM TIM3->CCR1//占空比void TIM3_PWM_Init(u16 arr,u16 psc);#endif
main.c
在这里插入代码片#include "stm32f10x.h"#include "sys.h"#include "delay.h"#include "led.h"#include "timer.h"#include "pwm.h"int main(){Stm32_Clock_Init (9);LED_Init();delay_init(72);TIM3_PWM_Init(7199,0);//PWM频率=72000000(7199+1)=10Khzwhile(1){LED1=0;delay_ms(10);CH1_PWM=3600;//调占空比为3600/7200=50%;}}