//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;
}
}
|