找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1863|回复: 0
收起左侧

STM32之按键

[复制链接]
ID:107189 发表于 2016-3-4 20:19 | 显示全部楼层 |阅读模式
正式开始学习STM32了!!!!!要坚持下去
开发板:基于STM103C8T6的迷你彩屏开发板
烧些工具:Jlink8
学习一个芯片我们大多先以控制它的GPIO口开始的,今天我就开进行按键和LED。
这里我利用了网上别人写的一个SYSTEM文件夹,里面有delay,sys,usart三个子文件夹
这里面是STM103F103C系列的底层驱动函数,以后不再述说。
我的两个LED接的是PA9,10;两个按键的接的是PA11,12
先上我的代码
先是led.h
#ifndef LED_H
#define LED_H
#include"sys.h"  //I/O口相关函数的文件
#define LED0 PAout(9)  //PAout是输出
#define LED1 PAout(10)
void LED_Init(void);
#endif

led.c
#include<stm32f10x_lib.h>
#include"led.h"
void LED_Init(void)
{
RCC->APB2ENR|=1<<2;    //使能PORTA时钟
GPIOA->CRH&=0xFFFFF00F;   //  清除PA9,10所在口的设置
GPIOA->CRH|=0x00000330;   // 设置PA,9,10推挽输出
GPIOA->ODR|=1<<9;   //  PA9输出高
GPIOA->ODR|=1<<10;    //PA10输出高
}

key.h
#ifndef KEY_H
#define KEY_H
#include"sys.h"
#define KEY0 PAin(11)  //PAin是输入
#define KEY1 PAin(12)
void KEY_Init(void);  //按键初始化函数
u8 KEY_Scan(void); //按键检测函数
#endif

key.c
#include<stm32f10x_lib.h>
#include"key.h"
#include"delay.h"  //延时相关的函数集
void KEY_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRH&=0XFFF00FFF; //清除设置
GPIOA->CRH|=0X00044000;//设置为浮空输入,当然这里设置上/下拉输入也是可以的
}
u8 KEY_Scan(void)
{
static u8key_up=1;//按键按松开标志
if(key_up&&(KEY0==0||KEY1==0))
{
  delay_ms(10);//去抖动
  key_up=0;
  if(KEY0==0)
  {
   return1;
  }
  else if(KEY1==0)
  {
   return2;
  }
  
}
elseif(KEY0==1&&KEY1==1)
   key_up=1;   
  
return 0;// 无按键按下
}

主函数
#include<stm32f10x_lib.h>
#include"delay.h"
#include"usart.h"
#include"led.h"
#include"sys.h"
#include"key.h"
int main(void)
{
u8 t=0;
Stm32_Clock_Init(9);  //系统是时钟设置
delay_init(72);   //延时初始化
LED_Init();
KEY_Init();
LED0=1;
LED1=1;
  while(1)
  {
   t=KEY_Scan();//得到键值
    if(t!=0)
  {        
   switch(t)
   {   
    case1:
     LED0=!LED0;
     break;
    case2:
     LED1=!LED1;
     break;
  
   }
  }
  else
   delay_ms(10);
}
}

总结:我开始编译通过,但是烧写进板子后按键视乎不起作用,检查了半天,看寄存器都对的,后来才发现按键的宏定义错误了 错误:#define KEY0 PAout(11);  正确:#define KEY0PAin(11);因为按键是要检测IO口的状态故是输入,而LED类的是输出,这个需要注意!!!

回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表