2348|7

47

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

外部输入出问题了 [复制链接]

    今天测试了ufun的四个touch电容按键  分别控制R,G,B,led3 四个led的电位。但是其中出现了一个小小的bug。
    我的hex文件在OBJ目录下
    我在我的源代码里写出来了,请大神帮我测测。



PAD_touch.zip

6.44 MB, 下载次数: 5

此帖出自stm32/stm8论坛

最新回复

这个论坛找下两只老虎的程序,四个按键都可以用。  详情 回复 发表于 2016-8-22 07:25
点赞 关注
 

回复
举报

47

帖子

0

TA的资源

一粒金砂(中级)

推荐
 
问题出在了管脚复用这边了,
就是stm32的某些管脚它的最基本功能不是GPIO
比如说我遇到的这个问题就是 PB3 是JTAG的JTDO脚。
这个脚的推挽输出功能就等于复用了
然后要开复用时钟,然后再配置
这样就对了。
额。
当我不知道时这个问题难了我好久,但当我知道了的时候才发现这个这么简单我都不知道。
加油吧,青年。
此帖出自stm32/stm8论坛
 
 

回复

47

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
此帖出自stm32/stm8论坛
 
 

回复

47

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
#include "touch.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"


#define KEY_left  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)
#define KEY_down  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)
#define KEY_right GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3)
#define KEY_up    GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)


void KEY_Init(void)
{
                        GPIO_InitTypeDef GPIO_InitStructure;
                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB,ENABLE);

                        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_4|GPIO_Pin_5;
                        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉          
                        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
                        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_3|GPIO_Pin_4;
                        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉          
                        GPIO_Init(GPIOB, &GPIO_InitStructure);
}


u8 KEY_Scan(u8 mode)
{
                        static u8 key_up=1;//按键按松开标志
                if(mode)key_up=1;  //支持连按                  
                if(key_up&&(KEY_left==1||KEY_down==1||KEY_right==1||KEY_up==1))
                {
                        delay_ms(10);
                        key_up=0;
                        if(KEY_left==1)return 1;    // G
                       
                        else if(KEY_down==1)return 2;  //  R
                       
                        else if(KEY_right==1)
                        {
                                printf("下键状态置反\r\n");
                                return 3;  //  LED3 这里没有返回值,估计也就是KEY_right没有扫描到高电平
                        }
                        else if(KEY_up==1)return 4; //  B
                }
                else if(KEY_left==0&&KEY_down==0&&KEY_right==0&&KEY_up==0)key_up=1;             
                return 0;
       
}
此帖出自stm32/stm8论坛
 
 
 

回复

47

帖子

0

TA的资源

一粒金砂(中级)

4
 
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "touch.h"
#include "led.h"



int main(void)
{       
               
                vu8 data;
                delay_init();
                uart_init(115200);
               
                LED_Init();
         
                printf("led初始化完成\n");
         
                KEY_Init();
                printf("key初始化完成\n");
        //        LED_THREE();
                PAout(3)=0;
            delay_ms(20000);
                while(1)
                {
                        //printf("key初始化完成\n");
                        //delay_ms(1000);
                        data=KEY_Scan(0);
                        if(data)
                        {
                                switch(data)
                                {
                                        case 1 :
                                                                                PAout(0)=!PAout(0);
                                                                                printf("左键状态置反\r\n");
                                                                break;
                                        case 2 :
                                                                                PAout(1)=!PAout(1);
                                                                                printf("下键状态置反\r\n");
                                                                break;
                                        case 3 :
                                                                                PAout(2)=!PAout(2);
                                                                                printf("rigt状态置反\r\n");
                                                                break;
                                        case 4 :
                                                                                PAout(3)=!PAout(3);
                                                                                printf("上键状态置反\r\n");
                                                                break;
                                       
                                }
                        }else                ;        //printf("没有按键按下\n");;
                }
         
         
         
}
此帖出自stm32/stm8论坛
 
 
 

回复

47

帖子

0

TA的资源

一粒金砂(中级)

5
 
很简单的一个键盘扫描程序,但是其中上,下,左都是好的,能用。同样的配置我右却不能用。这个问题我不知道是软件问题还是硬件问题了,但是硬件我检查了,没有问题的呀。
此帖出自stm32/stm8论坛
 
 
 

回复

482

帖子

0

TA的资源

纯净的硅(初级)

7
 
这个论坛找下两只老虎的程序,四个按键都可以用。
此帖出自stm32/stm8论坛

点评

就是stm32的某些管脚它的最基本功能不是GPIO 比如说我遇到的这个问题就是 PB3 是JTAG的JTDO脚。 这个脚的推挽输出功能就等于复用了 然后要开复用时钟,然后再配置 这样就对了。 0.0  详情 回复 发表于 2016-8-22 09:05
 
个人签名http://www.jslaser.com高性价比激光测距传感器
 
 

回复

47

帖子

0

TA的资源

一粒金砂(中级)

8
 
kangkls 发表于 2016-8-22 07:25
这个论坛找下两只老虎的程序,四个按键都可以用。

就是stm32的某些管脚它的最基本功能不是GPIO
比如说我遇到的这个问题就是 PB3 是JTAG的JTDO脚。
这个脚的推挽输出功能就等于复用了
然后要开复用时钟,然后再配置
这样就对了。
0.0
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表