历史上的今天
今天是:2024年12月11日(星期三)
2018年12月11日 | 利用STM32的Systick中断实现按键消抖
2018-12-11 来源:eefocus
在系统初始化的时候对systick进行初始化
void SysTickConfig(void)
{
/* Set SysTick Timer for 100us interrupts */
if (SysTick_Config(SystemCoreClock / 10000))
{
/* Capture error */
while (1);
}
/* Configure the SysTick handler priority */
NVIC_SetPriority(SysTick_IRQn, 0x0);
}
在stm32f4xx_it.c中加入
void SysTick_Handler(void)
{
Key_Scan();
}
在按键初始化中加入按键扫描函数
void Key_Scan(void)
{
/*检测是否有按键按下 */
if( (GPIOG->IDR&(1UL<<5))!=(1UL<<5) )
{
kcount++; //有键按下,计数kcount加1
if(kcount>=32) //1MS中断一次,kcount大于等于32,即按键已按下32ms
{
if(label==0) //判断有没有重按键,1为有,0为没有
{
keys1=1; //设置按键标志
kcount=0;
label=1; //设置重按键标志
}
else
kcount=0;
}
else
keys1=0;
}
else //无按键按下
{
kcount=0; //清零kcount
keys1=0; //清除按键标志
label=0; //清除重按键标志
}
}
按键IO口初始化 PA0 PG4 PG5 三个IO口
void KeyInit(void)
{
/* Enable clock and init GPIO inputs */
RCC->AHB1ENR |= (1UL << 0) |
(1UL << 6) ;
GPIOA->MODER &= ~(3UL << 2* 0);
GPIOG->MODER &= ~(3UL << 2* 4);
GPIOG->MODER &= ~(3UL << 2* 5);
}
UL是指32位无符号整形数据 ,因此GPIOG->MODER &= ~(3UL << 2* 0);是指让PG5口作为输入;
uint8_t kcount;
uint8_t label;
extern uint8_t keys1;
最后忘了要定义这几个变量,否则编译通不过。
史海拾趣
|
中断向量表的编写 .ref _bad_trap ; 这个标号外部没有定义,为什么还用.ref,而不是用..global? .ref _c_int0 ; entry point to the code .sect "vectors" ;自定义 ...… 查看全部问答> |
|
许多电子初学者对于谐振电路的品质因素(Q值)理解的不是很透彻,近日在网上发现这篇文章,讲得比较详细. 在研究各种谐振电路时,常常涉及到电路的品质因素Q值的问题,那末什么是Q值呢?下面我们作详细的论述。 图1是一串 ...… 查看全部问答> |
|
大家好, 关于wifi的配置, 下面黑体部分: g_dwOutput & INTF_BSSID == 0????为什么啊?望高人指教! 部分打印信息: In flags used = [0x7fffffff] dwOutput 打印信息 = [0x000fffff] ...… 查看全部问答> |
|
在Lotus代理中的Initialize中这样写道Dim objRTXCApi As RTXClient.RTXAPI 但objRTXApi出错,定义不了objRTXCApi,在VB中只要添加应用就可以了,请问在Lotus该怎样声明objRTXApi?请高人帮忙解决!谢谢… 查看全部问答> |
|
TI的Sitara系列ARM器件提供了丰富多彩的启动模式, 可以说东邪西毒南帝北丐,你能想到的启动方式, 它基本上都有了.那么就让我们拷问一下Sitara, 究竟你是怎么实现这么多的启动的? 手段合不合** 是否损害了最广大的人民群众的根本利益?Sitara:尊敬的各 ...… 查看全部问答> |




