求救!STM8S103F3 TIM2_CH1的PWM无法输出
STM8S103F3 TIM2_CH1的PWM无法输出,不知道我的程序哪里有问题,请高手指点,谢谢!我想使用TIM2_CH1做PWM输出,可折腾了几天没有结果:)
//芯片型号:STM8S103F3P6,通道 TIM2_CH1
void pwm_init2(void)
{
GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);
TIM2_DeInit();
TIM2_TimeBaseInit(TIM2_PRESCALER_1, 127);
TIM2_CCxCmd(TIM2_CHANNEL_1, ENABLE);
TIM2_OC1Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE, 64, TIM2_OCPOLARITY_LOW);
TIM2_OC1PreloadConfig(ENABLE);
TIM2_ARRPreloadConfig(ENABLE);
TIM2_ITConfig(TIM2_IT_UPDATE, DISABLE);
TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE);
TIM2_Cmd(ENABLE);
}
请注意要将芯片的PWM功能口打开,设置方法是用烧录软件选择这个口用的功能,然后再烧录一下,这样程序对了的话PWM就能出来了, 楼上的说的是PWM的复用的方法,不是复用脚用PWM和烧录配置位没有关系。我的就可以输出啊。 楼主,按规矩出牌,TIM2_CH1 管脚默认复用是SPI_CLK口,先用烧写器更改选项把它写成TIM2_CH1复用输出,再看看情况。 void TIM2_Config(void)
{
CLK_PCKENR1 |= 0x20;//TIM2 CLK Enable!
asm("nop");
while(!(CLK_PCKENR1 & 0x01));
TIM2_CR1 = 0x00;
TIM2_PSCR = 0x00;//16/2^4
TIM2_ARRH = 0x00;
TIM2_ARRL = 0xFF;//
TIM2_CCR1H = 0x01;
TIM2_CCR1L = 0xf4;
TIM2_CCR2H = 0x1;
TIM2_CCR2L = 0xf4;
TIM2_CCR3H = 0x01;
TIM2_CCR3L = 0xf4;
TIM2_CCMR1 = 0x70;
TIM2_CCMR2 = 0x70;
TIM2_CCMR3 = 0x70;
TIM2_CCER1 = 0x33;
TIM2_CCER2 = 0x03;
TIM2_IER = 0x00;
TIM2_CR1 |= 0x01;
//TIM2_BKR = 0xc0;
}
STM8S103F3P6输出 3路 PWM
亲测可用。 希望楼上的可用, 楼主,按规矩出牌,TIM2_CH1 管脚默认复用是SPI_CLK口,先用烧写器更改选项把它写成TIM2_CH1复用输出,再看看情况。还得用烧写器来设置?那我用ST-LINK直接用KEIL下载 可以吗 lwg998 发表于 2012-11-16 18:00
楼主,按规矩出牌,TIM2_CH1 管脚默认复用是SPI_CLK口,先用烧写器更改选项把它写成TIM2_CH1复用输出,再看 ...
TIM2_CH1 是PD4脚,不是SPI_SCK脚吧。。。。 zlutian 发表于 2012-6-1 09:00
楼主,按规矩出牌,TIM2_CH1 管脚默认复用是SPI_CLK口,先用烧写器更改选项把它写成TIM2_CH1复用输出,再看 ...
TIM2_CH1 是PD4脚,不是SPI_SCK脚吧。。。。 楼主解决没有,我也遇到这个问题,解决不了,规格书上,PD4(TIM2_CH1)不是复用IO,不是用的PC5 那个脚,应该有输出的,难道规格书搞错了? 我最近也在搞这个现在还没有搞出来 这个pwm 我也是遇到了这个问题,换成TIM2的CH2和CH3都没问题,CH1就是死活没反应。
锲而不舍搞了几个小时,才发现了原来使用TIM1_CH1时,修改了字节选项AFR0,把PC6口复用为了TIM1_CH1,这个字节选项同时也把TIM2_CH1复用到了PC5,而不是原来的PD4了!!!所以只要你这个芯片之前使用过TIM1_CH1引脚(这个引脚必须经过复用才能使用),你的TIM2_CH1就应该不是在PD4了。
这尼玛实在太坑爹了 stm8的东西太多坑了 首先要确认你的TIM1_CH1引脚是PD4还是PC5,如果是PD4就把PC5 TIM1_CH1复用功能关闭,如果是PC5就把PC5 TIM1_CH1复用功能打开,打开和关闭复用功能在配置项里面设定
页:
[1]