[STM8] tim1的pwm无输出,求助

[复制链接]
4694|11
 楼主| tang221986 发表于 2012-12-8 17:21 | 显示全部楼层 |阅读模式
TI, PWM, ck, ST, rc
下面是我的配置程序,请问有问题吗,哪位大神能给一个可用的tim1的pwm输出程序,谢谢!

    CLK->ICKR = 0b00000101;     //LSI RC on(for IWDG), Wake up enable,HSI RC on
   CLK->ECKR &= 0x00000010;     //HSE crystal oscillator off
   CLK->SWR = 0xe1;            //Clock master switch register   e1h HSI selected
   CLK->SWCR |= 0b00000110;     //Clock switch control register
   CLK->CKDIVR = 0b00000000;    //Fhsi=Fhsi rc output Fcpu=Fmaster
   CLK->;PCKENR1 = 0b11111100;   //TIM1 TIM2 TIM4  LINUTART  USURT :conect Fhsi    TIM3 SPI I2C:not conect Fhsi
   CLK->;PCKENR2 = 0b00001100;   //CAN  0    0     0    ADC       AWU      0    0    ADC   AWU:conect Fhsi
   CLK->CSSR &= 0b00000010;     //Clock security system OFF
   CLK->CCOR &= 0b01100000;     //CLK_CCO pin disable
   CLK->CANCCR = 0x00;    //CAN
   CLK->HSITRIMR = 0x00;   //HSITR
   CLK->SWIMCCR = 0x00;   //SWIM
   //PCO_1=1;
    GPIOC->DDR |= 0x02; //PA1,PA2数据方向为输出
     GPIOC->CR1 |=0x02;   //推挽输出
   TIM1->CCMR1 = TIM2->CCMR1 | 0x70; // Output mode PWM2.      
    TIM1->CCER1 = TIM1->CCER1 | 0x03;   // CC polarity low,enable PWM output      */
    TIM1->ARRH = 0x03;  // 自动重载寄存器ARR=0x03e8=1000
    TIM1->ARRL = 0xe8;  // 每记数500次产生一次中断,即1000ms
            
    TIM1->CCR1H = 0x01;
   TIM1->CCR1L = 0xf4;
    TIM1->;PSCRH = 0x00;
    TIM1->;PSCRL = 0x00;
    TIM1->CR1 |= 0x01;
 楼主| tang221986 发表于 2012-12-8 17:22 | 显示全部楼层
为什么字符p都变成了笑脸
 楼主| tang221986 发表于 2012-12-8 17:49 | 显示全部楼层
不好意思上面的应该是  TIM1->CCMR1 = TIM1->CCMR1 | 0x70;
uet_cache 发表于 2012-12-8 17:52 | 显示全部楼层
这么多寄存器,怎么看和记啊。建议你用官方库配置,或参考官方例程。
 楼主| tang221986 发表于 2012-12-9 10:17 | 显示全部楼层
stm8s用库文件编译出来很大,我32才用库,哪位大神用寄存器,能给个tim1的pwm寄存器例子不,再次感谢
uet_cache 发表于 2012-12-9 10:31 | 显示全部楼层
你可以用库写了,再看库是操作什么寄存器再仿效。
明月小厨 发表于 2012-12-10 11:56 | 显示全部楼层
我刚试过TIM3的CH2通道,你可以看看;我大致瞄了你的代码一眼,感觉内容太多了,有些设置是多余的,如IO端口的IO方式配置;
T1会有什么不同?
1)TIM1的时钟基准可以任意分频,而不是1,2,4,8....
2)计数的方向可上,可下;我没看TIM1方面的资料;估计用不着所以没看.
明月小厨 发表于 2012-12-10 12:04 | 显示全部楼层
TIM1->CCMR1 = TIM1->CCMR1 | 0x70; // Output mode PWM2.
从库里面搬过来的代码有这个坏习惯,
直接赋值不好吗?干净,准确,可控;      
明月小厨 发表于 2012-12-10 12:50 | 显示全部楼层
通常情况下推荐PWM模式时,启用寄存器预装的功能;
触觉的爱 发表于 2012-12-10 17:55 | 显示全部楼层
TIM1的PWM通道多了个刹车功能,貌似要先关闭才能正常使用。
论坛上有相关例子的,建议多看看。另外,芯片的参考手册没细看吧
chenbb8 发表于 2012-12-10 19:50 | 显示全部楼层
以下是我的程序中抄录的,由于函数的最早编写的时候在半年前的时候,最近我有对函数进行了修改,
所以风格不一~~注释大部分是以前留下来的,不一定正确,请参考手册
另外这是STM8L的程序,对比STM8S,多了时钟开启关闭的动作。

/*前面是一个IO口设置函数*/
CLK_PCKENR2 |= BIT1; //TIM1时钟开启,BIT1是(1<<1)的意思

TIM1_CR1 = 0x84;
TIM1_CCMR2 = 0x70; //PWM模式2,禁止预装载,CH2配置为输出
TIM1_CCER1 = 0x10; //CH2活跃的时候输出高电平,CC2输出使能
TIM1_PSCRH = 0x00; //分频后产生一个500K的频率
TIM1_PSCRL = (CPU_CLK/500000 - 1); //CPU_CLK我在配置文件中定义为4000000,通过各种宏来隔离硬件细节
TIM1_AARH = 0x00;
TIM1_AARL = 0xXX;//自己填
TIM1_CCR2H = 0x00;
TIM1_CCR2L = 0xXX;//自己填,事实上我还有一个SET_PWM()函数是用于配置频率的,嘿嘿,这只是初始化而已

TIM1_BKR =0xC0; //主动输出使能,自动输出使能
TIM1_EGR = 0x01;

CLK_PCKENR2 &= ~BIT1; //关闭TIM1时钟,实现低功耗
figo20042005 发表于 2012-12-10 21:19 | 显示全部楼层
多看下库和DATASHEET比较下寄存器再写
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

122

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部