OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6350|回复: 5

stm8 tim1配置ch1N和ch2N不能当普通io输出了

[复制链接]

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2016-3-25 11:28:27 | 显示全部楼层 |阅读模式
1金钱
遇到个问题:stm8s105c6t6  tim1输出pwm配置,ch1和ch2都能输出pwm波形。但是发现ch1n(PB0) 和ch2n(PB1)管脚不能当作普通io口来输出了。


是不是需要复用管脚的第二功能什么的呀。大家有遇到这种情况吗。以下是我的配置代码:
大家帮我看看有什么问题没有呀。

void Init_Timer1_PWM(void)
{
        CLK->PCKENR1 = 0x80;//tim1 时钟使能
       
        //设置自动重装寄存器(须先写高8位再写低8位),决定PWM的频率       
       
        //  PWM频率:f=16KHZ, T=62.5us
        //  时钟周期:t=1/(fmaster)=1/16MHZ = 0.0625us
        //  TIM1_ARR = T/t = 62.5us/0.0625us = 1000
        /*
        TIM1_ARR=16M/fx;
        */
       
        TIM1->ARRH = CCR_P>>8;//0x00;      
        TIM1->ARRL = CCR_P&0xff;//0x05;
        //初始化预分频器,fmaster不分频,(须先写高8位再写低8位)
        TIM1->PSCRH = 0;        
        TIM1->PSCRL = 0;  
       
        //配置channel1
        //初始化捕获/比较模式寄存器1
        TIM1->CCMR1 = 0x60;     //TIM1_CCMR1[6:4]=110,设置PWM模式1
        //初始化捕获/比较使能寄存器1
        TIM1->CCER1 = 0x01;     //b0 CC1E=1,开启OC1信号输出到相应引脚
                          //b1 CC1P=0,OC1高电平有效
                          //b2 CC1NE=1,开启OC1N信号输出到相应引脚
                          //b3 CC1NP=0,OC1高电平有效   
        //初始化比较寄存器,决定PWM的占空比
        TIM1->CCR1H = CCR_V>>8;
        TIM1->CCR1L = CCR_V&0xff;

        //配置channel2
        TIM1->CCMR2 = 0x60;     //TIM1_CCMR1[6:4]=110,设置PWM模式1
        TIM1->CCER1 |= 0x10;
        TIM1->CCR2H = CCR_V>>8;
        TIM1->CCR2L = CCR_V&0xff;
       
        //CEN=1,则允许计数
        TIM1->CR1 |= (uint8_t)0x01;       
        //初始化刹车寄存器中MOE(主输出使能位)
        TIM1->BKR = 0x80;      
        //b0 MOE=1 使能OC和OCN引脚输出
        //b7 MOE=0
}

最佳答案

查看完整内容[请看2#楼]

结贴了。 我自己找到原因了。 原因:CLK->PCKENR1 = 0x80;//tim1 时钟使能------这句是错的!(万恶的复制粘贴啊) 应该用:CLK->PCKENR1 |= 0x80;//tim1 时钟使能------这句是对的! tim1的pwm输出配置别的地方没有问题。可以输出两路pwm。ch1n和ch2n只所以不能输出是因为tim4的时钟使能被该死的这句:CLK->PCKENR1 = 0x80;---给关了。造成led不能闪烁(ch1n和ch2n个管脚接的是2个led)。 因为这个原因害的我从新把手册又 ...
原子哥是不是又要出黑科技了呀。^_^...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2016-3-25 11:28:28 | 显示全部楼层
结贴了。
我自己找到原因了。
原因:CLK->CKENR1 = 0x80;//tim1 时钟使能------这句是错的!(万恶的复制粘贴啊
应该用:CLK->CKENR1 |= 0x80;//tim1 时钟使能------这句是对的!
tim1的pwm输出配置别的地方没有问题。可以输出两路pwm。ch1n和ch2n只所以不能输出是因为tim4的时钟使能被该死的这句:CLK->CKENR1 = 0x80;---给关了。造成led不能闪烁(ch1n和ch2n个管脚接的是2个led)。
因为这个原因害的我从新把手册又看了个遍。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-3-25 11:37:35 | 显示全部楼层

是要同时实现两种用法?


回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2016-3-25 11:44:04 | 显示全部楼层
ch1N 和ch2N不输出pwm,要把这两个脚当作普通的io口来用。现在我的配置,这两个脚用不了了。不清楚那里出问题了。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
 楼主| 发表于 2016-3-25 11:59:40 | 显示全部楼层
xuande 发表于 2016-3-25 11:37
是要同时实现两种用法?

是啊。就是ch1输出pwm,而ch1N当作普通io输出来用。ch1N不需要输出pwm。
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-3-25 13:42:13 | 显示全部楼层

原来这样,
这是两个IO,各做各的用途。

没有互相干涉的道理。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 00:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表