嵌入式应用编程经验之谈-引脚复用

     目标芯片:STM32F101R6

     这里谈到关于STM32F1系列的芯片的IO口的使用,想必每个朋友在学习这款芯片的时候,第一件事情就是学习怎么控制芯片的IO口去点亮LED灯。这里我要谈到的不是各种IO口的模式的配置,而是有关于其引脚复用的问题。

    问题发现:这里我在项目中需要检测几个IO口,配置成输入模式并且检测其IO口的输入状态。但是发现无论外部条件怎么变化,读到的IO口的值出现与外部条件不对应的状态。下面给出我的IO口配置代码。

        GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
        //PA15
	GPIO_InitStructure.GPIO_Pin = DIP_SW1_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(DIP_SW1_PORT, &GPIO_InitStructure);
        //PB3	
	GPIO_InitStructure.GPIO_Pin = DIP_SW2_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(DIP_SW2_PORT, &GPIO_InitStructure);
	//PA14
	GPIO_InitStructure.GPIO_Pin = DIP_SW3_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(DIP_SW3_PORT, &GPIO_InitStructure);
	//PA13
	GPIO_InitStructure.GPIO_Pin = DIP_SW4_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(DIP_SW4_PORT, &GPIO_InitStructure);
  问题解决:这里我反复的去检查和查看自己读取IO口的逻辑代码,并没有发现问题,这里配置更是感觉没有任何问题。对于IO口的使用自己也是经常配置,自己也没想到问题便是处在IO配置上。在配置代码中增加这句话问题便得到解决。
        // 关闭JTAG,JTAG口用作普通IO口
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

  问题总结:这里我们需要注意STM32并不是所有的IO口默认状态都是作为普通IO口使用。这里这个项目的主控PA13、PA14默认情况下是用于JTMS、JTCK端口使用,这里我们需要作为普通的IO口便需要把这两个的脚的复用功能打开。上面的代码便是关闭SWJ功能,使得IO口作为普通IO口。这里大家在使用一款芯片的同时需要对其IO口的功能有一个全面的了解,才不会犯这样的错误。

 


  

 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值