当前位置:首页 > 资讯 > info5 > 正文

【菜鸟入门】stm32 之 扫描按键

发表于: 2013-11-12   作者:ieczw   来源:转载   浏览:
摘要: 今天是学校stm32的第二天,昨天对整个板子,以及stm32构架有一个大致的了解,今天在解决按键的时候,就轻松多了。废话不多说,直接进入主题:SW5 PE14SW4 PE15SW3 PB10SW2 PB11这是我按键对应的管脚【由于我的板子是学长给的,出了板子之外其他的什么都木有,木办法,所有引脚的连接都是用万用表测出来的,费了好大的事,呵呵,废话了】一、按键管脚的配置【下面是简易图】配置程序:i

今天是学校stm32的第二天,昨天对整个板子,以及stm32构架有一个大致的了解,今天在解决按键的时候,就轻松多了。

废话不多说,直接进入主题:

SW5   PE14
SW4   PE15
SW3   PB10
SW2   PB11

这是我按键对应的管脚【由于我的板子是学长给的,出了板子之外其他的什么都木有,木办法,所有引脚的连接都是用万用表测出来的,费了好大的事,呵呵,废话了】

一、按键管脚的配置【下面是简易图】



配置程序:

int sw5_config()
{
		GPIO_TypeDef *sw5 = GPIOE;
		RCC->APB2ENR |= 1<<6;
		sw5->CRH &= ~(0xf<<(4*6));//Clear PE14 Register
		sw5->CRH |= 8<<(4*6);			//Set PE14 Register [TO:pull up / down]
		sw5->ODR |= GPIO_Pin_14;	//Enable PIN14
		return 0;
}
GPIO_TypeDef 这个结构体在stm32f10x.h里面,于是方便了我们的使用;

GPIO_TypeDef *sw5 = GPIOE;这样更方便我们对程序的识别

RCC->APB2ENR |= 1<<6;是选中GPIOE,具体看下面的datasheet


其他的注释都说的很清楚;

二、主程序的实现

int main()
{
	
		GPIO_TypeDef *led = GPIOE;
		sys_init(9);
		/*Config LED*/
		RCC->APB2ENR |= 1<<6;
		led->CRL &= 0xFFFFFFF0;
		led->CRL |= 0x3 << 0;
		led->ODR |= GPIO_Pin_0;
	
		led->BRR |= GPIO_Pin_0;		// LED ON
		delay_ms(1000);
		led->BSRR |= GPIO_Pin_0;	// LED¡¡OFF
		sw5_config();
		while(1)
		{
				if(!(GPIOE->IDR & GPIO_Pin_14))
				{
						delay_ms(20);
						if(!(GPIOE->IDR & GPIO_Pin_14))
						{
								led->BRR |= GPIO_Pin_0;	//LED ON
						}
				}
				else
				{
						led->BSRR |= GPIO_Pin_0;	//LED OFF
				}
		}

}

sys_init()函数昨天已经介绍过了,但是今天发现了一些不足,有重新进行了一下修改

int sys_init(unsigned char PLL)
{
	unsigned char temp = 0;
	RCC->CR |= 1<<16;				//OPEN HSE 
	while(!(RCC->CR>>17));	
	RCC->CFGR = 0x04<<8;	//APB1 HSE/2
	PLL -= 2;								//9-2 = 0111b
	RCC->CFGR |= PLL << 18;	//0111 ==> X9
	RCC->CFGR |= 1 << 16;		//PREDIV1 ouput as source of PLL
	FLASH->ACR |= 0x32;			//With
	
	RCC->CR |= 1<<24;	//enable PLL [24bit]
	while(!(RCC->CR >> 25));
	RCC->CFGR |= 0x2<<0;//PLL As System Clock
	while(temp != 0x02)
	{
			temp = RCC->CFGR >> 2;
			temp &= 0x03;
	}
	return 0;
}

!(GPIOE->IDR & GPIO_Pin_14)这里是获取14引脚的状态,主要看看IDR寄存器


这样大家就不难理解了吧?


注意:

我在看好多示例程序的时候,发现那些开发者经常犯一个危险的错误,这里我先说我的代码写法

led->BRR |= GPIO_Pin_0; //LED ON

这里在处理寄存器的时候用了“|=”,就是为了防止影响别的寄存器内容

可能大家都知道,但是经常不注意

OK,今天就先到这里




【菜鸟入门】stm32 之 扫描按键

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
啊啊啊,先叫两声,释放释放今天的压抑。。搞了一天终于把中断给搞定。 中断寄存器怎么说呢,两个字
经过今天一天的努力终于完成了我的stm32第一个程序;我也是今天才开始接触stm32。 由于苦于没有资料
说到键盘扫描,相信大多数人第一反应就是行列矩阵扫描,这样我们可以用相对有限的IO口得到尽可能多
一、基础学习 1、何为CSS CSS是Cascading Style Sheets(层叠样式表)的简称,是一种标记语言,它不需
先直接上代码 #include "stm32f0xx.h" #include "stm32_lib/inc/stm32f0xx_rcc.h" #include "stm32_
不好意思,忘了,使用CooCox IDE,还需要安装交叉编译工具 gcc-arm-none-eabi-XXXXXXXXX版本,自己
1、CooCox IDE当前最新版本为V2,不过个人看网上的示例大都是基于旧版本的,个人也试过新版本,发现
#include "stm32f0xx.h" #include "stm32_lib/inc/stm32f0xx_rcc.h" #include "stm32_lib/inc/stm32
1、struts2处理web应用请求过程mvc实现 2、HTTP请求 提交 Struts2StrutsPrepareAndExecuteFilter 核
有时候需要从网页上获取数据,比如别一些网页上的新闻获取到放到应用上,其实这也算是一个简单的网
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号