
1、确定板子上LED灯的引脚位置是属于哪个口PORTA~PORTE
2、例程内的端口是否与硬件竖启上的端口一致。
3、LED的驱动电平是高电平还是低电平。
4、一个GPIO正常工作至少需要以下几点:
a、系统时钟已经配置并正常运行。
b、对应的GPIO时钟位已经行纤桥打开(为了降低功耗,默认GPIO的时钟是不会打开的)。
c、对应的GPIO引脚已经正确配置(如果没有外上拉,应当配置为推挽输出)。
d、对应的GPIO引脚输出寄存器已经设置为对应的电平。
5、程序正常下载的板子上。
6、正常下载还不能使用,检查板子是否正常(电源电压档猛是否达到要求?晶振是否起振?复位电平是否正确?)
int main(void){
SystemInit()
/* 开启GPIO时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE)
GPIO_InitTypeDef GPIO_InitStructure
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP
GPIO_Init(GPIOC, &GPIO_InitStructure)
GPIO_ResetBits(GPIOC,GPIO_Pin_13)
while(1)
}
有问题的那个程序u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)
只在上面那条指令采集了一次按键数据。
等到执行到 while(!ReadValue)//等待按键被放开哪罩 这条指令时
数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新读取按键状态,像正确的程序那样用这样的指令
while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10))//等待按键被放开
另外因为你只读取了一次按键状态,所以下面那么多一堆软返缓物件消除抖动的程序白写了。
综漏液上,正确的程序在每个判断的时刻都要重新读取下按键状态。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)