【STM32】引脚配置—F1与F4系列( 三 )


步骤与普通IO的一致 , 还需使能复用功能 。
IO选择为复用时 , F1系列 只需在结构体成员的模式种选择 , F4系列需要另外调用函数:
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1
由此可以看出F4系列的IO可以复用的功能更多 , IO复用功能更强大 。
完整的初始化程序:
/*Stm32f10x*/GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1 , GPIOA时钟//USART1_TXGPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9//USART1_RXGPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10 /*Stm32f4xx*/GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟//串口1对应引脚复用映射GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA9复用为USART1GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1//USART1端口配置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA9 , PA10
三、关于引脚的0、1输出操作 1、单一引脚的操作函数:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置位void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//复位
置位即置1 , 引脚输出高电平;复位即置0 , 引脚输出低电平 。
函数第一个参数GPIOx为哪一组GPIO , 第二个参数为哪一个引脚 。例如对PA0操作:
GPIO_ResetBits(GPIOA,GPIO_Pin_0);//PA0置0GPIO_SetBits(GPIOA,GPIO_Pin_0);//PA0置1
2、同时对多个引脚操作函数:
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
该函数可对一组GPIO进行操作 , 每一组通常有16个引脚 , 对应16位二进制数 。
第一个参数GPIOx为哪一组GPIO , 第二个为一个16位的二进制数 , 分别对应16个引脚的输出值 。例如:
【【STM32】引脚配置—F1与F4系列】GPIO_Write(GPIOA, 0xFFFF); //0xFFFF = 1111 1111 1111 1111//GPIOA的所有引脚都输出1 。