完善资料让更多小伙伴认识你,还能领取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个回答
|
|
STM32不用库函数?你将flag设置为char类型是不对的,程序运行后,flag和!flag都是非零。将flag设置为bit看看。
|
|
|
|
if(flag) GPIOC->ODR &= 0xffff;
if(!flag) GPIOC->ODR &= 0x0000; 改成 if(flag) GPIOC->ODR &= 0xffff; if(!flag) GPIOC->ODR &= 0x0000; |
|
|
|
主函数最好加延时。否则IO的变化肉眼是看不出来的
|
|
|
|
你这个程序问题真多:
没有等待按键释放的程序语句,所以如果你的其他地方编写正确,也会以非常快的频率切换输出,因为一旦你的按键按下,Key_Proc都会一直不停的将flag取反; 你描述的问题是因为 if(flag) GPIOC->ODR &= 0xffff; if(!flag) GPIOC->ODR &= 0x0000; 这两句产生,第一个if语句没有任何用处,如果你使用的编译器优化好一些的话,甚至这一句都不会产生代码,因为任何32位数与0xFFFF做与运算还是得任何32位数; 你在Key_Init中将输出初始化为0xFFFF,所以,一旦有按键按下,就仅有第二个if语句将输出设成0; 所以你的感觉就是只有第一次按键有效,使得输出变低; 字符类型可以作为逻辑变量使用是对的,其逻辑值取决于该变量是否为0; if语句可以将逻辑判断和执行语句写在一行上,但是如果将判断和执行分行写,读起来会更明了一些; |
|
|
|
多谢指点。。。 |
|
|
|
|
|
|
|
多谢指点。。。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
FacenetPytorch人脸识别方案--基于米尔全志T527开发板
206 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
1046 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
3494 浏览 1 评论
877 浏览 0 评论
1745 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 05:59 , Processed in 0.534123 second(s), Total 57, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号