入门学习的一块板子,用到了PB4作为直流有刷电机方向控制IO,配置过程中走了一些弯路,终究还是解决了。感谢网络上解答相关问题大大神们。
对于STM32F1系列的端口配置方法,有明确的实例可以借鉴学习。如下代码是测试可用的
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
//打开GPIO口时钟,先打开复用才能修改复用功能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
//要先开时钟,再重映射;这句表示关闭jtag,使能swd。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M
GPIO_Init(GPIOB, &GPIO_InitStructure);
STM32F4系列的端口复用,使用GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)这个函数,网上可以找到具体例程。
我这次是用于普通IO,在网上找了一圈也没有这部分的明确说明要怎么配置。我会在这个小问题上卡住,还是因为先配置使用的F103,再配置f405就突然不会了(苦笑)。解决之后发现如此简单,还是在这里记录一下吧,希望能帮到像我一样的初学者。
如下例程,对比PB4与其他几个端口,都是一样的,不需要额外配置。(哈哈哈)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC, ENABLE);//使能端口时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //高速100MHZ
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //PB4
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //设置为输出模式
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //高速100MHZ
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化