##学习笔记
一.相关表格
1.PB3,PB4,PA13,PA14,PA15引脚可根据上表复用成普通IO口。在mcu复位的时候这几个引脚被作为jtag的功能。当我们要使用这些引脚作为普通的I/O时必须进行引脚的功能复用。
二.I/O复用方法:
1.使能所要复用的I/O时钟(例子以PB4为例):
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
2.配置I/o口:
GPIO_InitTypeDef GPIO_Initstructure;//结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//上面的复用I/O时钟写在这里
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启afio时钟,见3.
GPIO_Initstructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_Initstructure.GPIO_Pin=GPIO_Pin_4;
GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//这是复用要用到的函数,先不管见4.。
GPIO_Init(GPIOB,&GPIO_Initstructure);//gpio初始化函数初始化b口。
3.开启AFIO时钟
在更改AFIO寄存器时要使用该时钟,平常最好都写上以防万一。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启afio时钟
4.开启复用功能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
GPIO_Remap_SWJ_NoJTRST:为相应宏定义(见表35,上面):001
此时PB4口可以作为普通I/O口使用了。
三.GPIO_PinRemapConfig中的相关宏定义:
(表35)
GPIO_Remap_SWJ_NoJTRST —> 001
GPIO_Remap_SWJ_JTAGDisable ----> 010
GPIO_Remap_SWJ_Disable ----> 100 //PA13/14/15 PB3/4均可用;
四.具体代码实现总结:
例子为蓝桥杯的cet711板:PB4连接蜂鸣器,所以要复用PB4口完成对蜂鸣器的初始化。
void beep_init(void)//
{
GPIO_InitTypeDef GPIO_Initstructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//使能PB口和AFIO口的时钟
GPIO_Initstructure.GPIO_Mode=GPIO_Mode_Out_PP;//推完复用输出
GPIO_Initstructure.GPIO_Pin=GPIO_Pin_4;//选择pb4口
GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;//速度
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//开启复用功能
GPIO_Init(GPIOB,&GPIO_Initstructure);//GPIO初始化
}