本帖最后由 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;
- }
|