野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10619|回复: 6

PB11端口如何配置位普通I/O端口

[复制链接]
发表于 2018-3-1 14:26:36 | 显示全部楼层 |阅读模式
头文件定义:
#define OTHER_LED_GPIO_PIN   GPIO_Pin_11           
#define OTHER_LED_GPIO_PORT  GPIOB                 
#define OTHER_LED_GPIO_CLK   RCC_APB2Periph_GPIOB   
C程序写法一:
void OTHER_GPIO_Config(void)                       
{
        ////将PB11设置为GPIO口,取消其作为USART3的串口功能
        RCC_APB2PeriphClockCmd(OTHER_LED_GPIO_CLK,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, DISABLE);
        
        ////结构体变量定义
        GPIO_InitTypeDef GPIO_InitStruct;              
        
        ////芯片工作指示灯端口初始化
        //芯片工作指示灯        
        GPIO_InitStruct.GPIO_Pin = OTHER_LED_GPIO_PIN;     //配置模式:引脚、输入输出方式、速度
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        
        GPIO_Init(OTHER_LED_GPIO_PORT, &GPIO_InitStruct);    //调用初始化函数               
}
C程序写法二:
void OTHER_GPIO_Config(void)                       
{
        ////结构体变量定义
        GPIO_InitTypeDef GPIO_InitStruct;              
        
        ////芯片工作指示灯端口初始化
        RCC_APB2PeriphClockCmd(OTHER_LED_GPIO_CLK, ENABLE);  
        
        GPIO_InitStruct.GPIO_Pin = OTHER_LED_GPIO_PIN;     //配置模式:引脚、输入输出方式、速度
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        
        GPIO_Init(OTHER_LED_GPIO_PORT, &GPIO_InitStruct);    //调用初始化函数               

}


  无论上述哪种写法,都没有实现PBout(11) = 0;的输出,也就是没有配置PB11为普通I/O端口,由于是初学STM32,用的是指南者开发板,位带配置是正确无无疑的,所以不太明白怎么配置PB11为普通I/O端口,之前对SMD和JTAG端口的重映射配置使那些被占用的端口成为了普通I/O端口,并且成功输出了高、低电平,但是这个PB11端口通关查看STM32资料,发现他与串口USART3复用,但是重映射并没有实现将其配置为普通I/O端口,然后就一头雾水了。

  最好有个例程程序或者实际应用的程序,以便参考,谢谢。希望能有个大神指点一二,谢谢了,急等,请各位大神多给些建议,讨论讨论也行,谢谢啦。。。。


回复

使用道具 举报

 楼主| 发表于 2018-3-1 14:27:18 | 显示全部楼层
求助,在线等,急急急急
回复 支持 反对

使用道具 举报

发表于 2018-3-1 17:18:23 | 显示全部楼层
C程序写法二:用语句
GPIO_ResetBits(OTHER_LED_GPIO_PORT,OTHER_LED_GPIO_PIN);
//是否可以使输出低电平? OTHER_LED_GPIO_PIN = 0?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-2 08:22:46 | 显示全部楼层
雨中的漫步 发表于 2018-3-1 17:18
C程序写法二:用语句
GPIO_ResetBits(OTHER_LED_GPIO_PORT,OTHER_LED_GPIO_PIN);
//是否可以使输出低 ...

感谢回复,不幸的是,还是没有成功输出低电平,还有没有其他方法呢?
PB11端口特殊吗?
回复 支持 反对

使用道具 举报

发表于 2018-3-2 10:15:12 | 显示全部楼层
实际试验:可默认输出0,1
H:
//试验
#define  Limitx1_GPIO_CLK   RCC_APB2Periph_GPIOB
#define  Limitx1_GPIO_PORT  GPIOB
#define  Limitx1_GPIO_PIN   GPIO_Pin_11  //上拉或下拉

#define  Limitx0_GPIO_CLK   RCC_APB2Periph_GPIOB
#define  Limitx0_GPIO_PORT  GPIOB
#define  Limitx0_GPIO_PIN   GPIO_Pin_10  //上拉或下拉

C:
//试验
  GPIO_InitStructure.GPIO_Pin = Limitx1_GPIO_PIN; //指定引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出 ULN2003 反相
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  //50MHz;最高工作频率
  GPIO_Init(Limitx1_GPIO_PORT, &GPIO_InitStructure);
  GPIO_SetBits(Limitx1_GPIO_PORT,Limitx1_GPIO_PIN); //默认输出高电平
  //GPIO_ResetBits(Limitx1_GPIO_PORT,Limitx1_GPIO_PIN); //默认输出低电平

  GPIO_InitStructure.GPIO_Pin = Limitx0_GPIO_PIN; //指定引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出 ULN2003 反相
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  //50MHz;最高工作频率
  GPIO_Init(Limitx0_GPIO_PORT, &GPIO_InitStructure);
  GPIO_SetBits(Limitx0_GPIO_PORT,Limitx0_GPIO_PIN); //默认输出高电平
  //GPIO_ResetBits(Limitx0_GPIO_PORT,Limitx0_GPIO_PIN); //默认输出低电平

回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-2 12:57:23 | 显示全部楼层
感谢各位的慷慨帮助,十分尴尬的是,我程序2写的是对的,只是没有在主函数调用,调用之后,工作正常了,谢谢各位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-2 12:57:56 | 显示全部楼层
已解决
已解决
已解决
已解决
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-16 00:53 , Processed in 0.030486 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表