OpenEdv-开源电子网

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

请问stm32f103如何remap PC口成PWM(寄存器版)??

[复制链接]

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-6-16
在线时间
37 小时
发表于 2016-1-28 12:07:32 | 显示全部楼层 |阅读模式
1金钱
请问stm32f103如何将PC7 8 9设成成PWM口(寄存器版)?

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 12:07:33 | 显示全部楼层
RCC->APB2ENR|=1<<0;
AFIO->MAPR&=0XFFFFF3FF;
AFIO->MAPR|=3<<10;  
把10&11位设成11就行了
回复

使用道具 举报

29

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
968
金钱
968
注册时间
2014-10-9
在线时间
95 小时
发表于 2016-1-28 12:18:38 | 显示全部楼层
额,和我名字差不多啊,寄存器版我不会,我几乎不用寄存器,都是用库的,帮顶
淘宝小店,没事可以点一下增加点流量http://shop69767205.taobao.com/
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-6-16
在线时间
37 小时
 楼主| 发表于 2016-1-28 12:49:33 | 显示全部楼层
本帖最后由 yuanafei 于 2016-1-28 12:51 编辑

      不知道是不是这样?        
AFIO->MAPR&=0xFFFFF5FF;          //完全映像(CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)               
AFIO->MAPR|=0x00000600;          //完全映像(CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)



回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-6-16
在线时间
37 小时
 楼主| 发表于 2016-1-28 15:05:20 | 显示全部楼层
void PWM_Init(u16 arr,u16 psc)
{                                                         
        //此部分需手动修改IO口设置         
        
        RCC->APB2ENR|=1<<4;       //使能PORTC时钟                  
        GPIOC->CRL&=0x00FFFFFF;   //PC7 PC6输出
        GPIOC->CRL|=0xBB000000;   //复用功能输出         
        GPIOC->CRH&=0xFFFFFF00;   //PC9 PC8输出
        GPIOC->CRH|=0x000000BB;   //复用功能输出
       GPIOC->ODR|=(1<<9);       //PC9上拉
       GPIOC->ODR|=(1<<8);       //PC8上拉                 
       GPIOC->ODR|=(1<<7);       //PC7上拉
       GPIOC->ODR|=(1<<6);       //PC6上拉        
        
        RCC->APB1ENR|=1<<1;       //TIM3时钟使能  
        
        RCC->APB2ENR|=0x01;       //使能AFIO时钟         
        delay_us(10);
        AFIO->MAPR&=0xFFFFF3FF;          //完全映像(CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)
        AFIO->MAPR|=0x00000C00;          //完全映像(CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)
        delay_us(10);
        RCC->APB2ENR&=0xFE;       //关闭AFIO时钟         
        delay_us(10);

        RCC->APB1ENR|=1<<1;       //TIM3时钟使能   
        TIM3->ARR=arr;            //设定计数器自动重装值
        TIM3->PSC=psc;            //预分频器不分频
        
        TIM3->CCMR1|=7<<4;        //CH1 PWM2模式        PC6         
        TIM3->CCMR1|=1<<3;        //CH1预装载使能        
        
        TIM3->CCMR1|=7<<12;       //CH2 PWM2模式        PC7         
        TIM3->CCMR1|=1<<11;       //CH2预装载使能           
        
        TIM3->CCMR2|=7<<4;        //CH3 PWM2模式        PC8
        TIM3->CCMR2|=1<<3;        //CH1预装载使能        
        
        TIM3->CCMR2|=7<<12;       //CH4 PWM2模式        PC9         
        TIM3->CCMR2|=1<<11;       //CH2预装载使能           

        TIM3->CCER|=(1<<0);       //OC2 输出使能PC6           
        TIM3->CCER|=(1<<4);       //OC2 输出使能PC7               
        TIM3->CCER|=(1<<8);       //OC2 输出使能PC8         
        TIM3->CCER|=(1<<12);      //OC2 输出使能PC9

        TIM3->CR1=0x8000;         //ARPE使能
        TIM3->CR1|=0x01;          //使能定时器3                                                                                   
}           


只出来了PC6 和PC7的PWM波 , PC8和PC9没出来,请问哪里设置不对??
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 15:25:40 | 显示全部楼层
yuanafei 发表于 2016-1-28 15:05
void PWM_Init(u16 arr,u16 psc)
{                                                         
        ...

AFIO->MAPR|=0x00000C00;  是3不是c
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 15:29:14 | 显示全部楼层
yuanafei 发表于 2016-1-28 15:05
void PWM_Init(u16 arr,u16 psc)
{                                                         
        ...

AFIO->MAPR|=0x00000C00; 这里不对
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 15:36:25 | 显示全部楼层
1062328689 发表于 2016-1-28 15:29
AFIO->MAPR|=0x00000C00; 这里不对

。。。看错了
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 15:39:14 | 显示全部楼层
看不出来
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-6-16
在线时间
37 小时
 楼主| 发表于 2016-1-28 15:40:37 | 显示全部楼层
1062328689 发表于 2016-1-28 15:29
AFIO->MAPR|=0x00000C00; 这里不对

不是这里的问题

        AFIO->MAPR&=0xFFFFF3FF;          //íêè&#171;ó3&#207;&#241;(CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)
        //AFIO->MAPR|=0x00000C00;          //íêè&#171;ó3&#207;&#241;(CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)
        AFIO->MAPR|=3<<10;          //íêè&#171;ó3&#207;&#241;(CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)

这样也不行,这个是一样的。
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 15:45:20 | 显示全部楼层
yuanafei 发表于 2016-1-28 15:40
不是这里的问题

        AFIO->MAPR&=0xFFFFF3FF;          //íêè&#171;ó3&#207;&#241;(CH1/PC6, CH2/PC7, CH3/P ...

对啊,我c和3 是一样的,我也看不出来
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 15:46:16 | 显示全部楼层
你把这里屏蔽下      RCC->APB2ENR&=0xFE;       //关闭AFIO时钟         
        delay_us(10);

        RCC->APB1ENR|=1<<1;       //TIM3时钟使能   
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-6-16
在线时间
37 小时
 楼主| 发表于 2016-1-28 16:02:59 | 显示全部楼层
跟端口映射没啥关系,我用默认的IO口也有2路没出来,PB0和PB1没出来。
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-6-16
在线时间
37 小时
 楼主| 发表于 2016-1-28 16:03:20 | 显示全部楼层
1062328689 发表于 2016-1-28 15:46
你把这里屏蔽下      RCC->APB2ENR&=0xFE;       //关闭AFIO时钟         
        delay_us(10);

跟这个没关系,改了也不行。
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 16:10:36 | 显示全部楼层
yuanafei 发表于 2016-1-28 16:03
跟这个没关系,改了也不行。

你问13楼
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-6-16
在线时间
37 小时
 楼主| 发表于 2016-1-28 16:16:15 | 显示全部楼层

谢谢,我再找找其他的原因。
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2013-6-16
在线时间
37 小时
 楼主| 发表于 2016-1-28 16:30:14 | 显示全部楼层
1062328689 发表于 2016-1-28 15:46
你把这里屏蔽下      RCC->APB2ENR&=0xFE;       //关闭AFIO时钟         
        delay_us(10);

找到问题了, 这段程序没有问题。

问题在这里,我只定义了 TIM3CCR1  CCR2  .     CCR3 CCR4没定义也没赋值。

#define LED0_PWM_VAL TIM3->CCR1
#define LED1_PWM_VAL TIM3->CCR2
#define LED2_PWM_VAL TIM3->CCR3
#define LED3_PWM_VAL TIM3->CCR4
回复

使用道具 举报

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2015-12-26
在线时间
28 小时
发表于 2016-1-28 17:22:51 | 显示全部楼层
yuanafei 发表于 2016-1-28 16:30
找到问题了, 这段程序没有问题。

问题在这里,我只定义了 TIM3CCR1  CCR2  .     CCR3 CCR4没定义也 ...

我看哎纠结半天
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 07:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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