有时程序载入硬件,没有按代码执行,可能由于此。
1.欲完成功能:
结构:PA0管脚可以输出高低电平,控制LED灯的亮灭;PA1管脚作为输入,连接一头已经接地的switch开关。
逻辑:当开关闭合时,LED灯亮;当开关断开时,LED灯灭。
代码和电路图如下:
2.发现问题
程序载入到芯片后运行,开关断与闭合,灯的状态无变化。又用核心板硬件测试,发现是一样的问题。
3.原因解析
GPIO_Write(GPIOA,0x????);函数一次性对A组的所有管脚进行输出操作。本意是只想让A0输出高低电平,但GPIO_Write影响了A1管脚的输入功能。此是硬件和软件的结合bug。为达到不更换硬件结构情况下完成预想效果,可使用的别的函数或只对A0管脚输出操作的代码。
4.问题解决
①.更换函数,只对A0管脚输出操作
②.直接操作GPIO_Write函数对应的底层代码里的寄存器,只对A0管脚输出
两种方法都用仿真和核心板硬件测试,正确。
5.Proteus仿真和真实硬件测试使用
同样的代码
用Proteus仿真达不到开关控制灯的亮灭
用核心板硬件测试可以达到理想效果。
这是仿真软件和硬件的区别,仿真软件有时达不到理想效果。
使用的例程如下:
使用Proteus和keil软件,画图+代码,控制stm32f10x系列芯片的一个管脚让灯亮灭呼吸灯仿真图工程+代码工程资源-CSDN文库 https://download.csdn.net/download/aaa794708075/88541603