打印
[STM8]

tim1的pwm无输出,求助

[复制链接]
4238|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 | 只看该作者
这么多寄存器,怎么看和记啊。建议你用官方库配置,或参考官方例程。

使用特权

评论回复
5
tang221986|  楼主 | 2012-12-9 10:17 | 只看该作者
stm8s用库文件编译出来很大,我32才用库,哪位大神用寄存器,能给个tim1的pwm寄存器例子不,再次感谢

使用特权

评论回复
6
uet_cache| | 2012-12-9 10:31 | 只看该作者
你可以用库写了,再看库是操作什么寄存器再仿效。

使用特权

评论回复
7
明月小厨| | 2012-12-10 11:56 | 只看该作者
我刚试过TIM3的CH2通道,你可以看看;我大致瞄了你的代码一眼,感觉内容太多了,有些设置是多余的,如IO端口的IO方式配置;
T1会有什么不同?
1)TIM1的时钟基准可以任意分频,而不是1,2,4,8....
2)计数的方向可上,可下;我没看TIM1方面的资料;估计用不着所以没看.

使用特权

评论回复
8
明月小厨| | 2012-12-10 12:04 | 只看该作者
TIM1->CCMR1 = TIM1->CCMR1 | 0x70; // Output mode PWM2.
从库里面搬过来的代码有这个坏习惯,
直接赋值不好吗?干净,准确,可控;      

使用特权

评论回复
9
明月小厨| | 2012-12-10 12:50 | 只看该作者
通常情况下推荐PWM模式时,启用寄存器预装的功能;

使用特权

评论回复
10
触觉的爱| | 2012-12-10 17:55 | 只看该作者
TIM1的PWM通道多了个刹车功能,貌似要先关闭才能正常使用。
论坛上有相关例子的,建议多看看。另外,芯片的参考手册没细看吧

使用特权

评论回复
11
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时钟,实现低功耗

使用特权

评论回复
12
figo20042005| | 2012-12-10 21:19 | 只看该作者
多看下库和DATASHEET比较下寄存器再写

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

122

帖子

0

粉丝