前面学习STM32的时候已经学习了怎么点亮一个LED灯,接下来就开始学习复用重映射。
要想学习复用重映射,首先就得先知道,什么是复用,什么是重映射。
复用:是指一个引脚能够用于多个不同的功能,为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上
重映射:是指一个功能可以通过多个引脚去实现
由此可见,复用和重映射是为了解决我们引脚需求的功能,既然复用和重映射如此重要,那么我们怎么知道某些引脚对应哪些复用功能呢?
这里就需要一个非常重要的东西了——数据手册。
此处以PB4为例子。
因为是举例,所以将所有的函数都写在了主函数里面
main函数
void delay(uint32_t count)
{
int i;
while (count--) {
for (i = 0; i < 1000; i++) {}
}
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
LED_Init();
while (1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_4);
delay(5000);
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
delay(5000);
}
}
这里有几个函数需要解释一下
GPIO_PinRemapConfig函数:该函数的作用是引脚复用,此处我们需要映射的引脚是PB4所以,得找到PB4的复用重映射之前的功能。
由图可知,要想PB4可用的话,需要对SWJ进行操作,根据查询头文件得知,需要完全swj但是没有jntrst的参数是GPIO_Remap_SWJ_NoJTRST,对此使能表示开启IO口的复用重映射功能。
开启之后,我们要对对应的IO口进行操作,即PB4,设置其对应的速度,模式,最后初始化引脚。
复用重映射完成之后,怎么样才能够测试呢,这时候就需要使用debug来测了。
通过这里进去debug
点击进去调出波形图窗口,设置对应的参数即可查看IO口的电平变换。
由函数逻辑可以看出来,PB4的电平变化是5000一次变化,注意这里的延时是不精确的延时,所以这个5000既不是毫秒也不是微秒,后续的文章会和大家一起学习精确定时的操作。
从仿真的情况来看,整个debug的图像和我们预想的一模一样,说明这次的复用重映射功能成功了。这就是整个复用重映射的操作。
最后再来梳理一遍步骤
1、定义GPIO结构体
2、使用复用时钟
3、使能IO口复用重映射
4、设置复用重映射后的IO口
5、使用IO口
总体步骤如上,学习到这里,就是“复用重映射大师”了。