本帖最后由 biiigfish 于 2015-3-14 13:48 编辑
急!快被这个折腾死了!用的片子是STM8S003F3p6。下面的代码,channel2有PWM输出,channel3没有。。。其他地方没有对GPIOD有操作。
void pwm_init()
{
TIM2->CCMR2 = 0x70;// Output mode PWM2.
// 通道2被设置成比较输出方式
// OC2M = 111,为PWM模式2,
// 向上计数时,若计数器小于比较值,为无效电平
// 即当计数器在0到比较值时,输出为1,否则为0
TIM2->CCMR3 = 0x70;
TIM2->CCER1 = 0x30; // CCER1[7...0]=00:channel2:00:channel1
// CC2P = 1,低电平为有效电平
// CC2E = 1,开启输出引脚
TIM2->CCER2 = 0x03; // CCER2[7...0]=00:00:00:channel3
//设置重装时的寄存器值,即一个pwm周期是多少个系统时钟周期,Fpwm=2000000/256
TIM2->ARRH = 0x00;
TIM2->ARRL = 0xFF;
//初始化比较寄存器,决定PWM方波的占空比
TIM2->CCR2H = 0;
TIM2->CCR2L = LOW_SPEED;
TIM2->CCR3H = 0;
TIM2->CCR3L = LOW_SPEED;
// 初始化时钟分频器为1,即计数器的时钟频率为Fmaster=2MHZ
TIM2->PSCR = 0;
// 启动计数
TIM2->CR1 |= 0x01;
}
|