主函数的语句直接跳过,麻烦帮忙看下程序是哪里出错了

2019-07-16 09:20发布

#include "STM32f10x_map.h"
void Key_Init(void);
void Key_Proc(void);

   char flag = 1;
int main(void)
{
     Key_Init();
while(1)
   {

   Key_Proc();
   if(flag) GPIOC->ODR &= 0xffff;
   if(!flag) GPIOC->ODR &= 0x0000;

   }


}

   void Key_Init(void)
   {
    RCC->APB2ENR |= 8;
        RCC->APB2ENR |= 0x0010;
        GPIOC->CRH &= 0xffffff00;
        GPIOC->CRH |= 0x00000033;
        GPIOC->CRL &= 0x00ffffff;
    GPIOC->CRL |= 0x33000000;
        GPIOC->ODR = 0xffff;
   }

   void Key_Proc(void)
   {
   short key = GPIOB->IDR;
   if(key & 0x8000)        
   {
   flag = !flag;
   }   
   }


按键只是上电第一次管用,再按就不管用了,调试的时候主函数里的两个if语句貌似直接就跳过去了。
谁知道这是哪里的问题

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
依然落叶飘零
1楼-- · 2019-07-16 15:16
STM32不用库函数?你将flag设置为char类型是不对的,程序运行后,flag和!flag都是非零。将flag设置为bit看看。
z00
2楼-- · 2019-07-16 15:42
if(flag) GPIOC->ODR &= 0xffff;
   if(!flag) GPIOC->ODR &= 0x0000;

改成
if(flag)
GPIOC->ODR &= 0xffff;
   if(!flag)
GPIOC->ODR &= 0x0000;
z00
3楼-- · 2019-07-16 19:53
主函数最好加延时。否则IO的变化肉眼是看不出来的
woodmice
4楼-- · 2019-07-17 01:34
 精彩回答 2  元偷偷看……
f来野
5楼-- · 2019-07-17 07:26
依然落叶飘零 发表于 2014-5-26 14:43
STM32不用库函数?你将flag设置为char类型是不对的,程序运行后,flag和!flag都是非零。将flag设置为bit看 ...

多谢指点。。。
f来野
6楼-- · 2019-07-17 10:46
z00 发表于 2014-5-27 11:26
主函数最好加延时。否则IO的变化肉眼是看不出来的

多谢指点。。。

一周热门 更多>