stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能

有时程序载入硬件,没有按代码执行,可能由于此。

1.欲完成功能:

结构:PA0管脚可以输出高低电平,控制LED灯的亮灭;PA1管脚作为输入,连接一头已经接地的switch开关。

逻辑:当开关闭合时,LED灯亮;当开关断开时,LED灯灭。

代码和电路图如下:

stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能_第1张图片

stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能_第2张图片

2.发现问题

程序载入到芯片后运行,开关断与闭合,灯的状态无变化。又用核心板硬件测试,发现是一样的问题。

3.原因解析

GPIO_Write(GPIOA,0x????);函数一次性对A组的所有管脚进行输出操作。本意是只想让A0输出高低电平,但GPIO_Write影响了A1管脚的输入功能。此是硬件和软件的结合bug。为达到不更换硬件结构情况下完成预想效果,可使用的别的函数或只对A0管脚输出操作的代码。

4.问题解决

①.更换函数,只对A0管脚输出操作

stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能_第3张图片

②.直接操作GPIO_Write函数对应的底层代码里的寄存器,只对A0管脚输出

stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能_第4张图片

两种方法都用仿真和核心板硬件测试,正确。

5.Proteus仿真和真实硬件测试使用

同样的代码

stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能_第5张图片

用Proteus仿真达不到开关控制灯的亮灭

stm32f10系列--管脚被设置为输入模式时,对其进行输出操作将影响其输入功能_第6张图片

用核心板硬件测试可以达到理想效果。

这是仿真软件和硬件的区别,仿真软件有时达不到理想效果。

使用的例程如下:

使用Proteus和keil软件,画图+代码,控制stm32f10x系列芯片的一个管脚让灯亮灭呼吸灯仿真图工程+代码工程资源-CSDN文库  https://download.csdn.net/download/aaa794708075/88541603

你可能感兴趣的:(stm32,嵌入式硬件,GPIO输入,GPIO输出,单片机)