//TIM3 PWM部分 
//正点原子@ALIENTEK 
//2010/6/2 
 
	//PWM输出初始化 
//arr:自动重装值 
//psc:时钟预分频数 
void PWM_Init(u16 arr,u16 psc)    
{        
 //此部分需手动修改IO口设置 
 RCC->APB1ENR|=1<<1;       //TIM3时钟使能   
 
	 GPIOA->CRH&=0XFFFFFFF0;//PA8输出 
 GPIOA->CRH|=0X00000004;//浮空输入
 
	 GPIOB->CRL&=0XFFFFFF00;//PB0,PB1输出 
 GPIOB->CRL|=0X000000BB;//复用功能输出 
 GPIOB->ODR|=3<<0;//PB0,PB1上拉 
     
 GPIOA->CRL&=0X00FFFFFF;//PA7,PA6输出 
 GPIOA->CRL|=0XBB000000;//复用功能输出     
 GPIOA->ODR|=1<<7;//PA7上拉 
 
	 TIM3->ARR=arr;//设定计数器自动重装值  
 TIM3-> SC=psc;//预分频器不分频
 
	 TIM3->CCMR1|=7<<4;  //CH1 PWM2模式  
 TIM3->CCMR1|=7<<12;  //CH2 PWM2模式  
 TIM3->CCMR2|=7<<4;  //CH3 PWM2模式  
 TIM3->CCMR2|=7<<12;  //CH4 PWM2模式    
// TIM3->CCMR1|=1<<11; //CH2预装载使能   
 
	 TIM3->CCER|=3<<0;   //OC1 输出使能 
 TIM3->CCER|=3<<4;   //OC2 输出使能  
 TIM3->CCER|=3<<8;   //OC3 输出使能 
 TIM3->CCER|=3<<12;   //OC4 输出使能  
 
	 TIM3->CR1=0x8000;   //ARPE使能  
 TIM3->CR1|=0x01;    //使能定时器3              
}    
 
	//////////////////////////////////////////////////////////////////////////////////   
//本程序只供学习使用,未经作者许可,不得用于其它任何用途 
//Mini STM32开发板 
//通用定时器 驱动代码       
//正点原子@ALIENTEK 
//技术论坛:www.openedv.com 
//修改日期:2010/12/03 
//版本:V1.0 
//版权所有,盗版必究。 
//Copyright(C) 正点原子 2009-2019 
//All rights reserved 
//////////////////////////////////////////////////////////////////////////////////   
 
	//通过改变TIM3->CCR2的值来改变占空比,从而控制LED0的亮度
 
	#define TIM3_PWM_1VAL TIM3->CCR1 
#define TIM3_PWM_2VAL TIM3->CCR2  
#define TIM3_PWM_3VAL TIM3->CCR3  
#define TIM3_PWM_4VAL TIM3->CCR4
 
	void Timerx_Init(u16 arr,u16 psc); 
void PWM_Init(u16 arr,u16 psc); 
#endif 
 
	#include <stm32f10x_lib.h> 
#include "sys.h" 
#include "usart.h"   
#include "delay.h"  
#include "led.h"  
#include "key.h" 
#include "exti.h" 
#include "wdg.h" 
#include "timer.h"     
//Mini STM32开发板范例代码8 
//PWM输出 实验 
//正点原子@ALIENTEK 
//技术论坛:www.openedv.com  
 
	int main(void) 
{   
  u16 led0pwmval=0; 
 u8 dir=1;  
  Stm32_Clock_Init(9); //系统时钟设置 
 delay_init(72);      //延时初始化 
 uart_init(72,9600);  //串口初始化  
 LED_Init();      //初始化与LED连接的硬件接口 
  WM_Init(500,0);  //不分频。PWM频率=72000/900=8Khz 
    while(1) 
 { 
   delay_ms(10);    
  TIM3_PWM_4VAL=100; 
  TIM3_PWM_3VAL=200; 
  TIM3_PWM_2VAL=300; 
  TIM3_PWM_1VAL=400;     
 }   
}
 
	 
  |