一、问题描述
最近做了一块板子,功能可以理解成输出pwm波。
程序在实验板(型号rct6)上没有问题,可是在我做的板子上就有问题了,输出不了波形,我做的板子是(r8t6型号的片子)。
二、发现问题
发现问题是很sb的,没有注意这两个片子的差异。
我rct6输出pwm用的定时器是TIM8的ch2、ch3这两路,也就是PC7、PC8管脚。
但是呢,新做的板子r8t6根本没有定时器8,只有定时器1、2、3、4。累死也输出不出来波形啊!
三、解决问题
那咋办,板子已经做好了,仔细看r8t6片子的说明文档,有了新奇的发现。
其实这俩片子封装都是一样的,焊在电路板上管脚看不出啥区别。
但是从R8T6芯片手册可以看出来能用R8T6的TIM3 代替 RCT6的TIM8。
怎样替换呢?
从芯片资料可以看出,r8t6的TIM3也用到了PC7、PC8。只不过是被Remap上去的,就是我们所说的映射。
如下图所示:
原来默认TIM3的四个通道对应的管脚是PA6,PA7,PB1,PB0
四、如何实现映射呢
经过查资料,主要映射有四步,这四步的顺序不能错了,顺序很重要。
//板子不同,要对管脚映射
//1.使能重映射后用到的GPIO的时钟;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIO外设时钟使能
//2.使能功能外设时钟;就是用到哪个定时器,使能哪个功能外设时钟。注意APB2时钟对应的也有定时器。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//
//3.使能AFIO时钟;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//4.开启重映射;
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
顺序很重要啊